小编典典

While循环仅执行一次

java

我很难弄清楚为什么while循环实际上不会循环。它运行一次并停止。

import java.util.*;

public class mileskm {
    public static void main(String[] args) {

        Scanner inp = new Scanner(System.in);
        boolean continue1 = true;

        while (continue1 == true) {

            System.out.println("Would you like to convert m-km or km-m(km for m-km and m for km-m)");

            String convert = inp.nextLine();
            if (convert.equalsIgnoreCase("km")) {
                System.out.println("Enter the mileage to be converted.");
                double num = inp.nextDouble();
                double con = num * 1.60934;
                System.out.println(con);
                continue1 = true;
            } else if (convert.equalsIgnoreCase("m")) {
                System.out.println("Enter the km to be converted.");
                double num = inp.nextDouble();
                double con = num * 0.621371;
                System.out.println(con);
                continue1 = true;
            } else {
                continue1 = false;
            }

        }
    }
}

我正在尝试使其循环,以便用户能够多次转换单位。任何帮助都欢迎!


阅读 1122

收藏
2020-11-30

共1个答案

小编典典

问题在于,当您呼叫时nextDouble(),它会占用该号码,但不会占用该号码之后的换行符。要解决此问题,只需inp.nextLine();在调用后放一行代码nextDouble()


示例和完整说明:

假设您输入“ km”,按回车,“ 123”,按回车。从程序的角度来看,输入流为"km\n123\n"

该代码String convert = inp.nextLine();获取值"km",并且使输入超出第一个"\n"

代码double num = inp.nextDouble();获取字符串"123"并返回值(double)123.0。看到时,它将停止解析'\n',但不占用字符-
保留在输入缓冲区中。

在循环的下一次迭代,inp.nextLine();看到"\n"立即的,所以String convert = "";。这会触发else循环中的情况,因此退出循环。

2020-11-30