Java - 基本データ型の配列


■ページ目次

Top

■配列

Top

■基本データ型の配列

Top
■例題
  1. コマンドラインから入力した月の日数を出力するアプリケーション"Days00.java"を、配列を使用して作成してください。("Days10.java")
    1. public class Days10 {
    2. public static void main(String[] args) {
    3. int month = Integer.parseInt(args[0]); // コマンドラインからの引数をint型に変換します。
    4. // 月 1 2 3 4 5 6 7 8 9 10 11 12
    5. int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 日数
    6. // 索引 0 1 2 3 4 5 6 7 8 9 10 11
    7. System.out.println(month + " 月は " + days[month - 1] + " 日です。");
    8. }
    9. }

    □ 実行結果

    $ java Days10 2
    2 月は 28 日です。
    
  2. 10個の要素を持つint型配列を宣言・作成し、その各要素の内容を表示するアプリケーション"Array51.java"を作成・実行してください。
    1. public class Array51 {
    2. public static void main(String[] args) {
    3. int[] a = new int[10];
    4. for (int i = 0; i < a.length; i++) {
    5. System.out.println("a[" + i + "] = " + a[i]);
    6. }
    7. }
    8. }

    □ 実行結果

    $java Array51
    a[0] = 0
    a[1] = 0
    a[2] = 0
    a[3] = 0
    a[4] = 0
    a[5] = 0
    a[6] = 0
    a[7] = 0
    a[8] = 0
    a[9] = 0
    
    データ型初期値
    byte, short, int, long0
    float0.0F
    double0.0
    char'\u0000'
    booleanfalse
    参照型null

  3. 下記の実行結果を参考にして、int型配列を引数として、その配列を下記実行結果のように各要素の内容を文字列化するユーティリティ・クラス"ArrayUtil.java"を作成してください。メソッド名は、toString()とします。なお、プログラム中で、StringBufferクラスのインスタンスを使用してますが、詳細は"java.lang.StringBuffer"で行います。
    このとき、配列を宣言するアプリケーションは"Array52.java"とします。
  4. "ArrayUtil.java"
    1. public class ArrayUtil {
    2. static String toString(int[] a) {
    3. StringBuffer sb = new StringBuffer("[");
    4. for (int i = 0; i < a.length; i++) {
    5. if (i != a.length -1) {
    6. sb.append(a[i] + ", ");
    7. } else {
    8. sb.append(a[i]);
    9. }
    10. }
    11. sb.append("]");
    12. return sb.toString();
    13. }
    14. }

  5. "Array52.java"
    1. public class Array52 {
    2. public static void main(String[] args) {
    3. int[] a = new int[10]; // 要素10個のint型配列の宣言と生成
    4. System.out.println(ArrayUtil.toString(a)); // 配列を文字列化して表示します。
    5. }
    6. }

    □ 実行結果

    $java Array52
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    
Top
■実習
  1. つぎのアプリケーション"Array71.java"をコンパイル・実行してください。
    1. public class Array71 {
    2. public static void main(String[] args) {
    3. int[] a = new int[4];
    4. a[0] = 100;
    5. a[1] = -100;
    6. a[2] = 0;
    7. a[3] = 0xffff;
    8. System.out.println(ArrayUtil.toString(a));
    9. }
    10. }

    □ 実行結果

    $java Array71
    [100, -100, 0, 65535]
    
  2. 上記アプリケーション"Array71.java"で、要素の値を配列初期化子を利用して設定するアプリケーション"Array72.java"です。
    1. public class Array72 {
    2. public static void main(String[] args) {
    3. int[] a = {100, -100, 0, 0xffff};
    4. System.out.println(ArrayUtil.toString(a));
    5. }
    6. }

    □ 実行結果

    $java Array72
    [100, -100, 0, 65535]
    

  3. 配列の要素の合計を表示するアプリケーション"Sum11.java"を作成・実行してください。
    1. public class Sum11 {
    2. public static void main(String[] args) {
    3. int[] a = {100, -100, 0, 0xff, -077};
    4. // ここにコードを記述してください。
    5. System.out.println("a[] = " + ArrayUtil.toString(a));
    6. System.out.println("sum = " + sum);
    7. }
    8. }

    □ 実行結果

    $ java Sum11
    a[] = [100, -100, 0, 255, -63]
    sum = 192
    

  4. 配列(要素数 > 0)の要素の最小値と最大値を表示するアプリケーション"MinMax11.java"を作成・実行してください。
    1. public class MinMax11 {
    2. public static void main(String[] args) {
    3. int[] a = {100, -100, 0, 0xff, -077};
    4. // ここにコードを記述してください。
    5. System.out.println("a[] = " + ArrayUtil.toString(a));
    6. System.out.println("min = " + min + ", max = " + max);
    7. }
    8. }

    □ 実行結果

    $ java MinMax11
    a[] = [100, -100, 0, 255, -63]
    min = -100, max = 255
    
  5. オプション
    配列の要素の最小値と最大値を表示するアプリケーション"MinMax12.java"を作成・実行してください。このとき、配列の要素数が 0 のときは、最小値は Integer.MAX_VALUE(2147483647), 最大値は Integer.MIN_VALUE(-2147483648) になるようにしてください。
    1. public class MinMax12 {
    2. public static void main(String[] args) {
    3. int[] a = new int[0];
    4. // ここにコードを記述してください。
    5. System.out.println("a[] = " + ArrayUtil.toString(a));
    6. System.out.println("min = " + min + ", max = " + max);
    7. }
    8. }

    □ 実行結果

    $ java MinMax12
    a[] = []
    min = 2147483647, max = -2147483648
    
    a[] = [100]
    min = 100, max = 100
    
    a[] = [100, -100, 0, 255, -63]
    min = -100, max = 255
    
  6. 10個の要素を持つint型配列を宣言・作成し、その各要素に添え字と同じ値を設定するアプリケーション"Array53.java"を作成してください。
    なお、配列の確認には、上記のユーティリティ・クラス"ArrayUtil.java"を使用します。
    1. public class Array53 {
    2. public static void main(String[] args) {
    3. int[] a = new int[10];
    4. for (int i = 0; i < a.length; i++) {
    5. a[i] = i; // 配列要素に値を設定
    6. }
    7. System.out.println(ArrayUtil.toString(a));
    8. }
    9. }

    □ 実行結果

    $java Array53
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
  7. コマンドラインのから指定した引数の数と、値をすべて表示するアプリケーション"ArgsPrint01.java"を作成してください。
    1. public class ArgsPrint01 {
    2. public static void main(String[] args) {
    3. System.out.println("args.length = " + args.length);
    4. for (int i = 0; i < args.length; i++) {
    5. System.out.println(i + " : " + args[i]);
    6. }
    7. }
    8. }

    □ 実行結果

    $ java ArgsPrint01
    args.length = 0
    
    $ java ArgsPrint01 Hello Java World
    args.length = 3
    0 : Hello
    1 : Java
    2 : World
    
    $ java ArgsPrint01 "Hello Java World"
    args.length = 1
    0 : Hello Java World
    
