hasNext() 的定義是“如果此掃描器在其輸入中有另一個標記,則回傳 true。此方法可能會在等待輸入掃描時阻塞。掃描器不會前進超過任何輸入。”
當我將standardInput.hasNext()放入 for 回圈時,程式會運行到無窮大。但是如果我把它放在 while 回圈中,它不會運行到無窮大。這兩個程式之間的區別在哪里?為什么其中一個有效而另一個無效?
for回圈:
import java.util.Scanner;
public class Vocabulary {
public static void main(String[] args) {
Scanner standardInput = new Scanner(System.in);
for(int i = 0; standardInput.hasNext(); i ){
System.out.print(i);
}
}
}
while回圈:
import java.util.Scanner;
public class Sum {
public static void main(String[] args) {
Scanner standardInput = new Scanner(System.in);
double sum = 0;
while(standardInput.hasNext()) {
double nextNumber = standardInput.nextDouble();
sum = nextNumber;
}
System.out.println("The Sum is " sum ".");
}
}
我閱讀了定義,但仍然無法理解為什么一個程式有效而另一個程式無效
uj5u.com熱心網友回復:
TLDR:這兩個程式的行為不同,因為它們的代碼不等價。
在 while 回圈中,您通過呼叫 獲得下一個標記standardInput.nextDouble()。這會改變standardInput.hasNext()每次迭代的結果。
另一方面,for 回圈版本永遠不會獲取下一個標記,因此回傳的值hasNext()永遠不會改變。
uj5u.com熱心網友回復:
在for...loop你不是standardInput為了得到它而閱讀,而是在代碼中檢查它;你在while...loop.
要修復它,您應該在回圈內添加掃描儀讀取;
for(int i = 0; standardInput.hasNext(); i ){
String str = standardInput.next(); // add reading
System.out.print(i);
}
uj5u.com熱心網友回復:
這是因為這幾行代碼只檢查是否有要讀取的檔案,并沒有真正讀取檔案,因此,并沒有推進檔案指標。
for(int i = 0; standardInput.hasNext(); i ){
System.out.print(i);
}
雖然這些代碼行實際上使用 Scanner 物件讀取了一個 double 型別。
while(standardInput.hasNext()) {
double nextNumber = standardInput.nextDouble();
sum = nextNumber;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/536580.html
