2012-10-31 96 views
-1

我有這段代碼的問題。它是一個計算程序的一部分,它計算你在某些計算器上調用nPr的內容。它編譯沒有錯誤,但每次運行它並設置n = 0我收到一個看似無盡的錯誤消息列表。爲什麼不能打印出「錯誤!」並終止程序像我編程它?這個程序的邏輯有什麼問題?

{ 
    System.out.print("n = "); 
    int n = j.nextInt(); 
    System.out.print("r = "); 
    int r = j.nextInt(); 
    long n_fact = factorial(n); 
    if (((n - r) <= 0) || (n <= 0) || (r < 0)) 
    { 
     System.out.println("Error!"); 
     System.exit(0); 
    } 
    else 
    { 
     long nr_fact = factorial(n - r); 
     long nPr = n_fact/nr_fact; 
     NumberFormat f = NumberFormat.getNumberInstance(); 
     System.out.println("nPr = " + f.format(nPr)); 
    } 
} 
+1

我們可以看到'factorial'的代碼嗎? – arshajii

+0

您是否嘗試在調試器中逐句通過您的代碼,看看爲什麼它永遠不會進行錯誤檢查? – millimoose

回答

2

打電話給factorial(n),然後檢查是否n > 0。移動線

long n_fact = factorial(n); 

else塊內部。

+0

'factorial(0)'*應該*爲1. – arshajii

+0

@ A.R.S。 - 是的,但電話仍然在錯誤的地方。 (如果'n == -1?'會怎麼樣?)如果OP擺脫了「無盡的錯誤消息列表」,那麼他可能會詢問關於修正「factorial」函數的問題。畢竟,'n == 0'是一個可能無法正確處理的邊緣案例。 –

0

移動這一行else塊:

long n_fact = factorial(n); 

,因爲它是越來越觸發even when n=0 or n < 0,因爲你是上面的調用,您不希望以後檢查n > 0我懷疑這個(n < = 0)是否在你的factorial()方法中正確處理。

備選地穿上n檢查和處理在factorial(n)方法即返回1,如果n = 0和錯誤輸出(擲excepion)如果n < 0;