goo blog サービス終了のお知らせ 

marunomaruno-memo

marunomaruno-memo

Java問題 サンプル解答 配列(2)

2010年07月11日 | Weblog
--------------------------------------------------
/**
 * 9. (基本交換法)
 * 要素数10のint型配列aにデータが入っている。
 * この配列要素を昇順に並べ替える。
 * (参考:午前中のテキストp.62の基本交換法を使う)
 */
public class Quiz1609 {
    public static void main(String[] args) {
        int[] a = {50, 30, 90, 40, 100, 10, 20, 60, 80, 70, };

        // 表示する
        System.out.print("整列前 = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");

        // 整列する
        for (int i = 0; i 
            for (int j = 0; j 
                if (a[j] > a[j + 1]) {
                    int w = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = w;
                }
            }
        }
        
        // 表示する
        System.out.print("整列後 = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");
    }
}
/* 実行結果
整列前 = [50, 30, 90, 40, 100, 10, 20, 60, 80, 70, ]
整列後 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, ]
*/

--------------------------------------------------
/**
 * 10. (基本選択法)
 * 要素数10のint型配列aにデータが入っている。
 * この配列要素を昇順に並べ替える。
 * (参考:午前中のテキストp.63の基本選択法を使う)
 */
public class Quiz1610 {
    public static void main(String[] args) {
        int[] a = {50, 30, 90, 40, 100, 10, 20, 60, 80, 70, };

        // 表示する
        System.out.print("整列前 = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");

        // 整列する
        for (int i = 0; i 
            // 最大値を持つ添字を探す
            int maxIndex = 0;            // 最大値を持つ添字
            for (int j = 0; j 
                if (a[j] > a[maxIndex]) {
                    maxIndex = j;
                }
            }
            
            // 最大値を持つ添字を範囲の最後と交換する
            if (a[a.length - i - 1] 
                int w = a[a.length - i - 1];
                a[a.length - i - 1] = a[maxIndex];
                a[maxIndex] = w;
            }
        }
        
        // 表示する
        System.out.print("整列後 = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");
    }
}
/* 実行結果
整列前 = [50, 30, 90, 40, 100, 10, 20, 60, 80, 70, ]
整列後 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, ]
*/

--------------------------------------------------
/**
 * 11. (基本挿入法) 要素数10のint型配列aにデータが入っている。 この配列要素を昇順に並べ替える。
 * (参考:午前中のテキストp.63の基本挿入法を使う)
 */
public class Quiz1611 {
    public static void main(String[] args) {
        int[] a = {50, 30, 90, 40, 100, 10, 20, 60, 80, 70, };

        // 表示する
        System.out.print("整列前 = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");

        // 整列する
        for (int i = 1; i 
            int w = a[i];
            if (a[i - 1] > w) {
                // 挿入位置までずらす
                int j = i;
                for (j = i; (j > 0) && (a[j - 1] > w); j--) {
                    a[j] = a[j - 1];
                }
                a[j] = w;
            }
        }

        // 表示する
        System.out.print("整列後 = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");
    }
}
/*
 * 実行結果
整列前 = [50, 30, 90, 40, 100, 10, 20, 60, 80, 70, ] 
整列後 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, ]
 */

--------------------------------------------------
/**
 * 12. (文字列探索 - 力まかせ探索法) char型配列textにデータが入っている。
 * この文字配列textの中に、パターン文字列(char型配列pattern)を探索する。
 * あった場合は、patternの先頭文字と一致するtextの添字を返す。 ない場合は、-1を返す。
 *  (参考:午前中のテキストp.66の力まかせ探索法を使う)
 */
public class Quiz1612 {
    public static void main(String[] args) {
        String textString = "PQACZXYZRXYZ";
        char[] text = textString.toCharArray();

        String patternString = "XYZ";
        char[] pattern = patternString.toCharArray();

        // 表示する
        System.out.println("テキスト = [" + textString + "]");
        System.out.println("パターン = [" + patternString + "]");

        // 探索する
        int index = -1;
        search: 
        for (int i = 0; i <text.length - pattern.length + 1; i++) {
            // パターンを後ろから見ていく
            int j;
            for (j = pattern.length - 1; (j >= 0) && (text[i + j] == pattern[j]); j--) {
            }
            
            // すべて一致すれば見つかった
            if (j <0) { 0) {
                i += k;
            } else {
                i += 1;
            }
        }

        // 結果を表示する
        System.out.print("index = " + index);
    }
}
/*
 * 実行例 テキスト = [PQACZXYZRXYZ] パターン = [XYZ] index = 5
 * 
 * テキスト = [PQACZXYZRXYZ] パターン = [XYZW] index = -1
 */

--------------------------------------------------


Java問題 サンプル解答 配列(1)

2010年07月10日 | Weblog
1. 10個の要素を持つ配列a、bがある。
配列aの各要素をすべて配列bにコピーする。

2. 配列aの各要素を逆に配列bにコピーする。
    a[0]→b[9]、a[1]→b[8]、・・・ a[9]→b[0]

