0
public static void main(String[] args) {


        int [] array= {4,5,7,1,5,4};
        for(int j=0;j<array.length;j++) {
            int min;
            min=array[0];
            if(array[j]>min) {
                min=array[j];
            }
        }
        System.out.print(min);
    }
}

你能帮我为什么找不到 min 吗?

4

8 回答 8

4

您正在尝试min从与声明它的位置不同的范围进行访问。

您在for-loop 中声明它:

for(int j=0; j < array.length; j++) {
    int min;
    min=array[0];
    if(array[j]>min) {
        min=array[j];
    }
} // min can't be used after this.

但是,您在循环之外使用它。int min仅在for循环块的范围内有效(}关闭循环的结束min可访问的块)。

min声明移到循环之外,它应该可以工作。

int min = array[0];
for (int i : array) {
    if (i > min) {
        min = i;
    }
}

System.out.println("The min is: " + min);

我使用Java 的for-each 循环使您的代码在语法上更加甜美。


另外,您的代码中是否存在逻辑错误?您调用该变量min,但您分配的数字大于min最小值。听起来您正在寻找最大值,而不是最小值?

于 2013-07-26T19:19:44.313 回答
2

您需要min在循环之外声明(因为范围):

int [] array= {4,5,7,1,5,4};
int min = array[0];// initialize min outside the loop.
for(int j=0;j<array.length;j++) {
    //min=array[0]; If you leave this here, you will 'reset' min each time
    if(array[j] < min) { // use "<" so that min will be the minimum
        min=array[j];
    }
}
System.out.print(min);

另外,你不应该min=array[0];在你的循环中;这将导致在每次循环迭代时min“重置”回。array[0]相反,在循环之外对其进行初始化。最后,看起来您的代码将设置minarray. 要解决此问题,请反转 if 语句中的比较。

于 2013-07-26T19:17:15.080 回答
1

Min 是在 for 循环中声明的。如果您将声明移到外面,它应该可以正常工作。

例如:

public static void main(String[] args) {
        int [] array= {4,5,7,1,5,4};
        int min=array[0];
        for(int j=0;j<array.length;j++) {
            if(array[j]>min) {
                min=array[j];
            }
        }
        System.out.print(min);
    }
}
于 2013-07-26T19:16:43.203 回答
1

Min 是 for 循环的局部变量

    int [] array= {4,5,7,1,5,4};
    int min = array[0];
    for(int j=0;j<array.length;j++) {
        if(array[j]>min) {
            min=array[j];
        }
    }
    System.out.print(min);
于 2013-07-26T19:17:19.630 回答
0

min在 for 循环中声明。

删除int min;并将以下内容放在 for 循环之外:

 int min=0;

由于它是一个局部变量,因此必须对其进行初始化。

也移到min=array[0];for 循环之外。

于 2013-07-26T19:16:50.407 回答
0

因为 min 变量的范围在 for 块内部。

于 2013-07-26T19:16:55.717 回答
0

不应该if(array[j]<min) min=array[j];吗?

于 2013-07-26T19:18:45.573 回答
0

只是min移出 for 循环并没有帮助。min每次都会覆盖。也移出min=array[0];for 循环。

于 2013-07-26T19:18:55.743 回答