我正在尝试输出:
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();
}
}
答案 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;