Java 使用字符串值获取阶乘

Java 使用字符串值获取阶乘,java,recursion,data-structures,Java,Recursion,Data Structures,我使用递归创建了一个名为“Factorial”的类,它工作得非常好,但这是我只输入整数值的时候。代码如下 import java.util.*; public class Factorial { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int x, i; Scanner keyboard = new Scanne

我使用递归创建了一个名为“Factorial”的类,它工作得非常好,但这是我只输入整数值的时候。代码如下

import java.util.*;

public class Factorial {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int x, i;
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Enter a Factorial");
    x=keyboard.nextInt();
    i = factorial(x);

    System.out.println(i);
}

  public static int factorial(int x)
  {
      int result;

         if(x==1)
           return 1;

         result = factorial(x-1) * x;
         return result;
  }

}
但是现在我想调整代码,这样就不用接受整数值了,我可以输入一个字符串值,比如“4!”、“10!”、“100!”,代码将提取并转换数值,然后将其传递到factorial类中。
我想知道是否有一种快速的方法可以做到这一点。任何帮助都将不胜感激。谢谢:)

有关详细信息,请查看此链接:

在那里,我找到了这个答案:

NumberFormat类将只解析字符串,直到它到达 不可解析字符:

((Number)NumberFormat.getInstance().parse("123e")).intValue()
因此将返回123

以字符串的形式获取输入,并使用该字符串获取输入的整数部分


如果有问题,请告诉我。

您只需使用
Scanner.nextLine()
,删除任何
s,然后将生成的
字符串
解析为
int

x = Integer.parseInt(keyboard.nextLine().replaceAll("!", ""));
而不是

x = keyboard.nextInt();

或者,您可以只编写
keyboard.useDelimiter(“!\124;\\ n”)x=keyboard.nextInt()
行之前添加code>,并保持后一行不变。

。。。它现在不正是你想要的那样工作吗
keyboard.nextInt()
已经可以读取数字直到一个分词(行尾,或者在本例中是一个
!”
字符)。那么您是在谈论类似计算器解析器的东西,因为如果您没有,您所做的应该可以工作,因为如果我输入4,您正在使用
nextInt()
@Jashaszun!,由于输入不匹配,程序将崩溃-字符串条目为.nextLine(),整数值为.nextInt(),您应该知道,如果您有字符串值,您将获得运行时exception@user3ffgfgfgfgfg50064是的,有点像计算器解析器!我有严重的精神障碍,我想不出如何解码it@ProgrammingNewb啊,在阅读了文档之后,我意识到,
Scanner
通过空格将流分割成标记。所以你是对的,它不会工作。伙计,这很好,我输入了那一行,然后我必须导入java.text.*,然后我添加了公共静态void main(String[]args)抛出ParseException,它运行得很好,谢谢你的输入:)