我正在尝试编写一个方法来计算1和给定正整数n之间的奇数整数之和,而不使用if语句之外的其他任何东西(sheesh!)。它确实很好,直到我决定创建一个方法,递归地询问数字,直到它是积极的并使用它来获得n。
现在我的程序输出正确的结果,直到我输入一个负数。然后它要求一个正定的,直到我输入一个并输出0,值I初始化变量val。
我不确定逻辑错误在哪里。你能看一下吗?我确定这是显而易见的事情,但我想我今天刚刚结束了我的智慧。谢谢!
package oddsum;
import java.util.Scanner;
public class Oddsum {
public static int oddSum(int n){
int val=0;
if(n>1){
if(n%2==0){
val=n+oddSum(n-1);
}else{
val=oddSum(n-1);
}
}
return val;
}
public static int request(int n){
Scanner in= new Scanner(System.in);
System.out.println("Give me a positive integer: ");
n=in.nextInt();
if (n<0){
System.out.println("I said positive! ");
request(n);
}
return n;
}
public static void main(String[] args) {
int val=0;
int n=request(val);
System.out.println(oddSum(n));
}
}
答案 0 :(得分:1)
您应该从request()方法中删除输入参数。因为您的负输入是通过递归调用执行的。
public class Oddsum {
public static int oddSum(int n) {
int val = 0;
if (n > 1) {
if (n % 2 == 0) {
val = n + oddSum(n - 1);
} else {
val = oddSum(n - 1);
}
}
return val;
}
public static int request() {
Scanner in = new Scanner(System.in);
System.out.println("Give me a positive integer: ");
int n = in.nextInt();
if (n < 0) {
System.out.println("I said positive! ");
return request();
}
return n;
}
public static void main(String[] args) {
int n = request();
System.out.println(oddSum(n));
}
}
输出;