Top
■配列のコピー
Top
■浅いコピー
Top
■深いコピー
Top
■実習
  1. 10個の要素からなる配列aに対し、つぎのことを行うアプリケーション"Array31.java"を作成してください。
    1. 要素の正順に配列bにコピーします。
    2. 要素の逆順に配列cにコピーします。
    3. aの要素を逆にします。このとき、作業用の変数をひとつ使用してもかまいません。
    4. aの要素を2つずらします。このとき、要素数が2つの配列は作業用として使用してもかまいません。
    5. (オプション)さらにaの要素を2つずらす。このとき、作業用の変数をひとつ使用してもかまいません。
    なお、配列の確認には、上記のユーティリティ・クラス"ArrayUtil.java"を使用します。
    1. public class Array31 {
    2. public static void main(String[] args) {
    3. int[] a = new int[10];
    4. for (int i = 0; i < a.length; i++) {
    5. a[i] = i;
    6. }
    7. System.out.println("a[] = " + ArrayUtil.toString(a));
    8. System.out.println();
    9. // 要素の正順に配列bにコピーする。
    10. int[] b = new int[a.length];
    11. // コードを記述してください。
    12. // 要素の逆順に配列cにコピーする。
    13. int[] c = new int[a.length];
    14. // コードを記述してください。
    15. // 要素を逆にする。
    16. int w;
    17. // コードを記述してください。
    18. // 要素を2つずらす。このとき、要素数が2つの配列は作業用として使用してもよい。
    19. int[] t = new int[2];
    20. // コードを記述してください。
    21. // a, b, cのプリント
    22. System.out.println("** a, b, cのプリント **");
    23. System.out.println("a[] = " + ArrayUtil.toString(a));
    24. System.out.println("b[] = " + ArrayUtil.toString(b));
    25. System.out.println("c[] = " + ArrayUtil.toString(c));
    26. System.out.println();
    27. // さらに要素を2つずらす。このとき、作業用の変数をひとつ使用してもよい。
    28. int u;
    29. // コードを記述してください。
    30. System.out.println("** 要素ずれのプリント **");
    31. System.out.println("a[] = " + ArrayUtil.toString(a));
    32. }
    33. }

    □ 実行結果

    $java Array31
    a[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    ** a, b, cのプリント **
    a[] = [7, 6, 5, 4, 3, 2, 1, 0, 9, 8]
    b[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    c[] = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    
    ** 要素ずれのプリント **
    a[] = [5, 4, 3, 2, 1, 0, 9, 8, 7, 6]
    
  2. (オプション)
    引数で指定された配列に、0以上・要素数未満の整数の乱数を設定して戻すメソッドgetRandomElement(int[])を、ユーティリティ・クラス"ArrayUtil.java"に作成してください。
    また、これを確認するアプリケーション"Array73.java"を作成・実行してください。
    乱数の設定には、Mathクラスのrandom()メソッドを利用します。このメソッドは、double型の0以上1未満の戻り値を返します。
    1. // 0703
    2. public class ArrayUtil {
    3. // 途中省略
    4. // 乱数設定
    5. static int[] getRandomElement(int[] a) {
    6. // コードを記述してください。
    7. return a;
    8. }
    9. }
    1. public class Array73 {
    2. public static void main(String[] args) {
    3. int[] a = new int[Integer.parseInt(args[0])];
    4. System.out.println(ArrayUtil.toString(ArrayUtil.getRandomElement(a)));
    5. }
    6. }

    □ 実行結果

    $java Array73 10
    [3, 3, 0, 7, 5, 8, 9, 5, 7, 4]
    
Top

■多重配列

Top
■例題
  1. じゃんけんゲームをするアプリケーション"Janken10.java"を、2 次元配列を使うように改良します("Janken11.java")。ゲームは、コマンドラインからグー(0)、チョキ(1)、パー(2)のいずれかを入力します。
    1. public class Janken11 {
    2. public static void main(String[] args) {
    3. int user = Integer.parseInt(args[0]); // コマンドラインからの引数をint型に変換します。
    4. int computer = (int)(Math.random() * 3); // コンピューターの手
    5. String[] te = {"ぐー", "ちょき", "ぱー"};
    6. char[][] kekka = {{'分', '勝', '負'} // ぐー
    7. , {'負', '分', '勝'} // ちょき
    8. , {'勝', '負', '分'}}; // ぱー
    9. //コンピューター ぐー ちょき ぱー
    10. System.out.print("あなた: " + te[user] + ", コンピューター: " + te[computer]);
    11. System.out.println(" --> 結果: " + kekka[user][computer]);
    12. }
    13. }

    □ 実行結果

    $ java Janken11 0
    あなた: ぐー, コンピューター: ちょき --> 結果: 勝
    
  2. 3*3の2次元配列を作り、1次元目の添字を十の位、2次元目の添え字を一の位として、それぞれの要素に値を設定するアプリケーション"Array031.java"を作成してください。
    このとき、上記の配列ユーティリティ・クラス"ArrayUtil.java"に、2次元配列を文字化するメソッドtoString(int[][])を作り、それを利用してください。
    1. public class Array031 {
    2. public static void main(String[] args) {
    3. int[][] a = new int[3][3]; // 要素3*3個のint型2次元配列の宣言と生成
    4. for (int i = 0; i < a.length; i++) {
    5. for (int j = 0; j < a[i].length; j++) {
    6. a[i][j] = 10 * i + j;
    7. }
    8. }
    9. System.out.println(ArrayUtil.toString(a));
    10. }
    11. }
    1. // 0711
    2. public class ArrayUtil {
    3. // 配列の文字列化
    4. static String toString(int[] a) {
    5. StringBuffer sb = new StringBuffer("[");
    6. for (int i = 0; i < a.length; i++) {
    7. if (i != a.length -1) {
    8. sb.append(a[i] + ", ");
    9. } else {
    10. sb.append(a[i]);
    11. }
    12. }
    13. sb.append("]");
    14. return sb.toString();
    15. }
    16. static String toString(int[][] a) {
    17. StringBuffer sb = new StringBuffer("[");
    18. for (int i = 0; i < a.length; i++) {
    19. if (i != a.length -1) {
    20. sb.append(toString(a[i]) + ", ");
    21. } else {
    22. sb.append(toString(a[i]));
    23. }
    24. }
    25. sb.append("]");
    26. return sb.toString();
    27. }
    28. // ソート
    29. static int[] sort(int[] a) {
    30. for (int i = 0; i < a.length - 1; i++) {
    31. for (int j = i + 1; j < a.length; j++) {
    32. if (a[i] > a[j]) {
    33. int t = a[i];
    34. a[i] = a[j];
    35. a[j] = t;
    36. }
    37. }
    38. }
    39. return a;
    40. }
    41. // 乱数設定
    42. static int[] getRandomElement(int[] a) {
    43. for (int i = 0; i < a.length; i++) {
    44. a[i] = (int)(Math.random() * a.length);
    45. }
    46. return a;
    47. }
    48. }

    □ 実行結果

    $java Array031
    [[0, 1, 2], [10, 11, 12], [20, 21, 22]]
    
Top
■実習
  1. 九九の結果を2次元配列に設定して、その配列を表示するアプリケーション"kuku11.java"を作成してください。
    1. public class Kuku11 {
    2. public static void main(String[] args) {
    3. int[][] a = new int[9][9];
    4. // コードを記述してください。
    5. }
    6. }

    □ 実行結果

    $java Kuku11
    1 2 3 4 5 6 7 8 9
    2 4 6 8 10 12 14 16 18
    3 6 9 12 15 18 21 24 27
    4 8 12 16 20 24 28 32 36
    5 10 15 20 25 30 35 40 45
    6 12 18 24 30 36 42 48 54
    7 14 21 28 35 42 49 56 63
    8 16 24 32 40 48 56 64 72
    9 18 27 36 45 54 63 72 81
    
  2. 上記アプリケーション"kuku11.java"に対して、ArrayUtil#toString(int[])メソッドを利用するように改良してください。("Kuku12.java")
    1. public class Kuku12 {
    2. public static void main(String[] args) {
    3. int[][] a = new int[9][9];
    4. // コードを記述してください。
    5. }
    6. }

    □ 実行結果

    $java Kuku12
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    [2, 4, 6, 8, 10, 12, 14, 16, 18]
    [3, 6, 9, 12, 15, 18, 21, 24, 27]
    [4, 8, 12, 16, 20, 24, 28, 32, 36]
    [5, 10, 15, 20, 25, 30, 35, 40, 45]
    [6, 12, 18, 24, 30, 36, 42, 48, 54]
    [7, 14, 21, 28, 35, 42, 49, 56, 63]
    [8, 16, 24, 32, 40, 48, 56, 64, 72]
    [9, 18, 27, 36, 45, 54, 63, 72, 81]
    
Top
■実習
  1. 2 次元配列を使ってじゃんけんゲームをするアプリケーション"Janken11.java"を、コマンドラインから実行結果のように複数の手(グー(0)、チョキ(1)、パー(2))を入れて、その結果を表示するアプリケーション"Janken12.java"としてください。
    1. public class Janken12 {
    2. public static void main(String[] args) {
    3. String[] te = {"ぐー", "ちょき", "ぱー"};
    4. char[][] kekka = {{'分', '勝', '負'} // ぐー
    5. , {'負', '分', '勝'} // ちょき
    6. , {'勝', '負', '分'}}; // ぱー
    7. //コンピューター ぐー ちょき ぱー
    8. int win = 0;
    9. int lose = 0;
    10. int draw = 0;
    11. for (int i = 0; i < args.length; i++) {
    12. // ここにコードを記述してください。
    13. }
    14. System.out.println(win + " 勝 " + lose + " 負 " + draw + " 分 ");
    15. }
    16. }

    □ 実行結果

    $ java Janken12 0 1 2 0 1 2
    あなた: ぐー, コンピューター: ぐー --> 結果: 分
    あなた: ちょき, コンピューター: ぱー --> 結果: 勝
    あなた: ぱー, コンピューター: ぱー --> 結果: 分
    あなた: ぐー, コンピューター: ちょき --> 結果: 勝
    あなた: ちょき, コンピューター: ぐー --> 結果: 負
    あなた: ぱー, コンピューター: ぐー --> 結果: 勝
    3 勝 1 負 2 分
    
  2. コマンドラインから入力した3つの数字(同じ数字でも可)が、アプリケーション内で設定されている3つの数字といくつあっているかどうかを判定するアプリケーション"Match03.java"を作成してください。このとき、合っている数によって、つぎのようにメッセージを変えてください。
  3. また、ソース中で使用している"ArrayUtil.java"クラスのsort()メソッドは、前の実習問題で組み込んでいます。
    1. public class Match03 {
    2. public static void main(String[] args) {
    3. int[] a = {(int)(Math.random() * 10), (int)(Math.random() * 10), (int)(Math.random() * 10)};
    4. int[] n = {Integer.parseInt(args[0]), Integer.parseInt(args[1]), Integer.parseInt(args[2])};
    5. int s = 0;
    6. System.out.println("コンピューターの数字 = " + ArrayUtil.toString(ArrayUtil.sort(a)));
    7. System.out.println(" あなたの数字 = " + ArrayUtil.toString(ArrayUtil.sort(n)));
    8. // ここにコードを記述してください。
    9. switch (s) {
    10. case 0:
    11. System.out.println("まったく違います。");
    12. break;
    13. case 1:
    14. System.out.println("やっと合いましたね。");
    15. break;
    16. case 2:
    17. System.out.println("もう少しです。");
    18. break;
    19. default:
    20. System.out.println("おめでとうございます。");
    21. break;
    22. }
    23. }
    24. }

    □ 実行結果

    $ java Match03 2 4 4
    コンピューターの数字 = [4, 5, 7]
            あなたの数字 = [2, 4, 4]
    やっと合いましたね。
    
    $ java Match03 2 4 4
    コンピューターの数字 = [1, 1, 7]
            あなたの数字 = [2, 4, 4]
    まったく違います。
    
  4. 乱数を利用して、模擬的に囲碁の結果をプリントするアプリケーション"Igo01.java"を作成してください。なお、乱数の計算には、java.lang.MathクラスのMath#random()メソッドを利用することができます。
    このとき、char型の2次元配列を下記の実行結果のようにプリントするメソッドArrayUtil#printArray(char[][])を"ArrayUtil.java"クラスに作り、それを利用してください。
    1. public class Igo01 {
    2. public static void main(String[] args) {
    3. int n = 19;
    4. char[][] ban = new char[n][n];
    5. char[] ishi = {'\u3000'/*日本語の空白文字*/, '●', '○'};
    6. // コードを記述してください。
    7. ArrayUtil.printArray(ban);
    8. }
    9. }
    1. // 0712
    2. public class ArrayUtil {
    3. :
    4. static void printArray(char[][] a) {
    5. // コードを記述してください。
    6. }
    7. }

    □ 実行結果

    $java Igo01
         ● ◯ ●   ◯     ● ●   ◯ ●   ● ●   ●
     ● ◯ ● ◯ ◯ ● ◯   ● ◯     ●       ●   ●
       ◯ ● ●   ◯ ● ●   ◯ ◯     ◯   ◯ ◯    
       ◯ ◯ ● ◯ ◯ ◯ ● ◯ ●   ◯ ◯ ◯ ◯ ◯ ◯ ●  
     ◯     ● ◯   ◯ ● ● ◯ ●   ◯ ◯   ●   ●  
     ● ● ◯ ● ◯ ◯ ●     ● ● ◯ ◯ ◯   ● ◯ ●  
       ◯ ● ● ◯     ◯ ●   ◯   ◯     ● ●   ◯
     ◯ ◯ ◯     ◯ ●   ●   ● ◯     ● ◯   ● ●
       ● ◯ ● ●   ●   ●   ◯ ◯     ● ◯ ●   ◯
         ◯ ●       ◯ ◯   ◯ ◯ ● ◯   ◯ ◯ ● ●
       ● ● ◯ ● ●   ◯         ◯ ●     ◯   ◯
     ● ● ● ● ◯ ◯ ◯ ● ●   ● ◯ ● ◯ ●   ◯ ●  
       ◯ ● ◯   ◯ ● ◯ ◯ ◯ ◯ ●           ●  
           ◯ ● ◯   ●     ● ◯   ◯   ● ●    
     ● ● ● ● ● ◯ ◯ ● ●         ◯ ◯     ◯ ●
     ◯ ● ◯ ●   ◯ ◯ ◯ ◯ ◯ ◯   ◯ ● ● ◯   ● ●
           ●   ● ◯ ●   ● ◯   ◯   ◯ ●   ◯  
     ◯ ● ● ● ◯     ◯ ● ● ◯       ● ●   ●  
     ◯   ●   ◯ ◯     ●   ●   ●   ● ◯ ●   ●
    
  5. コマンドラインから平文(文字列)を指定し、それの暗号文をプリントするアプリケーション"Encoding03.java"を作成してください。ここで、暗号化はcharの下位2ビットをビット反転することで実現します。
    1. public class Encoding03 {
    2. public static void main(String[] args) {
    3. char[] a = args[0].toCharArray();
    4. int key = 0x3;
    5. // ここにコードを記述してください。
    6. System.out.println("'" + args[0] + "' encode to: '" + e + "'");
    7. }
    8. }

    □ 実行結果

    $ java Encoding03 "Hello World"
    'Hello World' encode to: 'Kfool#Tlqog'
    
  6. コマンドラインから逆ポーランド記法の式を指定し、その演算結果をプリントするアプリケーション"ReversePolishNotation.java"を作成してください。
    1. public class ReversePolishNotation {
    2. int[] stack = new int[2];
    3. int sp;
    4. int calc(String str) {
    5. int d1, d2;
    6. String s;
    7. sp = 0;
    8. for (int i = 0; i < str.length(); i++) {
    9. switch (str.charAt(i)) {
    10. case '+':
    11. d1 = pop();
    12. d2 = pop();
    13. push(d2 + d1);
    14. break;
    15. // ここにコードを記述してください。
    16. default:
    17. push(Integer.parseInt(str.substring(i, i+1)));
    18. }
    19. }
    20. return pop();
    21. }
    22. void push(int d) {
    23. stack[sp++] = d;
    24. }
    25. int pop() {
    26. return stack[--sp];
    27. }
    28. public static void main(String[] args) {
    29. System.out.println("計算式 = " + args[0]);
    30. ReversePolishNotation rpn = new ReversePolishNotation();
    31. System.out.println("結果 = " + rpn.calc(args[0]));
    32. }
    33. }

    □ 実行結果

    $ java ReversePolishNotation 98+7%6*5/4-
    計算式 = 98+7%6*5/4-  <-- この式は、((((9+8)%7)*6)/5)-4 を意味します。
    結果 = -1
    
  7. エラトステネスのふるいを利用して、コマンドラインから指定された数までの素数をすべてプリントするアプリケーション"Eratosthenes.java"を作ってください。
    1. public class Eratosthenes {
    2. public static void main(String[] args) {
    3. int n = Integer.parseInt(args[0]);
    4. boolean[] prime = new boolean[n];
    5. for (int i = 0; i < n; i++) {
    6. prime[i] = true;
    7. }
    8. // ここにコードを記述してください。
    9. for (int i = 2; i < n; i++) {
    10. if (prime[i]) {
    11. System.out.print(" " + i);
    12. }
    13. }
    14. System.out.println();
    15. }
    16. }

    □ 実行結果

    $ java Eratosthenes 100
     2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
    
  8. コマンドラインから指定された5桁の数に対してチェック・ディジットをつける、または、6桁の数に対しては、正しい数かどうかを判定するアプリケーション"CheckDigit01.java"を作ってください。
    1. public class CheckDigit01 {
    2. final static int[] weight = {19, 17, 13, 11, 7, 1};
    3. final static int n = weight.length;
    4. public static void main(String[] args) {
    5. int[] digit = new int[n];
    6. int len = args[0].length();
    7. if (len != n - 1 && len != n) {
    8. System.out.println("5桁または6桁の数字を指定してください。");
    9. System.exit(1);
    10. }
    11. for (int i = 0; i < Math.min(n, len); i++) {
    12. digit[i] = Integer.parseInt(args[0].substring(i, i+1));
    13. }
    14. if (len == n - 1) {
    15. System.out.println("チェック・ディジットつきの数は "
      + setCheckDigit(digit) + " です。");
    16. } else if (isValidDigit(digit)) {
    17. System.out.println(args[0] + "は正しい数です。");
    18. } else {
    19. System.out.println(args[0] + "は正しくありません。");
    20. }
    21. }
    22. static String setCheckDigit(int[] d) {
    23. // ここにコードを記述してください。
    24. return sb.toString();
    25. }
    26. static boolean isValidDigit(int[] d) {
    27. // ここにコードを記述してください。
    28. return((s % 10) == 0);
    29. }
    30. }

    □ 実行結果

    $ java CheckDigit01 01234
    チェック・ディジットつきの数は 012346 です。
    
    $ java CheckDigit01 012346
    012346は正しい数です。
    
    $ java CheckDigit01 012345
    012345は正しくありません。
    
Top

■配列を使ったアルゴリズム

Top

■配列使用時にスローされる例外

Top

inserted by FC2 system