我正在爲後綴表達式計算器使用掃描儀,並遇到輕微問題。當我通過命令行輸入表達式時,表達式不會終止並達到無限循環。使用print語句和jdb,我能夠推斷出我希望的命令都能正常執行並正確評估,但是我無法弄清楚爲什麼掃描程序不會終止(因此將它留在無限的while循環中)。我知道掃描儀必須吃掉輸入信息,而不是僅僅確定它是否被留下,它應該在做什麼(我相信)。當我將我的掃描儀作爲我希望評估的表達式輸入而不是System.in(用於命令行輸入)時,所有事情都會根據需要終止,這就是爲什麼我非常困惑。有沒有人遇到過這個問題?我會在下面發佈一些簡潔的代碼片斷,取自未能終止的主體。Postfix評估器 - 掃描儀問題?
Scanner i = new Scanner(System.in);
System.out.println("Message...");
StackList stack = new StackLinkedList();
while (i.hasNext()) {
if (input.hasNextInt()) {
stack.push(i.nextInt());
continue;
}
String op = input.next());
Integer val_one = stack.pop();
Integer val_two = stack.pop();
switch(op) { a switch statement that evaluates based on the operator};
}
input.close();
System.out.println(stack.pop);
注:我已經檢查過以前的實現,並且我找不到我的不同之處。大多數遇到這些類型問題的人都不會隨意使用輸入,我相信我的代碼應該這樣做。我輸入的表達式如1 2 +'Enter'(答案應該是3,當我將掃描器設置爲字符串1 2 +時,確實出現了3),但是當輸入是通過命令行時,它們不會終止。
我欣賞的反饋;我發現大多數人都是通過單行閱讀來獲得投入,但實際上並沒有意識到這一點至關重要。我會改變,看看會發生什麼。所以這裏是攻擊計劃:我可以使用nextLine命令而不是next和nextInt將輸入讀入字符串中,然後解析字符串?你在說什麼? – Eric 2015-02-10 06:27:09
也,我需要做ctrl-d輸入嗎?我們的任務沒有提到任何關於這個,我覺得她會解釋(但是,我只知道C和Cpp,因爲我跳過這個類的Intro Java,這是一種預先搜索) – Eric 2015-02-10 06:40:11
@Eric Ctrl-D行爲和文件末尾一樣 - 所以'hasNext'返回false - 並且它不是特定於Java的。可能您的任務期望您一次處理一行,或者可能期望您對某個字符串進行硬編碼。如果你不清楚,就問問某人 - 這個問題與作業沒有直接關係,所以並不要求他們爲你做你的工作。 – immibis 2015-02-10 06:44:52