簡體   English   中英

Postfix評估程序-掃描儀問題?

[英]Postfix Evaluator— Scanner Issue?

我將掃描儀用於后綴表達式評估器,但遇到了一個小問題。 當我通過命令行輸入表達式時,表達式不會終止並達到無限循環。 使用print語句和jdb,我可以推斷出我想要的所有命令都能正常執行並正確評估,但是,我無法弄清為什么掃描器不會終止(因此,將其置於無限的while循環中)。 我知道掃描儀必須吃掉輸入,而不僅僅是確定它應該被留下(我相信)。 當我輸入掃描儀作為要評估的表達式而不是System.in(用於命令行輸入)時,一切都按期望終止,這就是為什么我很困惑的原因。 有人遇到過這個問題嗎? 我將在下面發布一些簡短的代碼片段,這些片段摘自未能終止的主體。

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);

注意:我已經檢查過以前的實現,但無法弄清楚我的不同之處。 遇到這類問題的大多數人都不會一eating而就,我相信我的代碼應該這樣做。 我正在輸入諸如1 2 +'Enter'的表達式(答案應該為3,並且當我將掃描儀設置為字符串1 2 +時確實為3),但是當通過命令行輸入時,它們不會終止。

從控制台讀取的掃描儀將始終具有更多數據,因為總有可能會鍵入更多數據。

您可以按Ctrl-D Enter鍵 (在Linux上)或Ctrl-Z Enter鍵 (在Windows上)來模擬控制台上的“文件結束”狀態(就像您從文件或字符串中讀取並到達文件末尾一樣) )。

但是,也許您想一次從控制台讀取一行,然后分別解析每一行? (使用帶StringScanner構造函數,該String是您讀取的行)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM