簡體   English   中英

使用循環的簡單程序(從Java開始)

[英]Simple program using loops (Beginning Java)

我必須編寫一個使用循環的程序,該程序計算a和b(含)之間所有奇數的和,其中a和b為輸入。

我做了這個(下圖),它工作正常,但是我注意到了一個問題:當我輸入一個較大的數字,然后輸入一個較小的數字時,它返回0,但是當我首先輸入較小的數字時,它可以正常工作。 有任何快速解決方案嗎? :)

import java.util.Scanner;

public class ComputeSumAAndB
{

   public static void main (String[] args)
   {
       Scanner in = new Scanner(System.in); 
       System.out.print("Please enter 2 integers: "); //prompts user for ints
       int a = in.nextInt(); 
       int b = in.nextInt();
       int sum = 0;

       for (int j = a; j <= b; j++)
       {
           if (j % 2 == 1)
             sum += j;
       }
       System.out.println("The sum of all odd numbers (inclusive) between " + a + " and "+ b + " is " + sum);
   }
}
int temp;
if(a > b) {
    temp = a;
    a = b;
    b = temp;
}

將其放在您的for循環開始之前。


if檢查a (輸入的第一個數字)是否大於b 如果是,它將交換ab 現在,您的for循環將始終從最小的數字開始,然后迭代到更大的數字(因為在此之后, if a始終是較小的數字)。

使用此方法具有使輸出有意義的附加副作用。 現在,您的輸出將始終顯示: "between [smaller number] and [larger number]"

rolfl的答案更優雅,而且效果很好,但是當用戶首先輸入較大的數字時,您的輸出可能看起來很奇怪: "between [larger number] and [smaller number]"

您可以使用Math.min()Math.max函數獲得越來越小的輸入。

for (int j = Math.min(a,b); j <= Math.max(a,b); j++) {
    if (j % 2 == 1) {
        sum += j;
    }
}

它不起作用,因為在for循環中A大於B ,而在A小於或等於B時進行迭代。

您可以執行nhgrif所說的,但是它正在更改您的數據。。但是他是正確的。

那是因為你首先期待的a輸入(遜色限制),然后b (上級)。 當程序到達forj = a因此如果第一個輸入較大,則條件a <= b為False。 換句話說,它永遠不會進入for循環。

實際上,您應該做以下兩件事:

1就像上面提到的rolfl一樣。 您需要將min和max循環放置在正確的位置。

for(int j = Math.min(a,b); j <= Math.max(a,b); j ++){

if (j % 2 == 1) {
    sum += j;
}

}

2使用if(j%2 == 1)不足以檢查num是否為奇數。

例如

a = -5b = 0; 結果如何?

    int sum = 0;
    for(int j=-5;j<0;j++)
    {
        if(j%2 == 1)
        {
            sum+=j;
        }
    }

sum的值為0。

我們需要將條件更改為if(!(j%2 == 0))然后,您將獲得預期的結果。

那是因為您首先期望輸入(下限),然后是b(上級)。 當程序到達for時,j = a,因此,如果第一個輸入較大,則條件a <= b為False。 換句話說,它永遠不會進入for循環。

暫無
暫無

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

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