3 回答

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

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
我認(rèn)為你應(yīng)該反轉(zhuǎn)代碼的邏輯,假設(shè)你正在使用掃描儀,嘗試這樣的事情:
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();
}
}
基本上,您首先檢查輸入類(lèi)型,然后才從控制臺(tái)收集值。按照你現(xiàn)在的方式去做,你總是會(huì)要求第二個(gè)輸入。

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
我不太了解 API,但我希望 hasNextDouble 讀取另一行。檢查originalInput是否為double,不要讀取另一行。
添加回答
舉報(bào)