嵌套for循环中的Java out of bounds异常

时间:2013-10-01 00:50:08

标签: java magic-square

这可能很简单,但我遇到了一个超出范围的例外,我不知道如何修复它。

基本上,我正在尝试创建一个整数字段的“表”,以便我可以使用它们来查找整数字段中的所有值是否创建一个幻方。嵌套的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)
        {       
        }
    }
}

3 个答案:

答案 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