

`variable i might not have been initialized` と表示されるのですがなぜなんでしょう？  
乱数を5個作ろうと思っているのですがなかなかうまくいきません。教えてほしいです。

[code]

    public class Main
    {
        static void getrandom5() {
            System.out.println ("Generating random numbers");
    
            int i;
    
            int nums[] = new int[5];
    
            nums[i] = (int) (Math.random () * (52 + 1));
    
            for (i = 0; i < 5; i++){
                System.out.println("It is " + nums);
            }
        }
    
        public static void main (String[]args) 
        {
            getrandom5 ();
        }
    }
    
[/code]


CC BY-SA 4.0
2019-10-15T16:28:48.830
59727
2019-10-16T07:25:34.703
2019-10-15T17:00:13.400
3060
36217
question
java
variable i might not have been initialized


変数 `i` が宣言はしたけど **初期化されないまま** `nums[i] =` の箇所で参照していてエラーになっていると思われます。

[code]

    int a;        // 変数の宣言
    a = 0;        // 変数の初期化
    int b = 1;    // 変数の宣言と初期化
    
[/code]

参考:  
[Variable might not have been initialized error - Stack
Overflow](https://stackoverflow.com/a/2448857) の回答


CC BY-SA 4.0
2019-10-15T17:08:10.583
59728
2019-10-15T17:08:10.583
2020-06-17T08:14:45.997
-1
3060
59727
answer


エラーの原因は、変数 `i` が初期化されていないのに読み込まれているからです ([@cubick
さんの回答](https://ja.stackoverflow.com/a/59728/19110)と同じことを言っています)。

もう少し分かりやすくするために、プログラムへ1行ずつ、何をしているかコメントをつけてみました：

[code]

    // 文字列を出力
    System.out.println ("Generating random numbers");
    
    // 変数 i を宣言 (この時点では初期化されていません。つまり、変数を読み込んだときの値が定まっていません)
    int i;
    
    // 変数 nums を宣言し、新しく確保した長さ 5 の配列で初期化
    int nums[] = new int[5];
    
    // 配列 nums の i 番目の要素に、乱数を代入 (ここで変数 i の値が定まっていないのに読み込んでいるため、エラーが起きています)
    nums[i] = (int) (Math.random () * (52 + 1));
    
    // i を 0 から 5 まで 1 ずつ増やしながらループ
    for (i = 0; i < 5; i++){
        // 文字列を出力 (ただしここで配列 nums の何番目の要素を気にしているのか書いていないため、想定と異なる動作をするでしょう)
        System.out.println("It is " + nums);
    }
    
[/code]

おそらく、元々なさりたかったのは変数 `i` を順番に増やしながら、配列 `nums`
の要素へ順々に全て乱数を代入する、ということでしょう。であれば、次のように書きます。

[code]

    // 変数 i を宣言し、i を 0 から 5 まで 1 ずつ増やしながらループ
    for (int i = 0; i < 5; i++) {
        // 配列 nums の i 番目の要素に、乱数を代入
        nums[i] = (ここに乱数を生み出すコードを書く)
    }
    
[/code]


CC BY-SA 4.0
2019-10-16T07:25:34.703
59740
2019-10-16T07:25:34.703
19110
59727
answer