Random random = new Random();
int numDigits;
int[] secretNumber = new int[numDigits];
public int[] convertNumToDigitArray(String number){
int[] numToDigitArray = new int[numDigits];
for (int i = 0; i<number.length(); i++){
numToDigitArray[i] = number.charAt(i);
}
return numToDigitArray;
}
public int getNumDigits(){
return numDigits;
}
public int[] getSecretNumber(){
return secretNumber;
}
public void setNumDigits(int numDigits){
this.numDigits=numDigits;
}
public void generateNewSecret(){
int number = random.nextInt(((int)Math.pow(10, numDigits) - ((int)Math.pow(10, numDigits-1)))) + ((int)Math.pow(10, numDigits-1));
int temporary = numDigits;
for (int i = 0; i < numDigits; i++){
secretNumber[i] = (int)(number/(Math.pow(10, temporary--))); //here's where the exception is thrown!
if (number < 10)
break;
number = number%((int)(Math.pow(10, temporary--)));
temporary--;
}
}
大家好,我遇到了问题,需要一些帮助。我编写了(并且正在调试)一个生成数字的程序,将该数字放入数组中,然后将用户猜测与该数字进行比较。我坚持的观点是当计算机生成数字时,我所放入的数组会引发索引超出范围的异常。这必然意味着(据我所知)该指数低于零。但是当我单独运行程序并检查索引时,它从0开始。所讨论的方法独立运行并生成数组而不抛出异常,但是当从“母程序”调用它时,抛出异常。它指向代码中的行,这里的数组被填充在一个循环中。
任何帮助都会受到超级赞赏:)
答案 0 :(得分:2)
您需要确保numDigits
始终等于secretNumber
数组中的元素数量:
public void setNumDigits(int numDigits){
this.numDigits=numDigits;
// Add this line
secretNumber = new int[numDigits];
}
目前,您可以将numDigits
设置为高于数组大小的值。这可能导致for
限制secretDigits
numDigits
循环中的错误。