當使用Scanner(System.in)獲取控制檯輸入時,一般都是以這樣的方式,舉一個例子,如
當控制檯輸入不是"-"時,就將其壓入棧中,當輸入爲"-",棧不爲空則彈出。
其中的while(in.hasNext())永遠爲真,最後的語句永遠無法執行。
import java.util.Scanner;
import java.util.Stack;
public class InTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Stack<String> s = new Stack<String>();
while(in.hasNext()){// in.hasNext()永遠爲真
String str = in.nextLine();
if(!str.equals("-"))
s.push(str);
else if(!s.isEmpty())
System.out.println(s.pop() + " ");
}
// 這個語句永遠無法執行
System.out.println("(" + s.size() + "left on stack)");
}
}
怎樣結束控制檯的輸入呢?可以通過判斷in.hasNext()是否爲真,使用hasNext()方法的帶參數的重載方法。
import java.util.Scanner;
import java.util.Stack;
public class InTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Stack<String> s = new Stack<String>();
while(!in.hasNext("eof")){// 通過判斷in.hasNext()的參數
String str = in.nextLine();
if(!str.equals("-"))
s.push(str);
else if(!s.isEmpty())
System.out.println(s.pop() + " ");
}
System.out.println("(" + s.size() + "left on stack)");
}
}
當輸入爲字符串eof時,則停止控制檯的輸入。