我刚刚开始编程Java,但是我是英语新手,请尝试理解我的句子。
我试图在数组内添加第五个数字。 for循环未读取数组内部的数字99。我不希望table.length然后添加一个,我想在数组中添加任意数量的数字,而无需更改for循环。是否有代码来查找一个盒子(第一个数组盒子)中有多少个数字?
int[][] table = { { 12, 0, 0, 0 ,99}, { 0, 0, 0, 0, 99}, { 0, 0, 0, 0, 99} };
int max = Integer.MIN_VALUE;
for (int i = 0; i < table.length; i++) {
for (int k = 0; k <= table.length; k++) {
if (table[i][k] >= max) {
max = table[i][k];
}
}
}
System.out.println(max);
int min = Integer.MAX_VALUE;
for (int i = 0; i < table.length; i++) {
for (int k = 0; k <= table.length; k++) {
if (table[i][k] <= min) {
min = table[i][k];
}
}
}
System.out.println(min);
答案 0 :(得分:6)
您好,欢迎来到Java有趣的世界:-D
问题是您的“内部”数组的长度为5,而外部数组的长度为3。您在两个循环中都重复使用table.length
。对于内循环,请尝试
for (int k = 0; k < table[i].length; k++) { // Iterate across all the inner arrays
if (table[i][k] >= max) {
max = table[i][k];
}
}
您还要对表进行两次迭代,一次是找到最大值,一次是找到最小值。仅使用几个元素,这并不太昂贵,但是请想象您是否有数百万个元素。您可以将两个检查合并在一张表中。您还可以通过为表中的值设置变量来减少代码量。这意味着您只需要访问一次阵列。在节省CPU方面并没有多大用处,但它使代码看起来更容易一些。
int[][] table = { { 12, 0, 0, 0 ,99}, { 0, 0, 0, 0, 99}, { 0, 0, 0, 0, 99} };
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int i = 0; i < table.length; i++) {
for (int k = 0; k < table[i].length; k++) {
int val = table[i][k];
if (val > max) {
max = val;
}
if (val < min) {
min = val;
}
}
}
System.out.println(max);
System.out.println(min);
答案 1 :(得分:2)
Spangen提到的内容绝对正确,只需要稍作修正,您应该使用“ <”而不是“ <=”在“内部”数组中进行迭代,这会破坏数组索引。
for (int k = 0; k < table[i].length; k++) { // Iterate across all the inner array
if (table[i][k] >= max) {
max = table[i][k];
}
}
如果您想尝试一般性地学习数组而不是这样做,那么还有其他更好的方法可以在Java 8中完成,如此处Finding minimum and maximum in Java 2D array
所述。