为什么此for循环在Java中不起作用?

时间:2019-05-29 02:50:22

标签: java loops

我有这个练习代码来计算未来的小时数:

public static void main(String[]   args) {
Scanner scanner = new Scanner (System.in);
String amPm;
System.out.println("Write an hour (lower o equal to 12) ");
int startHour = scanner.nextInt();
System.out.println("write the number of hours to sum ");
scanner.nextLine();
int hoursToSum = scanner.nextInt();

System.out.println("am or pm? (1/0)");
int selection = scanner.nextInt();

if (selection == 1) {
amPm = ".am";
}
else {
amPm = ".pm";
}

for(int i = 0; i == hoursToSum; i++) {
startHour ++;
if (startHour > 12) {
startHour = 1;
if (amPm.equals(".am")) {
amPm = ".pm";
}
else {
amPm = ".am";
}
}
}
System.out.println("it´s gonna be: " + startHour + amPm);
}

但是它不起作用,除了startHour值为12以及hourToSum值为0之外。

我尝试了while循环,并且成功了!

我知道for和while循环都能够执行相同的任务。 那么,为什么会这样呢?

 int i = 0;
while(i < hoursToSum) {
startHour ++;
if (startHour > 12) {
startHour = 1;
if (amPm.equals(".am")) {
amPm = ".pm";
}
else {
amPm = ".am";
}
}
i ++;

}

1 个答案:

答案 0 :(得分:2)

要详细说明Amadan的评论,for循环包括三个部分:  1.使用变量声明进行初始化  2.条件  3.循环结束时的迭代或状态更改

这些事情也会在while循环中发生,但是放置的位置不同

for (int i = 0; i < 12; i++) {  //(initialization;condition;iteration)
    doStuff();
}

这会将i初始化为0,每次块中的代码完成时将其递增,如果i超过12,则退出循环。

int i = 0;       // initialization
while (i < 12) { //condition
    doStuff();
    i++;         //iteration
}

错误发生在for循环的条件部分中,您正在检查i == hoursToSum而不是i