Java二维数组值和循环问题



我刚开始编程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);

大家好,欢迎来到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);

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中学习。在Java 2D数组中查找最小值和最大值

最新更新