我试图通过使用二维数组来制作1到10的乘法表。当我运行程序时,我得到的每个值都在彼此之下,而不是表格。我得到第一个值为1,所有其他值为0.我也得到了错误 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:11 在summing.main(summing.java:46) 你能给出一些关于算法的提示吗?
public static void main( String[] args)
{
Scanner scan = new Scanner( System.in);
int x,y,z;
int[][] table = new int[11][11];
table[0][0] = 0;
table[0][1] = 1;
table[0][2] = 2;
table[0][3] = 3;
table[0][4] = 4;
table[0][5] = 5;
table[0][6] = 6;
table[0][7] = 7;
table[0][8] = 8;
table[0][9] = 9;;
table[0][10] = 10;
table[1][0] = 1;
table[2][0] = 2;
table[3][0] = 3;
table[4][0] = 4;
table[5][0] = 5;
table[6][0] = 6;
table[7][0] = 7;
table[8][0] = 8;
table[9][0] = 9;
table[10][0] = 10;
System.out.println( "Start of multiplication\n");
for (x = 0; x <= 10; x++)
{
for (y = 0; y <= 10; y++)
{
table[x][y] = table[x][1] * table[y][1];
System.out.println(table[x][y]);//This line has the error.
}
table[x][y] = table[x][1] * table[y][1];
System.out.print(table[x][y]);
}
System.out.println( "\nEnd of multiplication\n" );
}
答案 0 :(得分:1)
您看到一系列行而不是值的原因是您的内部for
循环使用println
,而不是print
。内部循环将使用print
,然后外部循环将使用println
来打破行。
你得到一个越界异常的原因是因为:
for (y = 0; y <= 10; y++)
{
table[x][y] = table[x][1] * table[y][1];
System.out.println(table[x][y]);
}
table[x][y] = table[x][1] * table[y][1]; // <======= Here
在循环之后,y
具有值11
,因此使用它索引到表中将导致越界异常。你根本不需要那条线,也不需要那条线。在内循环之后,你想要的只是:
System.out.println();
...开始新的一行。
Re算法:你实际上不需要一个二维数组(或任何数组)来做到这一点。但是如果你使用它,你不需要用任何东西预先初始化它,因为你有x
和y
。只需将x
和y
的乘积分配给内循环中的相关单元格:
table[x][y] = x * y;
我正在尝试制作1到10的乘法表......
然后你的循环边界是错误的,因为你从 0 到10(含)。相反,你需要0(包括)到10(不包括),并在进行乘法时向x
和y
添加一个:
int[][] table = new int[10][10];
// ...
for (x = 0; x < 10; ++x) {
for (y = 0; y < 10; ++y) {
// ...
table[x][y] = (x + 1) * (y + 1);
}
}
希望这已经足够了,我不想真正为你编写代码,因为你可以通过解决它来了解更多。
答案 1 :(得分:1)
首先,如果不需要从x = 0和y = 0开始循环。 在计算表中的值之后,再次打印所有值 第三个ArrayIndexOutOfBound是因为当y循环完成时,y的值为11,并且在循环结束后你使用了y的那个值。
public static void main( String[] args)
{
Scanner scan = new Scanner( System.in);
int x,y,z;
int[][] table = new int[11][11];
table[0][0] = 1;
table[0][1] = 1;
table[0][2] = 2;
table[0][3] = 3;
table[0][4] = 4;
table[0][5] = 5;
table[0][6] = 6;
table[0][7] = 7;
table[0][8] = 8;
table[0][9] = 9;;
table[0][10] = 10;
table[1][0] = 1;
table[2][0] = 2;
table[3][0] = 3;
table[4][0] = 4;
table[5][0] = 5;
table[6][0] = 6;
table[7][0] = 7;
table[8][0] = 8;
table[9][0] = 9;
table[10][0] = 10;
System.out.println( "Start of multiplication\n");
for (x = 1; x <= 10; x++)
{
for (y = 1; y <= 10; y++)
{
table[x][y] = table[x][0] * table[y][0];
}
}
System.out.println();
for(x=1;x<=10;x++){
for(y=1;y<=10;y++){
System.out.print(table[x][y] + "\t");
}
System.out.println("\n");
}
System.out.println( "\nEnd of multiplication\n" );
}
答案 2 :(得分:0)
如果您无法在代码中收到错误,可以试试这个。但首先尝试使用您的代码作为@ T.J找到解决方案。克劳德说:
public static void main( String[] args)
{
// Scanner scan = new Scanner( System.in);
int x,y;
int[][] table = new int[11][11];
table[0][0] = 0;
table[0][1] = 1;
table[0][2] = 2;
table[0][3] = 3;
table[0][4] = 4;
table[0][5] = 5;
table[0][6] = 6;
table[0][7] = 7;
table[0][8] = 8;
table[0][9] = 9;;
table[0][10] = 10;
table[1][0] = 1;
table[2][0] = 2;
table[3][0] = 3;
table[4][0] = 4;
table[5][0] = 5;
table[6][0] = 6;
table[7][0] = 7;
table[8][0] = 8;
table[9][0] = 9;
table[10][0] = 10;
int[][] output_table = new int[11][11];
System.out.println( "Start of multiplication\n");
for (x = 0; x < 10; x++)
{
System.out.println("Table of: "+table[x][0]);
for (y = 0; y < 10; y++)
{
output_table[x][y] = table[0][x] * table[y][0];
System.out.print(output_table[x][y]+"\t");//This line has the error.
}
output_table[x][y] = table[0][x] * table[y][0];
System.out.println(output_table[x][y]);
}
System.out.println( "\nEnd of multiplication\n" );
}
`
答案 3 :(得分:0)
for(int i = 0;i<11;i++){
table[0][i] = i+1;
table [i] [0] = i+1;
}
比拥有庞大的声明列表
更有效率