找不到现有变量的符号

时间:2013-07-26 19:15:39

标签: java

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不能找到?

8 个答案:

答案 0 :(得分:4)

您正试图从与声明声明的范围不同的范围访问min

您在for - 循环中声明它:

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's for-each loop使您的代码在句法上更加甜蜜。


此外,您的代码中是否存在逻辑错误?您调用变量min,但是您要将大于min 的数字指定给min。听起来你正在寻找最大值,而不是最小值?

答案 1 :(得分: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]。相反,在循环外部初始化它。最后,您的代码看起来会将min设置为array中的最大元素。要修复,请在if语句中反转比较。

答案 2 :(得分: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);
    }
}

答案 3 :(得分: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);

答案 4 :(得分:0)

在for循环中声明了

min

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

 int min=0;

因为它是一个局部变量,所以必须进行初始化。

同样将min=array[0];移到for循环之外。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

min移出for循环无济于事。它每次都会覆盖min。同时将min=array[0];移出for循环。