3. 配列aの各要素を1つずらして、配列bにコピーする。
    a[0]→b[1]、a[1]→b[2]、・・・ 
    a[8]→b[9]、a[9]→b[0]

4. 配列aの各要素を逆にする。[オプション]
    a[0]⇔a[9]、a[1]⇔a[8]、・・・a[4]⇔a[5]

5. 配列aの各要素を1つずつずらす。[オプション]
    a[0]→a[1]→a[2]・・・ →a[9]→a[0]

6.配列DAYSには、つぎの初期値が順番に入っている。
     int[] DAYS = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
これを使い、Quiz0705.java
「月(1~12)monthを入力して、その月の日数を表示する」
を改良する。

7. (線形探索)
要素数10のint型配列aにデータが入っている。
コマンドライン引数で、整数値を指定して、
その数値が配列要素にあるかどうか、
あれば、そのときの添字を表示する。
(参考:午前中のテキストp.58の線形探索)

8. (二分探索)
要素数10のint型配列aにデータが入っている。
このとき、要素の値は昇順に入っている。
コマンドライン引数で、整数値を指定して、
その数値が配列要素にあるかどうか、あれば、
そのときの添字を表示する。
(参考:午前中のテキストp.59の二分探索)

9. (基本交換法)
要素数10のint型配列aにデータが入っている。
この配列要素を昇順に並べ替える。
(参考:午前中のテキストp.62の基本交換法を使う)

10. (基本選択法)
要素数10のint型配列aにデータが入っている。
この配列要素を昇順に並べ替える。
(参考:午前中のテキストp.63の基本選択法を使う)

11. (基本挿入法)
要素数10のint型配列aにデータが入っている。
この配列要素を昇順に並べ替える。
(参考:午前中のテキストp.63の基本挿入法を使う)

12. (文字列探索 - 力まかせ探索法)
char型配列textにデータが入っている。
この文字配列textの中に、パターン文字列
(char型配列pattern)を探索する。あった場
合は、patternの先頭文字と一致するtextの
添字を返す。ない場合は、-1を返す。
(参考:午前中のテキストp.66の力まかせ探索法を使う)

(参考)Stringからchar配列を定義する例
        String textString = "PQACZXYZRXYZ";
        char[] text = textString.toCharArray();

13. (文字列探索 - BM法)
char型配列textにデータが入っている。
この文字配列textの中に、パターン文字列
(char型配列pattern)を探索する。あった場
合は、patternの先頭文字と一致するtextの
添字を返す。ない場合は、-1を返す。
(参考:午前中のテキストp.67のBM法を使う)


(2次元配列)

21. Quiz0904で、じゃんけんの勝敗表(2次
元配列)をつくり、勝負するロジックを簡単
にする。
また、指定した手も、数字ではなく、日本語
表記(グー、チョキ、パー)で表示すること。
--------- ------- -------- --------
勝敗表    0 グー  1 チョキ  2 パー
--------- ------- -------- --------
0 グー    引分け    勝ち     負け
1 チョキ   負け    引分け    勝ち
2 パー     勝ち     負け    引分け
--------- ------- -------- --------

22.金額を入力して、1000円でお釣りをもら
う。お釣りの硬貨は最低枚数とする。
6×2の配列coinsの、2列目に、それぞれのお
釣りの枚数を入れるアルゴリズムを作る。
1列目には硬貨の種類があらかじめ入ってい
るものとする。

    ------- ----------
     硬貨    お釣り枚数
    ------- ----------
[0]     1
[1]     5
[2]    10
[3]    50
[4]   100
[5]   500
    ------- ----------

23.重さに対する料金を出す。
6×2の配列の、1列目に重さ、2列目に料金が
入っている。
なお、重さは、下の表では以下をあらわす。
たとえば、200gに対しては、190円になる。
2000gより重い場合は、一律に2000円とする

    ------- ----
    重さ    料金
    ------- ----
[0]  100     100
[1]  200     190
[2]  400     370
[3]  600     550
[4] 1000     900
[5] 2000    1700
    ------- ----

--------------------------------------------------
/**
 * 10個の要素を持つ配列a、bがある。
 * 配列aの各要素をすべて配列bにコピーする。
 */
public class Quiz1601 {
    public static void main(String[] args) {
        int[] a = {5, 3, 7, 9, 0, 1, 2, 8, 4, 6, };
        int[] b = new int[a.length];

        // 表示する。
        System.out.print("a = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");

        // コピーする。
        for (int i = 0; i 
            b[i] = a[i];
        }

        // 表示する。
        System.out.print("b = [");
        for (int i = 0; i 
            System.out.print(b[i] + ", ");
        }
        System.out.println("]");
    }
}

--------------------------------------------------
/**
 * 配列aの各要素を逆に配列bにコピーする。
 *         a[0]→b[9]、a[1]→b[8]、・・・ a[9]→b[0]
 */
