Java程序没有终止?

时间:2018-04-13 11:44:36

标签: java eclipse search

我最近得到了一台新的64位Windows笔记本电脑,我需要设置它。在尝试设置Java和工作IDE时,我遇到了以下问题:

我有一个非常简单的测试程序,我尝试在Eclipse Oxygen 3.0中运行(也在IntelliJ中试过,​​但发生了同样的问题):

public class MinSuche {

    public static void main(String[] args) {
        int[] feld = {12, 18, 19, 22, 1, 37, 5};
        int min = feld[0];
        int a = 1;
        while(a<feld.length){
            if(feld[a]<min){
                System.out.println(min);
                min = feld[a];
                a++;
            }
        }
        System.out.println(min);
    }
}

Compliler Compliance Level设置为1.8,我使用的是jdk1.8.0_161(也尝试过Java 9,同样的问题;我的Eclipse显然无法处理Java 10)。现在问题是:

它不会自行终止,并且System.out.println命令的结果不会显示在控制台中。我没有错误,也没有找到任何其他可能错误的提示,但我觉得这与代码没有任何关系。该过程只是持续运行并运行几分钟(如果我允许的话,甚至可能是几小时),直到我手动终止它,整个运行时间都没有显示在控制台上。

之前有人发生过这种情况吗?可能是什么问题呢?或者我在代码中遗漏了什么?请帮助,我需要在我的PC上使用一个可用的Java IDE!

4 个答案:

答案 0 :(得分:3)

这很简单:a++永远不会被执行,因为feld[a](18)不小于min(12)。您需要将此语句移出if语句

答案 1 :(得分:2)

让我们一步一步地看一下发生的事情:

迭代1:

a=1
min=12
feld[a]=18

迭代2:

a=1
min=12
feld[a]=18

迭代3,4,5 ......:

a=1
min=12
feld[a]=18

您需要在a块之外增加if,否则它将无法通过整个数组。

    while(a<feld.length){
        if(feld[a]<min){
            System.out.println(min);
            min = feld[a];
        }
        a++;
    }

使用调试器可以很容易地发现这一点。

答案 2 :(得分:1)

@jhamon和@JeroenSteenbeeke已经指出你需要将a++移出if区块。

我想补充一点,您最好使用for周期而不是while

public static void main(String[] args) {
        int[] feld = {12, 18, 19, 22, 1, 37, 5};
        int min = feld[0];
        int a = 1;
        for (int a = 1; a < feld.length; a++) {
            if(feld[a]<min){
                System.out.println(min);
                min = feld[a];
            }
        }
        System.out.println(min);
    }

这更加惯用,这似乎并不重要。但我的观点是,如果您使用for周期,那么您很可能不会犯下您所犯的错误。 (哦,我的英语,我希望时态超过条件时态在这里有所帮助。)

答案 3 :(得分:1)

只需从if块中删除a ++,然后将其放在if块之后,如下所示。然后你的程序将按预期正常工作。您的JDK或IDE没有任何问题。谢谢!

while(a<feld.length){
        if(feld[a]<min){
            System.out.println(min);
            min = feld[a];
        }
        a++;
    }
相关问题