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

任何帮助将不胜感激:)

4

1 回答 1

2

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

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

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

于 2013-04-04T00:15:04.513 回答