如何在Java中计算十进制数的阶乘?

如何在Java中计算十进制数的阶乘?,java,Java,我做了一个函数来计算一个数字的阶乘,但是当我写一个十进制数或一个字符时,“迷你应用程序”就不起作用了。当用户写入字符时,如何计算小数的阶乘并向用户发送错误消息 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // BOTON CALCULAR String valortextfield = jTex

我做了一个函数来计算一个数字的阶乘,但是当我写一个十进制数或一个字符时,“迷你应用程序”就不起作用了。当用户写入字符时,如何计算小数的阶乘并向用户发送错误消息

 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));
    }
}
公共类Metodos{
公共双整数阶乘(整数){
如果((数值<0)| |(数值>50)){
返回biginger.ZERO;
}否则如果(数字==0){
返回BigInteger.1;
}否则{
返回BigInteger.valueOf(numero).multiply(阶乘(numero-1));
}
}

谢谢。

在您的
parseInt()
呼叫周围放置一个
try
/
catch
块,并查找
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”这样的数字,还会捕获其他非数字输入。

使用扫描仪

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

“不起作用”是什么意思?BTW 51!不是0。我的意思是它只适用于整数,如果a引入小数或字符,它会给我一个错误。这是因为小数和其他字符不是整数。你希望发生什么?是的,当然,我想知道如何管理它也与小数。你必须首先确定你想要发生什么,然后你就可以(在我们的帮助下)可以实现这一点。你希望发生什么?“这需要一个基数。”为什么?大多数人不会假设基数为10?我的错。我被Javascript parseInt()搞混了,它也接受八进制和十六进制数字。我将从我的答案中编辑它。