[英]While loop executes only once
我很難弄清楚為什么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();
放入一行代碼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
情況,因此退出循環。
如果兩個條件之一:
(convert.equalsIgnoreCase("km"))
要么
(convert.equalsIgnoreCase("m"))
...不是true
,請將boolean
continue1
設置為false
,這將在下一次迭代時中斷循環。
另請注意,由於它是布爾值,因此您可以(並且應該)這樣編寫while
語句:
while (continue1) {
// etc.
}
另請注意,在掃描特定類型(例如Scanner.nextDouble
,應嘗試/捕獲Exception
,因為如果輸入為意外類型,這很可能會破壞帶有堆棧跟蹤的代碼。
在您的代碼中,在while循環中初始化掃描器對象時仍然存在一個問題,它將解決打印兩次行的問題。 用這個
import java.util.*;
public class mileskm {
public static void main(String[] args) {
Scanner inp;
boolean continue1 = true;
while (continue1) {
System.out.println("Would you like to convert m-km or km-m(km for m-km and m for km-m)");
inp = new Scanner(System.in);
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 {
break;
}
}
}
}
請檢查這是您在評論中寫的問題的答案
采用
String convert = inp.next();
代替
String convert = inp.nextLine();
由於System.out.println(),nextLine()正在讀取空行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.