我最近得到了一台新的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!
答案 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++;
}