public class Quiz1602 {
    public static void main(String[] args) {
        int[] a = {5, 3, 7, 9, 0, 1, 2, 8, 4, 6, };
        int[] b = new int[a.length];

        // 表示する。
        System.out.print("a = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");

        // 逆順にコピーする。
        for (int i = 0; i 
            b[a.length - i - 1] = a[i];
        }

        // 表示する。
        System.out.print("b = [");
        for (int i = 0; i 
            System.out.print(b[i] + ", ");
        }
        System.out.println("]");
    }
}

--------------------------------------------------
/**
 * 配列aの各要素を1つずらして、配列bにコピーする。
 *         a[0]→b[1]、a[1]→b[2]、・・・ a[8]→b[9]、a[9]→b[0]
 */
public class Quiz1603 {
    public static void main(String[] args) {
        int[] a = {5, 3, 7, 9, 0, 1, 2, 8, 4, 6, };
        int[] b = new int[a.length];

        // 表示する。
        System.out.print("a = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");

        // ずらしてコピーする。
        for (int i = 0; i 
            b[(i + 1) % b.length] = a[i];
        }

        // 表示する。
        System.out.print("b = [");
        for (int i = 0; i 
            System.out.print(b[i] + ", ");
        }
        System.out.println("]");
    }
}

--------------------------------------------------
/**
 * 配列aの各要素を逆にする。(オプション)
 *         a[0]⇔a[9]、a[1]⇔a[8]、・・・a[4]⇔a[5]
 */
public class Quiz1604 {
    public static void main(String[] args) {
        int[] a = {5, 3, 7, 9, 0, 1, 2, 8, 4, 6, };

        // 表示する。
        System.out.print("before = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");

        // 逆にする。
        for (int i = 0; i 
            int w = a[i];
            a[i] = a[a.length - i - 1];
            a[a.length - i - 1] = w;
        }

        // 表示する。
        System.out.print(" after = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");
    }
}

--------------------------------------------------
/**
 * 配列aの各要素を1つずつずらす。(オプション)
 *         a[0]→a[1]→a[2]・・・ →a[9]→a[0]
 */
public class Quiz1605 {
    public static void main(String[] args) {
        int[] a = {5, 3, 7, 9, 0, 1, 2, 8, 4, 6, };

        // 表示する。
        System.out.print("before = [");
        for (int i = 0; i 
            System.out.printf("%d, ", a[i]);
        }
        System.out.println("]");

        // ずらす。
        int w = a[a.length - 1];
        for (int i = a.length - 1; i > 0; i--) {
            a[i] = a[i - 1];
        }
        a[0] = w;

        // 表示する。
        System.out.print(" after = [");
        for (int i = 0; i 
            System.out.printf("%d, ", a[i]);
        }
        System.out.println("]");
    }
}

--------------------------------------------------
/**
 * 月(1~12)を指定して、その月の日数を表示する
 */
public class Quiz1606 {
    public static void main(String[] args) {
        int month = 6;    // 月
        int[] DAYS = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        
        // 結果を表示する
        System.out.println(month + " 月は " + DAYS[month - 1] + " 日です。");
    }
}
/* 実行結果
6 月は 30 日です。
*/

--------------------------------------------------
/**
 * 7. (線形探索)
 * 要素数10のint型配列aにデータが入っている。
 * コマンドライン引数で、整数値を指定して、その数値が配列要素にあるかどうか、
 * あれば、そのときの添字を表示する。
 * (参考:午前中のテキストp.58の線形探索)
 */
public class Quiz1607 {
    public static void main(String[] args) {
        int key = Integer.parseInt(args[0]);
        int[] a = {50, 30, 90, 40, 100, 10, 20, 60, 80, 70, };

        // 探索する
        int index = -1;
        for (int i = 0; i 
            if (a[i] == key) {
                index = i;
                break;
            }
        }

        // 結果を表示する
        if (index >= 0) {
            System.out.println(key + " はありました。(index = " + index + ")");
        } else {
            System.out.println(key + " はありませんでした。");
        }
    }
}
/* 実行結果
>java Quiz1607 10
10 はありました。(index = 5)

>java Quiz1607 50
50 はありました。(index = 0)

>java Quiz1607 70
70 はありました。(index = 9)

>java Quiz1607 55
55 はありませんでした。
*/

--------------------------------------------------
/**
 * 7. (二分探索)
 * 要素数10のint型配列aにデータが入っている。このとき、要素の値は昇順に入っている。
 * コマンドライン引数で、整数値を指定して、その数値が配列要素にあるかどうか、
 * あれば、そのときの添字を表示する。
 * (参考:午前中のテキストp.58の二分探索)
 */
public class Quiz1608 {
    public static void main(String[] args) {
        int key = Integer.parseInt(args[0]);
        int[] a = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, };

