2014-04-23 98 views
0

我做了一個函數來計算一個數的階乘,但是當我寫一個十進制數或一個字符時,「小應用程序」不起作用。我如何計算小數的階乘,並在寫入字符時向用戶發起消息錯誤。如何計算Java中十進制數的階乘?

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    // BOTON CALCULAR 

    String valortextfield = jTextField1.getText(); 
    int numero = Integer.parseInt(valortextfield); 
    Metodos metod = new Metodos(); 

    BigInteger resultado = metod.factorial(numero); 
    String valorAmostrar= resultado.toString(); 

    jTextArea1.setText(valorAmostrar); 

    }  

的方法:

public class Metodos { 

    public BigInteger factorial (int numero){ 
    if ((numero < 0)||(numero >50)) { 

     return BigInteger.ZERO; 


    } else if (numero==0){ 

     return BigInteger.ONE; 

    } else { 
     return BigInteger.valueOf(numero).multiply(factorial(numero-1)); 
    } 
} 

感謝。

+0

你所說的 「是行不通的。」 是什麼意思?順便說一句51!是不是0. –

+0

我的意思是它只適用於整數,如果引入小數或字符,它會啓動一個錯誤。 – user3325719

+0

這是因爲小數和其他字符不是整數。你想要發生什麼? –

回答

0

try/catch塊撥打電話parseInt(),並尋找NumberFormatException

String valortextfield = jTextField1.getText(); 
try 
{ 
    int numero = Integer.parseInt(valortextfield); 
    Metodos metod = new Metodos(); 

    BigInteger resultado = metod.factorial(numero); 
    String valorAmostrar= resultado.toString(); 

    jTextArea1.setText(valorAmostrar); 
} 
catch (NumberFormatException e) 
{ 
    // Show an error message here or whatever is appropriate 
} 

這不僅會捕獲像「123.45」這樣的數字,它還會捕獲其他非數字輸入。

+0

「需要一個基數」。爲什麼?大多數人會不會以10爲基數? –

+1

我的不好。我越來越喜歡Javascript parseInt(),它也接受八進制和十六進制數字。我會編輯出我的答案。 –

0

使用掃描儀

java.util.Scanner scanner = new Scanner(System.in); 
while (!scanner.hasNextInt()) 
    scanner.next(); 
System.out.println(scanner.next());