在另一个类中运行时,ArrayIndexOutOfBounds存在但不是预期的

时间:2013-04-04 00:11:56

标签: java

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开始。所讨论的方法独立运行并生成数组而不抛出异常,但是当从“母程序”调用它时,抛出异常。它指向代码中的行,这里的数组被填充在一个循环中。

任何帮助都会受到超级赞赏:)

1 个答案:

答案 0 :(得分:2)

您需要确保numDigits始终等于secretNumber数组中的元素数量:

public void setNumDigits(int numDigits){
    this.numDigits=numDigits;
    // Add this line
    secretNumber = new int[numDigits];
}

目前,您可以将numDigits设置为高于数组大小的值。这可能导致for限制secretDigits numDigits循环中的错误。