        // 探索する
        int index = -1;
        int lowerIndex = 0;
        int upperIndex = a.length - 1;
        int middleIndex;
        while (lowerIndex <= upperIndex) {
middleIndex = (lowerIndex + upperIndex) / 2; if (a[middleIndex] <key) { key) { upperIndex = middleIndex - 1; } else { index = middleIndex; break; } } // 結果を表示する if (index >= 0) { System.out.println(key + " はありました。(index = " + index + ")"); } else { System.out.println(key + " はありませんでした。"); } } } /* 実行結果 >java Quiz1608 10 10 はありました。(index = 0) >java Quiz1608 50 50 はありました。(index = 4) >java Quiz1608 100 100 はありました。(index = 9) >java Quiz1608 55 55 はありませんでした。 */ --------------------------------------------------


Java超入門追加問題サンプル解答(ループ)

2010年06月28日 | Weblog
1. 1から100までの偶数の合計を表示する

2. 1+2+・・・と足していき、
合計が100を越えた時点の合計値と、
そのときに足した数を表示する

3. ★を横に5個並べて表示する。

4. ★を縦に5個並べて表示する。

5. 変数aと変数bの最大公約数を表示する

6. 変数a (>=2)が素数かどうかを表示する

(2重ループ)
7. ★を横に10個、縦に5個並べて表示する

8. ★を逆三角形の形で表示する
    ★★★★
    ★★★
    ★★
    ★

(テキストサンプルのオプション)
9.リスト8-15の九九表の表示結果を桁揃えする

(練習問題8のオプション)
10.問題2を2重ループを使って行う

------------------------------------------------------------
/**
 * 1から100までの偶数の合計を表示する
 */
public class Quiz0801 {
    public static void main(String[] args) {
        int sum = 0;    // 合計

        // 合計を計算する。
        for (int i = 2; i <= 100; i = i + 2) {
            sum = sum + i;
        }

        // 表示する。
        System.out.println("1 から 100 までの偶数の合計 = " + sum);

    }

}

------------------------------------------------------------
/**
 * 1+2+・・・と足していき、合計が100を越えた時点の合計値と、そのときに足した数を表示する
 */
public class Quiz0802 {
    public static void main(String[] args) {
        int sum = 0;    // 合計
        int i = 1;

        // 計算する。
        while (sum <= 100) {
            sum += i;
            i++;
        }

        // 表示する。
        System.out.println("1 から " + (i - 1) + " までの合計 = " + sum);
    }
}

------------------------------------------------------------
/**
 * ★を横に5個並べて表示する。
 */
public class Quiz0803 {
    public static void main(String[] args) {
        // 表示する。
        for (int i = 1; i <= 5; i++) {
            System.out.print("★");
        }
    }
}

------------------------------------------------------------
/**
 * ★を縦に5個並べて表示する。
 */
public class Quiz0804 {
    public static void main(String[] args) {
        // 表示する。
        for (int i = 1; i <= 5; i++) {
            System.out.print("★");
            System.out.println();
        }
    }
}

------------------------------------------------------------
/**
 * 変数aと変数bの最大公約数を表示する
 */
public class Quiz0805 {
    public static void main(String[] args) {
        int a = 12;
        int b = 32;

        // 表示する。
        System.out.println();
        System.out.println("a = " + a + " , b = " + b);

        // 判定する。
        int r;
        while ((r = a % b) != 0) {
            a = b;
            b = r;
        }

        // 表示する。
        System.out.println("最大公約数 = " + b);
    }
}

------------------------------------------------------------
/**
 * 変数a (>=2)が素数かどうかを表示する
 */
public class Quiz0806 {
    public static void main(String[] args) {
        int i;
        int a = 97;

        // 判定する。
        for (i = 2; (i < a) && (a % i != 0); i++) {
            // for文の中は何も処理しない
        }

        // 表示する。
        if (i < a) {
            System.out.println(a + " は素数ではありません。");

        } else {
            System.out.println(a + " は素数です。");

        }
    }
}

------------------------------------------------------------
/**
 * ★を横に10個、縦に5個並べて表示する
 */
public class Quiz0807 {
    public static void main(String[] args) {
        // 表示する。
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 10; j++) {
                System.out.print("★");
            }
            System.out.println();
        }
    }
}

------------------------------------------------------------
/**
 * ★を逆三角形の形で表示する(4行分の三角形とし、全部で★は10個出る)
 */
public class Quiz0808 {
    public static void main(String[] args) {
        // 表示する。
        for (int i = 4; i >= 1; i--) {
            for (int j = 1; j <= i; j++) {
                System.out.print("★");
            }
            System.out.println();
        }
    }
}

------------------------------------------------------------
/**
 * 九九表を桁揃えして表示する 
 *(リスト8-15の九九表の表示結果を桁揃えする)
 */
public class Quiz0809 {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                if ((i * j) <10) {<br>
                    System.out.print(" ");
                }
                System.out.print(i * j);
                System.out.print(" ");
            }
            System.out.println();
        }
    }
}

------------------------------------------------------------
/**
 * *を三角形の形で表示する
 * (テキスト練習問題8-2を2重ループを使って実現する)
 */
