1

私は、抽象データ型「ArrayIntLog」を利用する単純なプログラム (TestLuck) に取り組んでいる学生です。ユーザーが決定した量のログを生成し、「compare()」メソッドを使用して、一致が見つかる前にループされたログエントリの数を確認することになっています。次のエラーが表示されます。

TestLuck.java:27: エラー: 変数 totalRuns が初期化されていない可能性があります totalRuns += currentRun; ^

これらの変数を間違って初期化するにはどうすればよいですか? forループ内でそれらを使用しているという事実と関係がありますか?

public class TestLuck{
   public static void main (String [] args){

      Random rand = new Random();
      int n = rand.nextInt(100); // gives a random integer between 0 and 99.
      Scanner kbd = new Scanner(System.in);
      double average = 0;
      int totalRuns, currentRun, upperLimit = 0;

      System.out.println("Enter the upper limit of the random integer range: ");
      ArrayIntLog arr = new ArrayIntLog(kbd.nextInt());
      System.out.println("Enter the number of times to run the test: ");
      int numTests = kbd.nextInt();

      for(int j=0; j<=numTests; j++){
         for(int i=0; i<arr.getLength(); i++){  //loops through ArrayIntLog and loads random values
            n = rand.nextInt(100);
            arr.insert(n);  //insert a new random value into ArrayIntLog
            if(arr.contains(n)){
               currentRun = i+1;
               i = arr.getLength();
            }
         }    
         totalRuns += currentRun; 
         currentRun = 0;          
      } 
   }
}
4

3 に答える 3

6

Java では、ローカル変数は使用前に常に初期化する必要があります。ここでは、初期化していませんtotalRuns(ここでは初期化のみupperLimit)。

int totalRuns, currentRun, upperLimit = 0;

currentRunそれに (そして) 明示的な値を与えます。

int totalRuns = 0, currentRun = 0, upperLimit = 0;

この動作は、JLS のセクション 4.12.5 で指定されています。

ローカル変数 (§14.4、§14.14) は、初期化 (§14.4) または代入 (§15.26) によって、使用する前に明示的に値を指定する必要があります...

于 2013-08-29T18:26:15.337 に答える
1
int totalRun, currentRun, upperLimit = 0;

ローカル変数は、使用する前に初期化する必要があります。

例:

int totalRun=0, currentRun=0, upperLimit = 0;
于 2013-08-29T18:26:11.353 に答える
0

あなたは宣言します

int totalRuns, currentRun, upperLimit = 0;

ただし、初期化しないでくださいtotalRuns。そう

totalRuns += currentRun; 

追加する価値はありません。たとえば、デフォルト値に初期化します0(他の場合も同じ)

int totalRuns = 0;
于 2013-08-29T18:26:09.400 に答える