数组越界异常,找不到问题

时间:2014-01-29 21:21:48

标签: java arrays

基本上,我在第19行得到了一个ArrayOutOfBounds异常。我试着只是在没有赋值的情况下(没有指定wile循环)来修改数组的内容但是仍然有同样的错误,任何人都有修复?

package com.company;

import java.util.Random;

public class Main {
    static int[][] Placer = new int[2][2]; //create multi-dimenstional array to hold the numbers

    public static void main(String[] args) {
        Random random = new Random(); //intiallise new Random object
        int intsAssigned = 0; //will keep track of the ammount of ints assigned.



        //Assign all of the index's a random int, not the most practical way.
        while(intsAssigned != 9){
            int currentColumn = 0;
            Placer[currentColumn][0] = random.nextInt(20);
            Placer[currentColumn][1] = random.nextInt(20);
            Placer[currentColumn][2] = random.nextInt(20);
            currentColumn++;
            intsAssigned + 3;

        }
        printNumbers();

    }

    //Print all of the index's
    public static void printNumbers(){
        int numbersPrinted = 0;
        int currentColumn = 0;
        int currentRow = 0;
        while(numbersPrinted != 9){
            System.out.println(Placer[currentColumn][currentRow]);
            System.out.println(Placer[currentColumn][++currentRow]);
            System.out.println(Placer[currentColumn][currentRow + 2]);
            currentColumn++;
        }

    }
}

5 个答案:

答案 0 :(得分:4)

Placer是int[2][2] ...但您正在尝试访问Placer[currentColumn][2]。对于大小为2的数组,您只能访问两个索引:0和1。

也许您希望Placer成为int[3][3]

答案 1 :(得分:3)

在Java索引中基于零,这意味着数组:new int[2][2];将有两行和两列,并且每个列都将被索引为0..1。

一般来说,如果你声明和数组,例如ints:new int[n],你的索引应该从0到n-1(0,..,n-1)。多维数组也是如此。大小为m的每个维度将从0到m-1(0,...,m-1)索引。

答案 2 :(得分:1)

intsAssigned + 3;不会修改变量。你的意思是这样做:

intsAssigned += 3;

此外,此static int[][] Placer = new int[2][2];会为行和列创建长度 2,因此这些的索引位置只会是01

我认为您想将其更改为:

static int[][] Placer = new int[3][3];

此条件:while(numbersPrinted != 9)将始终为真,因为您永远不会增加numbersPrinted

答案 3 :(得分:1)

除了dcsohl / user987339提到的内容之外,您的代码中还有许多其他错误。

你似乎永远不会增加数字印刷,所以虽然不会退出。相反,currentColumn将继续上升,直到它超出范围。只需加入

numbersPrinted += 3;

在第二个循环中增加currentColumn后应该修复。

此外,currentColumn在第一个循环中被初始化为0,因此无论何时使用它都不会是0。你应该移动

int currentColumn = 0;

到第一次之前。

答案 4 :(得分:0)

它没有初始化。

这是一个数组

的例子

int [] x = {1,3}

sum = x [0] + x [1]。