public class Quiz0810 {
    public static void main(String[] args) {
        // 表示する。
        for (int i = 1; i <= 10; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

------------------------------------------------------------


Java超入門追加問題サンプル解答(分岐)

2010年06月24日 | Weblog
■Quiz0701.java
int型の変数a, bに適当な初期値を入れる。
変数aと変数bを小さい順に並べる。

■Quiz0702.java
int型の変数aに適当な初期値を入れる。
変数aの符号を「+」「0」「-」と表示する

■Quiz0703.java
int型の変数a, b, cに適当な初期値を入れる。
変数aと変数b、変数cの最小値を表示する

■Quiz0704.java
西暦年yearを入力し、この西暦年がうるう年かどうかを表示する
・西暦年が4の倍数ならうるう年
・上記の条件でも、100の倍数なら平年
・上記の条件でも、400の倍数ならうるう年
どの条件にも当てはまらなければ平年

■Quiz0705.java
月(1~12)monthを入力して、その月の日数を表示する	

------------------------------------------------------------
/**
 * 変数aと変数bを小さい順に並べる
 */
public class Quiz0701 {
    public static void main(String[] args) {
        int a = 20;
        int b = 10;
        
        // 表示する
        System.out.println("並べ替え前:a = " + a + ", b = " + b);

        // 小さい順になるように入れ替える
        if (a > b) {
            int w = a;
            a = b;
            b = w;
        }
        
        // 表示する
        System.out.println("並べ替え後:a = " + a + ", b = " + b);
    }
}

------------------------------------------------------------
/**
 * 変数aの符号を「+」「0」「-」と表示する
 */
public class Quiz0702 {
    public static void main(String[] args) {
        int a = 20;
        char sign;    // 符号

        // 符号を設定する
        if (a > 0) {
            sign = '+';
        } else if (a == 0) {
            sign = '0';
        } else {
            sign = '-';
        }
        
        // 表示する
        System.out.println(a + " は " + sign + " です。");
    }
}

------------------------------------------------------------
/**
 * 変数aと変数b、変数cの最小値を表示する
 */
public class Quiz0703 {
    public static void main(String[] args) {
        int a = 20;
        int b = 5;
        int c = 10;
        int min;        // 最小値
        
        min = a;        // a を最小値と仮定する
        
        // min と b の最小値を決める
        if (min > b) {
            min = b;
        }

        // min と c の最小値を決める
        if (min > c) {
            min = c;
        }
        
        // 表示する
        System.out.println(a + ", " + b + ", " + c + " の最小値は " + min + " です。");
    }
}

------------------------------------------------------------
/**
 * 西暦年を指定し、この西暦年がうるう年かどうかを表示する
 *         西暦年が4の倍数ならうるう年
 *         上記の条件でも、100の倍数なら平年
 *         上記の条件でも、400の倍数ならうるう年
 *         どの条件にも当てはまらなければ平年
 */
public class Quiz0704 {
    public static void main(String[] args) {
        int year = 2010;    // 西暦年

        boolean leapYear;    // うるう年かどうかのフラグ
        if ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))) {
            leapYear = true;
        } else {
            leapYear = false;
        }
        
        // 結果を表示する
        if (leapYear) {
            System.out.println(year + " 年はうるう年です。");
            
        } else {
            System.out.println(year + " 年は平年です。");

        }
    }
}

------------------------------------------------------------
/**
 * 月(1~12)を指定して、その月の日数を表示する
 */
public class Quiz0705 {
    public static void main(String[] args) {
        int month = 6;    // 月

        int day;        // 日数
        
        switch (month) {
        case  4:
        case  6:
        case  9:
        case 11:
            day = 30;
            break;
            
        case 2:
            day = 28;
            break;

        default:
            day = 31;
            break;

        }
        
        // 結果を表示する
        System.out.println(month + " 月は " + day + " 日です。");
    }
}

------------------------------------------------------------




Java超入門追加問題サンプル解答(変数)

2010年06月22日 | Weblog
■Quiz0601.java
double型の変数widthとheightを宣言し、適当な初期値を入れ、
楕円の面積(width * height * 3.14 / 4)、
三角形の面積(width * height / 2)、
四角形の面積(width * height) 
を計算し、表示する。

■Quiz0602.java
BMI を計算し、表示する。変数はfloat型とする。
  体重weight(kg) / 身長height(m)の2乗

■Quiz0603.java
生まれてから今日で何秒経過したかをミリ秒で表示する。
1年は365.25日として計算する。
なお、結果はlong型として、小数点以下は四捨五入する。

■Quiz0604.java
int型の変数aに適当な初期値(正の整数)を入れる。
この変数aの値が何桁かを表示する。
(ヒント)
桁数は、数値を文字列にしたときの長さになる。
int型の変数aを文字列にする: Integer.toString(a)  

■Quiz0605.java
int型の変数aに適当な初期値を入れる。
aが偶数のときtrue、奇数のときfalseを表示する。


----------------------------------------------------------
/**
 * double型の変数widthとheightを宣言し、適当な初期値を入れ、
 *  楕円の面積(width * height * 3.14 / 4)、
 *  三角形の面積(width * height / 2)、
 *  四角形の面積(width * height) 
 * を計算し、表示する。
 */
