簡體   English   中英

和奇數程序

[英]Sum odd numbers program

我正在編寫一個程序,我應該創建一個方法來計算傳遞的數字是否為奇數。 對於這種方法,我還需要檢查傳遞的數字是否> 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

首先,如果滿足兩個條件,則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;
}

哪個應該更有效率。

不要在方法的前面聲明變量,只在需要時創建變量。 正如約旦所指出的,問題在於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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM