3 回答

TA貢獻1789條經驗 獲得超10個贊
您沒有在代碼示例中指定userInput
是什么,但從使用情況來看,它看起來是 的實例Scanner
。如果你有一個Scanner
聲明然后調用hasNextDouble()
,你將得到一個符合你的用法的布爾結果——你將其作為語句中的條件if
。
Scanner?userInput?=?new?Scanner(System.in); boolean?b?=?userInput.hasNextDouble();
圖片中缺少的是如何hasNextDouble()
工作的。查看Scanner 的 Javadoc:
如果可以使用 nextDouble() 方法將此掃描器輸入中的下一個標記解釋為雙精度值,則返回 true。掃描儀不會前進超過任何輸入。
為了回答下一個輸入是否是雙精度數的真/假,掃描儀必須等待用戶的輸入才能繼續。
所有這些都是為了說明:您的代碼看起來運行正常。如果您不想等待用戶輸入,則需要編寫代碼來反映這一點。

TA貢獻1786條經驗 獲得超11個贊
我認為你應該反轉代碼的邏輯,假設你正在使用掃描儀,嘗試這樣的事情:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
boolean stopped = false;
int numberAmount = 0;
int invalidAmount = 0;
double max = Integer.MIN_VALUE;
double min = Integer.MAX_VALUE;
double mean = 0;
while (stopped == false) {
Scanner userInput = new Scanner(System.in);
System.out.print("Enter a number (type " + "\"" + "stop" + "\"" + " to stop): ");
if (userInput.hasNextDouble()) {
double currentValue = userInput.nextDouble();
max = Math.max(max, currentValue);
min = Math.min(min, currentValue);
mean = currentValue;
numberAmount++;
} else {
String originalInput = userInput.nextLine();
if (originalInput.equals("stop")) {
stopped = true;
invalidAmount++;
System.out.println(numberAmount + " numbers were entered with " + invalidAmount + " invalid inputs.");
} else {
System.out.println("Not a number...");
invalidAmount++;
}
}
}
System.out.println("The maximum is " + max + ".");
System.out.println("The minimum is " + min + ".");
System.out.println("The mean is " + (mean / numberAmount) + ".");
// userInput.close();
}
}
基本上,您首先檢查輸入類型,然后才從控制臺收集值。按照你現在的方式去做,你總是會要求第二個輸入。
添加回答
舉報