public class Quiz0601 {
    public static void main(String[] args) {
        double width = 10;
        double height = 5;

        System.out.println("楕円 の面積 = " + (width * height * 3.14 / 4));
        System.out.println("三角形の面積 = " + (width * height / 2));
        System.out.println("四角形の面積 = " + (width * height));
    }
}
/* 実行結果
楕円 の面積 = 39.25
三角形の面積 = 25.0
四角形の面積 = 50.0
*/
----------------------------------------------------------



----------------------------------------------------------
/**
 * BMI を計算し、表示する。変数はfloat型とする。
 *   体重 / 身長の2乗
 */
public class Quiz0602 {
    public static void main(String[] args) {
        float weight = 55F;
        float height = 1.62F;
        
        System.out.println("BMI = " + (weight / (Math.pow(height, 2))));
    }
}
/* 実行結果
BMI = 20.95717103956016
*/
----------------------------------------------------------



----------------------------------------------------------
/**
 * 生まれてから今日で何秒経過したかをミリ秒で表示する。
 * 1年は365.25日として計算する。
 * なお、結果はlong型として、小数点以下は四捨五入する。
 */
public class Quiz0603 {
    public static void main(String[] args) {
        long age;
        long time;

        age = 32;

        time = (long) ((age * 365.25 * 24 * 60 * 60 * 1000) + 0.5);
// 別解        time = Math.round(age * 365.25 * 24 * 60 * 60 * 1000);

        System.out.println("あなたが生まれてから" + age + "年経ちました。");
        System.out.println("これを秒ミリで表すと" + time + "ミリ秒です。");
    }
}
/* 実行結果
あなたが生まれてから32年経ちました。
これをミリ秒で表すと1009843200000ミリ秒です。
*/
----------------------------------------------------------



----------------------------------------------------------
/**
 * int型の変数aに適当な初期値(正の整数)を入れる。
 * この変数aの値が何桁かを表示する。
 * (ヒント)
 * 桁数は、数値を文字列にしたときの長さになる。
 * int型の変数aを文字列にする: Integer.toString(a) 
 */
public class Quiz0604 {
    public static void main(String[] args) {
        int a = 123456;

        String s = Integer.toString(a);

        System.out.println(a + " は " + s.length() + " 桁です。");
    }
}
/* 実行結果
123456 は 6 桁です。
*/
----------------------------------------------------------



----------------------------------------------------------
/**
 * int型の変数aに適当な初期値を入れる。
 * aが偶数のときtrue、奇数のときfalseを表示する。
 */
public class Quiz0605 {
    public static void main(String[] args) {
        int a = 123456;

        System.out.println(a + " は偶数? " + ((a % 2) == 0));
    }
}
/* 実行結果
123456 は偶数? true
*/
----------------------------------------------------------


Java超入門追加問題サンプル解答(算術演算子)

2010年06月18日 | Weblog
■クイズ1
------------------------------------------------------------
/**
Quiz0501.java
円の面積(半径 * 半径 * 3.14)、
三角形の面積(底辺 * 高さ / 2)、
四角形の面積(幅 * 高さ) 
を計算し、表示する(値は適当に指定する)
 */
class Quiz0501 {
    public static void main(String[] args) {
        System.out.println("円  の面積 = " + (10 * 10 * 3.14));
        System.out.println("三角形の面積 = " + (10 * 5 / 2.0));
        System.out.println("四角形の面積 = " + (10 * 5));
    }
}
/* 実行結果
C:src>java Quiz0501
円  の面積 = 314.0
三角形の面積 = 25.0
四角形の面積 = 50
 */
------------------------------------------------------------

■クイズ2
------------------------------------------------------------
/**
Quiz0502.java
BMI を計算し、表示する
  体重(kg) / 身長(m)の2乗
 */
class Quiz0502 {
    public static void main(String[] args) {
        System.out.println("BMI = " + (55 / (1.6 * 1.6)));
    }

}
/* 実行結果
C:src>java Quiz0502
BMI = 21.484374999999996
 */
------------------------------------------------------------

Java超入門追加問題サンプル解答(表示)

2010年06月17日 | Weblog

// 九九表を表示する
class Kuku01 {    
    public static void main(String args[]) {
        System.out.println("  1  2  3  4  5  6  7  8  9");
        System.out.println("  2  4  6  8 10 12 14 16 18");
        System.out.println("  3  6  9 12 15 18 21 24 27");
        System.out.println("  4  8 12 16 20 24 28 32 36");
        System.out.println("  5 10 15 20 25 30 35 40 45");
        System.out.println("  6 12 18 24 30 36 42 48 54");
        System.out.println("  7 14 21 28 35 42 49 56 63");
        System.out.println("  8 16 24 32 40 48 56 64 72");
        System.out.println("  9 18 27 36 45 54 63 72 81");

/*
        for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.printf("%3d", (i * j)); } System.out.println(); } */ } }


JavaScript Q1-Q5サンプル解答

