求和单数程序

时间:2019-03-26 17:00:47

标签: java

我正在编写一个程序,该程序应该在其中编写一个计算传递的数字是否为奇数的方法。对于此方法,我还需要检查传递的数字> 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

2 个答案:

答案 0 :(得分:4)

首先,如果满足两个条件,您的isOdd方法仅需要返回truenumber必须大于零且必须为奇数。可以使用单个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;
}