2014-04-23 130 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());