我很难弄清楚为什么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; } } } }
我正在尝试使其循环,以便用户能够多次转换单位。任何帮助都欢迎!
问题在于,当您呼叫时nextDouble(),它会占用该号码,但不会占用该号码之后的换行符。要解决此问题,只需inp.nextLine();在调用后放一行代码nextDouble()。
nextDouble()
inp.nextLine();
示例和完整说明:
假设您输入“ km”,按回车,“ 123”,按回车。从程序的角度来看,输入流为"km\n123\n"。
"km\n123\n"
该代码String convert = inp.nextLine();获取值"km",并且使输入超出第一个"\n"。
String convert = inp.nextLine();
"km"
"\n"
代码double num = inp.nextDouble();获取字符串"123"并返回值(double)123.0。看到时,它将停止解析'\n',但不占用字符- 保留在输入缓冲区中。
double num = inp.nextDouble();
"123"
'\n'
在循环的下一次迭代,inp.nextLine();看到"\n"立即的,所以String convert = "";。这会触发else循环中的情况,因此退出循环。
String convert = "";
else