

java初心者です。問題集で見つけた配列を使用し干支を求めようという問題に取り組んでおりますが、現在下記のソースコードだと結果がnullになってしまいます。西暦を入力し12で割った余りが4なら子年、5なら丑年としたいため、追加点教えて頂きたく質問させて頂きました。

[code]

    package practice;
    
    import java.util.Scanner;
    
    public class Practice {
    
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            int year = scan.nextInt();
    
            String[] array = new String [12];
            System.out.println(array[year % 12]);
    
            array[0] = "申年です。";
            array[1] = "酉年です。";
            array[2] = "戌年です。";
            array[3] = "亥年です。";
            array[4] = "子年です。";
            array[5] = "丑年です。";
            array[6] = "寅年です。";
            array[7] = "卯年です。";
            array[8] = "辰年です。";
            array[9] = "巳年です。";
            array[10] = "午年です。";
            array[11] = "未年です。";
    
            for(int i=0; i<array.length; i++){
    
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2018-04-08T03:32:27.903
43051
2018-04-09T06:12:45.310
2018-04-09T06:05:02.163
3054
25295
question
java
Javaの配列を宣言して要素にアクセスするとnullになってしまう


`array`が初期化されていないのが原因です。  
配列変数`array`に値を代入した後に、

[code]

    System.out.println(array[year % 12])
    
[/code]

で期待する動作(`null`以外の内容が出力されるようになる)になると思います。

＃入力した「年」に対する正しい干支を出力するためのコードは省略します。


CC BY-SA 3.0
2018-04-08T04:45:13.630
43053
2018-04-08T04:45:13.630
20098
43051
answer


下記のように順番変えていただければ問題ないはずです

[code]

    public class Practice {
      public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int year = scan.nextInt();
        String[] array = new String[12];
        array[0] = "申年です。";
        array[1] = "酉年です。";
        array[2] = "戌年です。";
        array[3] = "亥年です。";
        array[4] = "子年です。";
        array[5] = "丑年です。";
        array[6] = "寅年です。";
        array[7] = "卯年です。";
        array[8] = "辰年です。";
        array[9] = "巳年です。";
        array[10] = "午年です。";
        array[11] = "未年です。";
        System.out.println(array[year % 12]);
      }
    }
    
[/code]

また、下記のようにしていけばもっとわかりやすいと思います、数字以外のやつが指定されても、例外になれません。

[code]

    public class Practice {
      public static void main(String[] args) {
    
        final String[] array = new String[] {"申", "酉", "戌", "亥", "子", "丑", "寅", "卯", "辰", "巳", "午", "未"};
    
        while (true) {
          Scanner scan = new Scanner(System.in);
          if (scan.hasNextInt()) { // このスキャナの次のトークンが有効なint値である場合にのみ、true
            int year = scan.nextInt(); // 上記の判断制御がない場合、数字以外の文字が指定されたら、ここで例外が出ます
    
            System.out.println(array[year % 12] + "年です。"); // 共通の部分を配列に入れる必要はないですね
          } else {
            continue; // 有効なint値でない場合そのままcontinue
          }
        }
      }
    }
    
[/code]

上記のコードをeclipse上で実行する場合、コンソールタブの赤いボタン押下すれば終了できます。  
コマンド操作の場合は、`Ctrl + C`で中止できます。


CC BY-SA 3.0
2018-04-09T05:08:27.410
43085
2018-04-09T06:12:45.310
2018-04-09T06:12:45.310
27732
27732
43051
answer