这是我的代码,其中我声明了一个包含所有值的二维数组,并且我试图让它打印最小值和最大值。最大值向右,但最小值不对。当我运行它时,最大值是9.73(这是正确的),并且最小打印是5.44,这是不正确的,因为如果你查看数组中的值,你会看到5.29是最小值。有谁知道为什么它不能找到正确的最小值?提前谢谢!
public class Test {
public static double[][] array1 = //array to be used
{{7.51, 9.57, 6.28, 5.29, 8.7},
{8.07, 6.54, 5.44, 8.78, 8.66},
{9.34, 9.73, 7.19, 6.87, 6.48}};
public static void main(String[] args) {
double h = array1[0][0];// highest value
double l = array1[0][0];// lowest value
for (int row = 1; row < array1.length; row++){ //find highest value
for (int col = 1; col < array1.length; col++){
if (array1[row][col] > h){
h = array1[row][col];
}
}
}
for (int r = 1; r < array1.length; r++){ //find lowest value
for (int c = 1; c < array1.length; c++){
if (array1[r][c] < l){
l = array1[r][c];
}
}
}
System.out.println(h);//print highest
System.out.println(l);//print lowest
}
}
答案 0 :(得分:2)
我想说,你需要知道两件事。
for (int row = 0; row < array1.length; row++){
for (int col = 0; col < array1.length; col++){
for (int r = 0; r < array1.length; r++){
for (int c = 0; c < array1.length; c++){
for (int r = 1; r < array1.length; r++){
for (int c = 1; c < array1.length; c++){
你很清楚外部for循环用于行,而内部for循环用于列。
现在看一下您所使用的值array1.length
,这两个循环使用相同的值。如果您尝试打印此内容array1.length
,那么您将获得3
,因为它是主数组array1
的大小。对于外部for循环,这件事是可以的。
但是内部循环需要工作的次数与每个子数组中的元素一样多(2D数组只是一个数组数组)因此你需要纠正内部for循环的条件,
for (int col = 0; col < array1[row].length; col++){
和
for (int c = 0; c < array1[r].length; c++){
现在,即使你的内部循环正在进行两次迭代,即1,2为array1.length返回3而你的条件c < array1.length;
变为c < 3
,因此它只会考虑值{{1}并跳过9.57, 6.28,
和其他元素。当您更新此条件时,它将考虑所有值。
答案 1 :(得分:1)
你跳过0指数
for (int r = 0; r < array1.length; r++){ //find lowest value
for (int c = 0; c < array1.length; c++){
答案 2 :(得分:1)
如果这不是作业并且允许使用Java8,我建议使用一行代码:
double result = Arrays.stream(array1)
.flatMapToDouble(a -> Arrays.stream(a))
.min()/max()
.getAsDouble();
答案 3 :(得分:1)
你在'array
中滑过零索引class array1{
public static void main(String args[]){
double[][] array1 = {{7.51, 9.57, 6.28, 5.29, 8.7},
{8.07, 6.54, 5.44, 8.78, 8.66},
{9.34, 9.73, 7.19, 6.87, 6.48}};
double l = array1[0][0];// lowest value
for (int r = 0; r < array1.length; r++){ //find lowest value
for (int c = 0; c < array1.length; c++){
if(r!=0 || c!=0){
if (array1[r][c] < l){
l = array1[r][c];
}
}
}
}
System.out.println(l);//print lowest
}
}
答案 4 :(得分:0)
这是因为你在r和c等于1的情况下开始你的forloop。
for (int r = 1; r < array1.length; r++){ //find lowest value
for (int c = 1; c < array1.length; c++){
您正在跳过整个第一个阵列。你需要在0开始它们 - 然后一切都会起作用:
for (int r = 0; r < array1.length; r++){ //find lowest value
for (int c = 0; c < array1.length; c++){
答案 5 :(得分:0)
for (int r = 1; r < array1.length; r++){
Java数组是零索引的,因此完全忽略了第一个数组。从i = 0而不是从1
计数(对于i,阅读&#34;无论你喜欢什么索引变量&#34; - 我只是每个人都用来计算数组... :)