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 中,局部变量总是需要在使用之前进行初始化。在这里,你没有初始化totalRunsupperLimit这里只是初始化)。

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 回答