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

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

任何帮助将不胜感激:)

最佳答案

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

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

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

关于java - 在另一个类中运行时,ArrayIndexOutOfBounds 存在,但不是预期的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15800430/

相关文章:

java - 如何修复“无法创建 protected 最终 java.lang.Class java.lang.ClassLoader.defineClass?

java - 连接到 PHP 的 RESTful Java 应用程序

java - 自定义@Column JPA 注释,如何?

java - 哪种访问 berkeley db 的方法更好

java - 在nifi执行脚本处理器中使用groovy内部的GeorgianCalendar

java - 记事本到HashMap-Java

Java逻辑困惑

java - `finally` 中的断点未被击中

java - 平方和计算

java - 验证字符串以查看它是否是整数?