和奇数程序

问题描述 投票:5回答:2

我正在编写一个程序,我应该创建一个方法来计算传递的数字是否为奇数。对于这种方法,我还需要检查传递的数字是否> 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
java
2个回答
3
投票

不要在方法的前面声明变量,只在需要时创建变量。正如约旦所指出的那样问题是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;
}

4
投票

首先,如果满足两个条件,你的isOdd方法只需要返回truenumber必须大于零且它必须是奇数。这可以用一个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;
}

哪个应该更有效率。

© www.soinside.com 2019 - 2024. All rights reserved.