2DArray Structures算法

时间:2015-02-03 02:55:37

标签: java

我正在尝试输出:

1 2 3 4 5 6 7

8 9 10 11 12 13 14

15 16 17 18 19 20 21

在我的for循环中,我使用r <21但是我在3处得到一个异常,这意味着我将超过行限制。我该如何解决:/

import static java.lang.System.*;

public class ArrayAlgorithms{
    public static void main(String args[]){
        new Environment();
}}


class Environment
{
    private int[][] table;

    Environment()
    {
        populate();
        output();
    }

    public void populate()
    {
        table = new int[3][7];
        for(int r=0;r<21;r++)
        {
            for(int c=0;c<table[0].length;c++)
            table[r][c]= r + c;
        }
    }

    public void output()
    {
        out.println();
        for(int r=0;r<table.length;r++)
        {
            for(int c=0;c<table[0].length;c++)
            out.print(String.format("%2d",table[r][c]) + "  ");
            out.println();
        }
        out.println();
        out.println();
    }
}

3 个答案:

答案 0 :(得分:2)

表的大小是[3] [7]。这意味着r必须介于0和2之间,包括0和2。试试这个

 public void populate()
    {
        table = new int[3][7];
        for(int r=0; r<table.length; r++)
        {
            for(int c=0;c<table[0].length;c++)
            { 
                 table[r][c]= r*7 + c+1;
            }
        }
    }

答案 1 :(得分:1)

问题在于populate方法,

table = new int[3][7];
for(int r = 0; r < 21; r++) {
    for (int c = 0; c < table[0].length; c++) {
       table[r][c] = r + c;
    }
}

如果将第一个数组的长度初始化为3,则无法循环21。这就是为什么你得到java.lang.ArrayIndexOutOfBoundsException: 3,当循环试图将table[3]的值设置为失败时,因为你初始化了3个值(索引0,1,2)。

改为使用

for(int r = 0; r < table.length; r++) {
    for (int c = 0; c < table[0].length; c++) {
       table[r][c] = r + c;
    }
}

就像您在output方法中使用一样。

答案 2 :(得分:0)

调用populate方法时抛出java.lang.ArrayIndexOutOfBoundsException的原因是因为您声明的数组的维度为[3]和[7]。这意味着有3个“行”和7个“列”,但是你的主要for循环超出了“row”维度,因为它试图循环到(但不包括)21的值。

将填充方法中的main for循环修改为for(int r=0;r<3;r++)将纠正运行时问题。

但是,要实现输出,您需要修复设置每个数组对象值的逻辑。请改为尝试:table[r][c]= r*7 + c+1;