我必須計算一個數(shù)字的階乘。因為 0 的事實階乘是 1。所以我也將這種情況包含在函數(shù)中。這是代碼:import java.util.*;public class Factorial { static int fact(int n) { int result; if (n == 0 || n == 1) return 1; result = fact(n - 1) * n; return result; } public static void main(String args[]) { int i, fact = 1; Scanner sc = new Scanner(System.in); int n = sc.nextInt(); fact = fact(n); System.out.println(fact); }}但是如果我將輸入設為 0,則會引發(fā)一些異常線程“main”中的異常 java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt( Scanner.java:2117) 在 java.util.Scanner.nextInt(Scanner.java:2076) 在 Factorial.main(Factorial.java:14)如何解決這種情況?編輯:我已經(jīng)更改了異常。對于代碼甚至不是 26 行的事情深表歉意。我在上面發(fā)布了一些代碼作為注釋,然后才在這里發(fā)布代碼。這不是重復的。事實上,我想知道為什么它不接受 0 作為輸入。它適用于所有其他輸入。我使用在線編譯器https://www.tutorialspoint.com/compile_java_online.php與 PC JDK 1.7 的 Java 編譯器一起工作正常,但在在線 IDE 上引發(fā)異常。
2 回答

三國紛爭
TA貢獻1804條經(jīng)驗 獲得超7個贊
在線 IDE 可能正在對數(shù)據(jù)進行某種預處理,這些數(shù)據(jù)對零不太好。
TutorialPoint 擁有適用于多種語言的在線編譯器,并且很可能它們都共享一些共同的后端,該后端具有將文本從瀏覽器傳遞到其服務器的魔力。我不確定后面發(fā)生了什么樣的處理,但我可以想象這就像從數(shù)字左側(cè)修剪不必要的零或類似的東西。
我在標準 C 中使用函數(shù) sscanf 遇到了相反的問題,當輸入字符串為空時,它預期會失敗(返回 0),就像它的姊妹函數(shù) scanf 一樣,但它仍然返回成功并將零存儲在整數(shù)變量中。
順便說一句,如果你只是在零上添加一個前導空格或 \n,一切都很好。
添加回答
舉報
0/150
提交
取消