下面的代码允许用户输入值,然后取所有给定值的和,然后通过递归给出和。下面的代码允许用户输入每个int并提供总和
import java.util.Scanner;
public class Recursion {
public static int Recursion1(int userSum)
{
if (userSum == 0) {
return userSum;
} else {
return userSum + Recursion1(userSum - 1);
}
}
public static void main(String[] args)
{
int userSum = 0;
Scanner scan = new Scanner(System.in);
System.out.println("Program Started");
System.out.println(Recursion1(userSum));
int counter = 0;
int i;
for(i=0;i < 5;i++) {
//ask user input
System.out.print("Enter any number: ");
userSum = scan.nextInt();
}
scan.close();
int sumNum=Recursion1(userSum);
System.out.println("The sum of digits is: "+sumNum);
System.out.println("Scanner Closed.");
}
}
对于初学者来说,您的代码有几个问题:
for(i=0;i < 5;i++) {
//ask user input
System.out.print("Enter any number: ");
userSum = scan.nextInt();
}
在上面的代码中,您没有存储用户插入的5个数字,您只存储最后一个数字,因为您一直覆盖变量userSum
。
要存储多个值,最好使用数组或列表。
代码的第二个问题是递归方法:
public static int Recursion1(int userSum)
{
if (userSum == 0) {
return userSum;
} else {
return userSum + Recursion1(userSum - 1);
}
}
当你用int
x调用这个方法时,它会给出从x到0的所有数字的和。
因此,如果你用输入3调用它,它会给你3+2+1+0=6
您想要的是使用递归函数对用户输入的所有数字求和。
实现这一点的一种方法如下:
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
public class Main {
public static int sumByRecursion(List<Integer> inputList) {
if (inputList.size() == 1) {
return inputList.get(0);
}
else {
return inputList.get(0) + sumByRecursion(inputList.subList(1,inputList.size()));
}
}
public static void main(String[] args)
{
List<Integer> inputList = new ArrayList<>();
Scanner scan = new Scanner(System.in);
System.out.println("Program Started");
for(int i=0; i < 5; i++) {
//ask user input
System.out.print("Enter any number: ");
inputList.add(scan.nextInt());
}
scan.close();
int sumNum = sumByRecursion(inputList);
System.out.println("The sum of digits is: "+sumNum);
}
}
这就是您想要的吗?
for(i=0;i < 5;i++) {
//ask user input
System.out.print("Enter any number: ");
userSum += scan.nextInt();
}
System.out.println("The sum of digits is: " + userSum);