我正在编写一个程序,我应该创建一个方法来计算传递的数字是否为奇数。对于这种方法,我还需要检查传递的数字是否> 0,如果不是,则返回false。我也应该使用两个参数(开始和结束,表示一系列数字)制作第二个方法,并且该方法应该使用for循环来对该范围内的所有奇数求和。参数end必须大于或等于start,并且start和end参数都必须大于0.如果不满足这些条件,则从方法返回-1以指示无效输入。
这是作业:
使用int参数编写名为isOdd的方法并将其命名为number。该方法需要返回一个布尔值。检查该数字是否> 0,如果它不是返回false。如果number为odd,则返回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
不要在方法的前面声明变量,只在需要时创建变量。正如约旦所指出的那样问题是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;
}
首先,如果满足两个条件,你的isOdd
方法只需要返回true
:number
必须大于零且它必须是奇数。这可以用一个return
和一个布尔and
来完成。喜欢,
public static boolean isOdd(int number) {
return number > 0 && number % 2 != 0;
}
其次,你的循环应该从start
开始(不是零)。但是,我会测试start
是否均匀。如果是,则在循环之前递增它。然后我们知道我们有一个奇数的初始值,所以我们不再需要测试循环中的奇数(我们可以增加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;
}
哪个应该更有效率。