如何解决Java越界编码错误?

如何解决Java越界编码错误?,java,arrays,indexoutofboundsexception,bluej,Java,Arrays,Indexoutofboundsexception,Bluej,我正在尝试使用Java在BlueJ上创建一个Times Tables测验,每次我尝试运行这段代码时,它都会告诉我有一个越界异常,并突出显示带星号的代码行 public void getQuestion() { boolean newQuestion; Random randomGenerator = new Random(); int randomInt = 0; for (int j=1; j<=12; j++) { newQue

我正在尝试使用Java在BlueJ上创建一个Times Tables测验,每次我尝试运行这段代码时,它都会告诉我有一个越界异常,并突出显示带星号的代码行

public void getQuestion()
{
    boolean newQuestion;

    Random randomGenerator = new Random();
    int randomInt = 0;
    for (int j=1; j<=12; j++)
    {
        newQuestion=false;
        int i=0;
        while (newQuestion==false)
        {
            randomInt = randomGenerator.nextInt(12);
            randomInt = randomInt + 1;
            while ((chosenArray [i]!=randomInt) && (chosenArray[i]!= randomInt))
            {
                i=i+1;
                ***if (chosenArray[i]==0)***
                {
                    newQuestion = true;
                    chosenArray[i]=randomInt;

                }

            }

        }

    }
    System.out.print(timesTableChosen + " x " + randomInt + " = "); 
}
public void getQuestion()
{
布尔新问题;
Random randomGenerator=新的Random();
int-randomInt=0;

对于(int j=1;j而言,根本原因是增加
i
时索引过度,请使用模运算符
%

i=(i+1) % 12;

顺便说一句,我会使用
chosenArray.length
,而不是像
12
这样的神奇数字。

显示异常跟踪
(chosenArray[I]!=randomInt)&(chosenArray[I]!=randomInt)
为什么要检查两次?这可能会导致一个无限循环。但它解决了当前的问题。@Tom是的,这段代码有很多问题,但我并不自愿修复所有问题(也没有人问过)@Tom关于无限循环:如果
chosenArray.length
至少为12,则它不是无限循环。@GaborSch它与长度无关。OP有
索引自动边界异常
,因为
(chosenArray[i]!=randomInt)
保持正确,如果他按照您的建议更改代码,他将反复检查所有12个值。他应该确保他的
chosenArray
数组中的值仅在1到12(包括)之间。