2010年06月11日 | Weblog
<html>
<head>
<title>Q1</title>
<!--
Q1. 整数を入力して、その値が負のときは、マイナスをかける。正のときは何もしない。
結果は表示する。
-->
</head>
<body>
<script type="text/javascript">
    num = Number(prompt
        ("数字を入力してください", 0));
    if (num < 0) {
        num = -num;
    }
    document.write("結果 = " + num + "<br>");
</script>
</body>
</html>



--------------------------------------------------------------------------------
<html>
<head>
<title>Q2</title>
<!--
Q2. 整数を入力して、その符号を表示する。
    表示は、「正」「負」でOK.
-->
</head>
<body>
<script type="text/javascript">
    num = Number(prompt
        ("数字を入力してください", 0));
    document.write(num + " は");    
    if (num >= 0) {
        document.write("正です。<br>");
    } else {
        document.write("負です。<br>");
    }

</script>
</body>
</html>



--------------------------------------------------------------------------------
<html>
<head>
<title>Q3</title>
<!--
Q3. 整数を入力して、その値が0以上100以下にあるかどうかを表示する。
-->
</head>
<body>
<script type="text/javascript">
    num = Number(prompt
        ("数字を入力してください", 0));
    document.write(num + " は");    
    if (0 <= num && num <= 100) {
        document.write("範囲内です。<br>");    
    } else {
        document.write("範囲外です。<br>");
    }

</script>
</body>
</html>



--------------------------------------------------------------------------------
<html>
<head>
<title>Q4</title>
<!--
Q4. ★を横に5個並べる
-->
</head>
<body>
<script type="text/javascript">
    for (i = 1; i <= 5; i++) {
        document.write("★");
    }
</script>
</body>
</html>



--------------------------------------------------------------------------------
<html>
<head>
<title>Q5</title>
<!--
Q5. 1~5までの合計を計算して表示する
  (ループを使って計算)
  ヒント:合計を出す変数を使う
-->
</head>
<body>
<script type="text/javascript">
    sum = 0;
    for (i = 1; i <= 5; i++) {
        sum += i;
    }
    document.write("合計 = " + sum);
</script>
</body>
</html>



--------------------------------------------------------------------------------


カルクーベ

2010年03月31日 | Weblog
カルクーベ
http://calqueve.com/
で、食べ歩きできるケーキを買う。
ワッフルコーンにケーキを詰めた、食べ歩けるスタイルの新しいケーキ。
いちごショートケーキ、チョコバナナクリーム、チーズケーキの3種類あり、3つ頼む。
好みでは、イチゴショートが一番よいかな。
名前の由来を聞いたところ、「軽く食う」だそうだ。
まあ、軽く食うには少々高い(399円)が。。。
「赤い彗星」という名のケーキもあり、ショーウィンドウの上には赤い彗星の模型が置いてあった。
「白い弾丸」?というのもあり、これも、ガンダムか?
でも、ワッフルコーンにケーキ詰めるのなら、アイスクリームも乗っているとよかったかもしれない。

レインボー戦隊ロビン (東映アニメモノクロ傑作撰vol.2)

2010年03月07日 | Weblog
年末に、
サイボーグ009 怪獣戦争 劇場版、1967
http://www.tsutaya.co.jp/works/10017082.html
をレンタルで見たが、このとき、ドルフィン号で海上を行く009たちと、
「レインボー戦隊ロビン」とすれ違うシーンがあった。
「レインボー戦隊ロビン」も見てみたい、ということで、DVDを探したが、
ない。

単体で、4話分入っているDVDはあったが、売り切れ。
結局、この単体の4話分のDVDが入っているボックス
東映アニメモノクロ傑作撰vol.2
を買う。

内容は、以下のとおり。
宇宙パトロールホッパ
第1話:宇宙少年ジュン
第14話:チビッコ政府誕生
第21話:太陽の子ライマン
第27話:お母さんは地球星

レインボー戦隊ロビン
第1話:怪星人現る!
第6話:宇宙にかける虹
第26話:パルタ星最后の日
第28話:リリにおまかせ

海賊王子
第1話:南海の王子
第14話:海賊同盟
第28話:トンダ海峡を突破せよ
第31話:海賊旗よ永遠に

「レインボー戦隊ロビン」は、懐かしい。ロビンも、第1話からからみると、
第28話は相当成長している感じだ。話の内容はあまり覚えていないが、
「教授」や「ベル」は覚えている。
4話分を見て、ますます、レインボー戦隊ロビンを見たくなった。
DVDで出してくれないかしらん。LDでは出ているみたい。でも、LDはいまさ
ら買う気はないが、DVDが出たら、きっと買うだろう。

「宇宙パトロールホッパ」も、不思議だが、ホッパ人については覚えてい
る。というよりも、初期のオープニングは記憶にある。再放送やったのか
な。

「海賊王子」は、見ていなかったと思う。この中では一番新しいものだが、
まったく記憶にないので。主人公のキッドの声を、星飛雄馬やアムロの古
谷徹が子供のころやっていた、ということで、けっこう興味深い。第1話と
第31話では明確に声が違い、これが、声変わりした結果か、と思っていた
が、実は、最初のころは古谷徹がキッドの声ではなかったみたい。
海賊王子が、上の3つの中では一番新しいためか、絵やストーリーがしっか
りしている印象。


