我是一名学生,正在开发一个利用抽象数据类型"ArrayIntLog"的简单程序(TestLuck)。它应该生成用户确定的日志数量,并使用"compare()"方法检查在找到匹配项之前循环了多少日志条目。我得到这个错误:
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;
}
}
}
在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)…
int totalRun, currentRun, upperLimit = 0;
局部变量在使用之前需要初始化。
示例:
int totalRun=0, currentRun=0, upperLimit = 0;
您声明
int totalRuns, currentRun, upperLimit = 0;
但不初始化CCD_ 4。所以
totalRuns += currentRun;
没有可添加的值。将其初始化为默认值,例如0
(其他值相同)
int totalRuns = 0;