我正在编写一个程序,该程序应该在其中编写一个计算传递的数字是否为奇数的方法。对于此方法,我还需要检查传递的数字> 0,如果不是,则返回false。 我还应该使用具有两个参数(开始和结束,代表一个数字范围)的第二种方法,并且该方法应该使用for循环来求和该范围内的所有奇数。参数end必须大于或等于start,并且start和end参数都必须大于0。 如果不满足这些条件,则从方法中返回-1表示输入无效。
这是作业:
使用int参数编写一个名为isOdd的方法,并将其命名为number。该方法需要返回一个布尔值。 如果没有返回false,请检查该数字是否大于0。 如果number为奇数,则返回true,否则返回false。
编写另一个名为sumOdd的方法,该方法具有2个int参数start和end,它们表示一个数字范围。 该方法应使用for循环将该范围内的所有奇数(包括末尾)求和并返回总和。 它应该调用方法isOdd来检查每个数字是否为奇数。 参数end必须大于或等于start,并且start和end参数都必须大于0。 如果不满足这些条件,则从方法中返回-1表示输入无效。
我已经尝试了一个多小时,但是由于我的输出错误,所以我没有正确执行。我将预期结果和结果记录在代码下方。
这是我的代码:
public static boolean isOdd(int number){
boolean status = false;
if(number < 0){
status = false;
} else if(number % 2 != 0){
status = true;
}
return status;
}
public static int sumOdd(int start, int end){
int sum = 0;
if((end < start) || (start < 0) || (end < 0)){
return -1;
}
for(int i = 0; i <= end; i++){
if((isOdd(i))){
sum += i;
}
}
return sum;
}
预期结果是:
System.out.println(sumOdd(1, 100));// → should return 2500
System.out.println(sumOdd(-1, 100)); // → should return -1
System.out.println(sumOdd(100, 100));// → should return 0
System.out.println(sumOdd(13, 13));// → should return 13 (This set contains one number, 13, and it is odd)
System.out.println(sumOdd(100, -100));// → should return -1
System.out.println(sumOdd(100, 1000));// → should return 247500
我的结果:
2500
-1
2500
49
-1
250000
答案 0 :(得分:4)
首先,如果满足两个条件,您的isOdd
方法仅需要返回true
:number
必须大于零且必须为奇数。可以使用单个return
和布尔值and
来完成。喜欢,
public static boolean isOdd(int number) {
return number > 0 && number % 2 != 0;
}
第二,您的循环应从start
开始(不为零)。但是,然后我将测试start
是否偶。如果是这样,则在循环之前将其递增。然后,我们知道我们的初始值为 odd ,因此我们不再需要在循环中测试奇数(我们可以增加2)。喜欢,
public static int sumOdd(int start, int end) {
if (end < start || start < 0 || end < 0) {
return -1;
}
int sum = 0;
if (!isOdd(start)) {
start++;
}
for (int i = start; i <= end; i += 2) {
sum += i;
}
return sum;
}
应该更有效率。
答案 1 :(得分:3)
不要在方法开始时声明变量,仅在需要它们时创建它们。正如Jordan指出的那样,问题出在for
循环索引上,它应该从start
开始,而不是0:
public static boolean isOdd(int number) {
if (number < 0) {
return false;
}
return number % 2 != 0;
}
public static int sumOdd(int start, int end) {
if ((end < start) || (start < 0) || (end < 0)) {
return -1;
}
int sum = 0;
for (int i = start; i < end; i++) {
if (isOdd(i)) {
sum += i;
}
}
return sum;
}