CanonのプリンターMP520の不思議

2010年03月01日 | Weblog
CanonのプリンターMP520を使っている。
白黒印刷で、黒インクが残っているのに、カラーインクの分がなくなると
印刷できない。
不思議だ。
上記から考えると当然なのだが、ここ数ヶ月は白黒印刷しかしていないのに、
カラーインクが減る。
なぜだろう。

ちなみに、MP520 は、黒・シアン・マゼンダ・イエローの4色のインクを
使っているタイプ。

プログラミング作法

2010年01月18日 | Weblog
ふとしたことから、また、
「プログラミング作法」
Brian W.Kernighan・Rob Pike著/福崎俊博訳
2000年
http://www.ascii.co.jp/books/books/detail/4-7561-3649-4.shtml
を読む。

参考までに最後のルール集を記しておく。

スタイル
- グローバルにはわかりやすい名前を、ローカルには短い名前を
- 統一しよう
- 関数には能動的な名前を
- 名前は的確に
- 構造がわかるようにインデントをしよう
- 自然な形の式を使おう
- かっこを使ってあいまいさを解消しよう
- 複雑な式は分割しよう
- 明快に書こう
- 副作用に注意
- インデントとブレースのスタイルを統一しよう
- 慣用句によって一貫性を確保しよう
- 他分岐の判定には else-if を使おう
- 関数マクロはなるべく使うな
- マクロの本体と引数はかっこに入れよう
- マジックナンバーには名前をつけよう
- 数値はマクロでなく定数名として定義しよう
- 数値でなく文字定数を使おう
- オブジェクトサイズは言語に計算させよう
- 当たり前のことをいちいち書くな
- 関数とグローバルデータにコメントを
- 悪いコードにコメントをつけるな、書き直せ
- コードと矛盾させるな
- あくまでも明快に、混乱を招くな
- 実装の詳細を隠蔽しよう
- 直交性のある小さなプリミティブセットを選択しよう
- ユーザーに内緒で何かをするな
- 同じことはどこでも同じように実行しよう
- リソースの開放は割り当てと同じレイヤで
- エラーの検出は低いレベルで、その処理は高いレベルで
- 例外は例外的な状況にのみ使用しよう

デバッグ
- おなじみのパターンを見つけよう
- 最新の変更点は要チェック
- 同じ間違いを繰り返すな
- デバッグは今すぐに
- スタックトレースを取得しよう
- 打つ前に読め
- 自分のコードを他人に説明してみよう
- バグを再現できるようにしよう
- 分割統治しよう
- 誤動作を「数字占い」で検証しよう
- 出力表示によってバグ探索範囲を狭めよう
- 自己検証コードを記述しよう
- ログファイルを出力しよう
- 作図しよう
- ツールを使おう
- 記録をとろう

テスト
- 境界をテストしよう
- 事前と事後の状態をテストしよう
- アサーションを使おう
- プログラミングは防御的に
- エラーの戻り値をチェックしよう
- テストはインクリメンタルに
- テストは単純な部品から
- 期待される出力を把握しておこう
- 保存される性質を検証しよう
- 独立した実装同士を比較しよう
- テストの網羅範囲を測定しよう
- 回帰テストを自動化しよう
- 自給自足テストを作成しよう

性能
- 時間計測を自動化しよう
- プロファイラを利用しよう
- ホットスポットに神経を集中しよう
- 作図しよう
- より優れたアルゴリズムやデータ構造を利用しよう
- コンパイラの最適化を有効に
- コードをチューニングしよう
- 関係ない部分を最適化するな
- 共通する式をまとめよう
- 高価な処理を案化な処理に置き換えよう
- ループは展開するか除去しよう
- 頻繁に使われる値をキャッシュしよう
- 専用のアロケータを書こう
- 入力と出力をバッファリングしよう
- 特別なケースは別個に処理しよう
- 結果を事前に計算しておこう
- 近似値を使おう
- より低級な言語で書き直そう
- できる限り小さなデータ型を使って領域を節約しよう
- 簡単に再計算できるものを記憶するな

移植性
- 標準に固執しよう
- 王道のプログラミングをしよう
- 言語のトラブルスポットに気をつけよう
- 複数のコンパイラで試してみよう
- 標準ライブラリを使おう
- どこでも利用できる機能だけ使おう
- 条件コンパイルは避けよう
- システム依存のコードは別個のファイルに
- システム依存部分はインターフェースの裏に隠蔽しよう
- データ交換にはテキストを
- データ交換には固定のバイト順を使おう
- 仕様を変えるなら名前を変えよう
- 既存のプログラムやデータとの互換性を維持しよう
- ASCIIを前提にするな
- 英語を前提にするな


これも参考。
プログラミング作法 - Wikipedia
http://ja.wikipedia.org/wiki/プログラミング作法