首先,这是一个硬件分配。在Java中遇到递归因子的问题。我在这里和其他地方找到的所有东西都告诉我,我所做的是正确的。但是我遇到了额外步骤的问题。基本上我需要的是1)用户输入数字2)要计算的因子3)如果用户输入除了字符或字符串(而不是int)之外的任何内容以便出现错误消息4)重复的问题直到用户输入“0”退出。
步骤1和2我已经完成了。我遇到了第3步的问题。如果用户输入除int之外的任何东西,我似乎错过了一个return语句,但我似乎无法弄明白究竟是什么。
到目前为止,这是代码:
import java.util.Scanner;
public class Recursive
{
public static void main(String[] args)
{
int number; // To hold a number
char letter; // To hold a character
//Create a Scanner object for keyboard input
Scanner keyboard = new Scanner(System.in);
//Get a number from the user
System.out.print("Enter an integer to find the factorial: ");
number = keyboard.nextInt();
//Display the factorial
System.out.println(number + "! is " + factorial(number));
}
private static int factorial(int n)
{
if (n == 0)
return 1; // Base Case
else if (n > 0)
return n * factorial(n-1);
else (!(n>0))
return
System.out.println(number + "is invalid");
}
}
答案 0 :(得分:0)
获得用户输入后,在进行阶乘之前,我们必须检查输入是否为数字。我们可以使用模式。检查正则表达式模式以执行此操作。在检查它是否是数字之后,检查它是否为零,如果是,则使用exit(0)退出程序。如果不做阶乘
答案 1 :(得分:0)
:manage, Topic.name
答案 2 :(得分:0)
我的回答是基于你的阶乘函数正常工作的假设。为了完成你的步骤3和4,你需要在循环中输入。在该循环中,将输入作为字符串并将其解析为整数,使用try catch以便在给出非整数作为输入时捕获异常,并且可以提示错误消息。
public static void main(String[] args)
{
Integer number; // To hold a number
String letter; // To hold a character
//Create a Scanner object for keyboard input
Scanner keyboard = new Scanner(System.in);
//Get a number from the user
System.out.print("Enter an integer to find the factorial: ");
while(keyboard.hasNext()){
letter = keyboard.next();
try{
number = Integer.parseInt(letter);
if(number==0){
//Exiting
break;
}
int fact = factorial(number);
//Display the factorial
System.out.println(number + "! is " + fact);
System.out.print("Enter an integer to find the factorial: ");
}
catch(NumberFormatException e){
System.out.println("Invalid input please enter integers only");
}
}
}
此外,您的阶乘功能目前还存在编译问题。您需要修复它以使代码正常运行。
答案 3 :(得分:0)
我使用Java的递归因子的解决方案
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.*;
import java.util.*;
class Main {
public static String factorial(int n,String s){
if(n>0){
BigInteger fact = new BigInteger(s);
fact = fact.multiply(new BigInteger(n + ""));
return factorial(n-1,fact.toString());
}
else{
return s.toString();
}
}
public static void main(String args[] ) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
int n = Integer.parseInt(line);
if(n==0)
System.out.println("Factorial is 0");
else{
String s = factorial(n,"1");
System.out.println("Factorial is " + s);
}
}
}