这可能很简单,但我遇到了一个超出范围的例外,我不知道如何修复它。
基本上,我正在尝试创建一个整数字段的“表”,以便我可以使用它们来查找整数字段中的所有值是否创建一个幻方。嵌套的for循环应该创建一个8x8的正方形,它将创建正方形的第一行,但它会给我一个越界错误。
错误发生在嵌套的for循环中,我将IntegerField添加到GUI中。
如果有人可以提供帮助,那就太好了。如果您需要更多详细信息,请与我们联系。
import javax.swing.*;
import BreezySwing.*;
public class Interface extends GBFrame{
//Create integerField array to create input for magic square
public IntegerField[][] magicSquare;
//Create input button, integer field which sets size of square
public IntegerField squareSize;
public JButton inputSize;
//Create check square button
public JButton checkSquare;
//Label to output if there is a magic square
public JLabel squareLabel;
//Size of square variable
public int size;
//CalcSquare object
CalcSquare calc = new CalcSquare();
//Constructor for Square interface
public Interface()
{
squareSize = addIntegerField (0, 1, 1, 1, 1);
inputSize = addButton ("Input Size", 2, 1, 1, 1);
squareLabel = addLabel ("", 3, 1, 1, 1);
checkSquare = addButton ("Check Square", 4, 1, 1, 1);
}
//Creates IntegerFields on the GUI as needed.
public void createFields()
{
for (int i = 0; i <= size; i++)
{
for (int x = 0; x <= size; x++)
{
magicSquare = new IntegerField[i][x];
}
}
}
public void buttonClicked(JButton buttonObj)
{
if (buttonObj == inputSize)
{
size = squareSize.getNumber();
createFields();
for (int i = 0; i <= size; i++)
{
for (int x = 0; x <= size; x++)
{
magicSquare[i][x] = addIntegerField (0, i+1, x+1, 1, 1);
}
}
}
else if (buttonObj == checkSquare)
{
}
}
}
答案 0 :(得分:2)
i <= size
的for循环条件应始终引发红色标记,因为如果i == size,则超出了数组或集合的大小。请注意,数组和集合基于0,从0到大小为-1。
它应该几乎总是i < size
答案 1 :(得分:0)
所有循环都在迭代到大小,这将导致ArrayIndexOutOfBoundException。数组索引从0
开始到size-1
。以下是代码中的一个循环:
for (int i = 0; i <= size; i++)
你需要迭代循环直到大小
for (int i = 0; i < size; i++)
相应地纠正其他循环
答案 2 :(得分:0)
size
永远不会被初始化。您的<=
应该在for循环中<
。
事实上,如果您使用size
作为常量来设置数组的大小,则应在i < size - 1
循环中使用for
。