我正在开发一个程序,该程序将从用户那里获取五个数字,然后使用递归将为用户提供这些数字的总和。我的程序起初似乎工作正常,但是在我的测试中,我发现它只是采用用户输入的第一个数字并将其基本乘以5,而不是采用不同的数字求和。我在哪里错呢?就像我说的,我没有遇到任何错误,但是它并没有采用额外的四个数字并计算五个数字的总和。总是感谢您的任何帮助。
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Scanner;
public class sumRecusion2 {
static int i;
static int N = 5;
static int[] userNum= new int[N];
public static int sumUser(int newArray[]) {
int n = newArray.length;
if (n == 0)
return 0;
int ans = newArray[0]+sumUser(Arrays.copyOf(newArray, n-1));
return ans;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scnr = new Scanner(System.in);
try {
for(i = 0; i<=userNum.length-1; i++) {
System.out.println("Please enter a number: ");
userNum[i]= scnr.nextInt();
}}
catch(InputMismatchException ex) {
System.out.println("Please enter an integer without a decimal point!");
}
System.out.println("The sum of your numbers is: "+ sumUser(userNum));
}
}
答案 0 :(得分:2)
Arrays.copyOf(newArray, n - 1)
只是修剪数组中的最后一个元素,这意味着您只是将第一个元素相加n
次。
我会考虑改用Arrays.copyOfRange(newArray, 1, n)
,它将从第二个元素开始复制数组(修剪第一个元素)
我个人可能会想传入数组和要求和的元素的索引,这样会比复制n
个数组副本的效率更高。
static int i;
static int N = 5;
static int[] userNum = new int[N];
public static int sumUser(int newArray[], int index) {
if (index >= newArray.length) {
return 0;
}
int ans = newArray[index] + sumUser(newArray, index + 1);
return ans;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
userNum = new int[] {1, 2, 3, 4, 5};
System.out.println("The sum of your numbers is: " + sumUser(userNum, 0));
}
但是,您的要求可能有所不同