以下是使用堆疊反轉單詞的程式。堆疊的實作沒有問題。它執行得很好。當按下 ctrl-c 時,它會列印try-catch兩次甚至三次塊的內容。這是什么原因造成的?
import java.util.NoSuchElementException;
import java.util.Scanner;
class WordReversal {
public static void main(String args[]) {
StackIFace sfWord; // interface reference
Stack s = new Stack();
sfWord = s;
Scanner sc = new Scanner(System.in);
System.out.println("Control-C to stop.");
for(;;) {
String senWord = "", revWord = "";
try {
System.out.println("Enter a word: ");
senWord = sc.next();
for(int i=0;i<senWord.length();i )
sfWord.push(senWord.charAt(i));
for(int i=0;i<senWord.length();i )
revWord =sfWord.pop();
System.out.println("Original Word::" senWord "\nReversed Word::" revWord);
} catch(NoSuchElementException NSEe) {
System.out.println("Control-C command accepted.\nQuitting...");
//break;
}
}
}
}
這里要注意的一件事是,如果我輸入break(只需洗掉上面代碼中的兩個正斜杠),問題就解決了,但究竟是什么原因造成的呢?是Scanner造成這種情況還是語言問題?
uj5u.com熱心網友回復:
NoSuchElementException 實際上并不是“攔截 ctrl/C”。因此,可能發生的情況是您正在終止輸入,next() 呼叫由于沒有輸入而引發例外,您列印一條訊息,然后回圈再次執行此操作。
輸入仍然終止,所以 next() 呼叫會拋出例外......
因此,令我驚訝的不是它回圈,而是它在 2 或 3 次后停止回圈。也許其他一些你沒有捕捉到的例外被拋出;很難說不添加處理程式來檢查。
但根本問題是:如果你想讓那個特定的例外退出程式,你需要撰寫退出程式的代碼。實際上,當您在回圈之外撰寫“中斷”時,您就是這樣做的。
uj5u.com熱心網友回復:
您正在使用無限 for 回圈,而不是告訴它何時停止。添加 break 陳述句正在終止 for 回圈。因此,它正在作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/438408.html
上一篇:批處理:迭代.csv檔案列
下一篇:python多處理池中的例外處理
