2017-02-21 5 views
0
import java.util.Scanner; 

public class OddSum { 
    public static void main(String[] args) { 
     int num; 
     int i = 1; 
     int sum = 0; 
     Scanner input = new Scanner(System.in); 

     System.out.print("Enter a number: "); 
     num = input.nextInt(); 
     input.close(); 

     while (i<=num) { 
      i += 2; 
      sum +=i; 
     } 
     System.out.println("The sum of odd numbers between 1 and" + num + "is: "  + sum); 
    } 
} 

私は、このコードを書いて、1から奇数の数字を入力しました。 私が8を入力すると、出力は16になり、出力は24になります。 何が問題になったのか教えてください。1から入力された数字までの奇数の合計が、期待したものと一致しないのはなぜですか?

+0

さて、あなたは私をインクリメントする前に合計する追加する必要があります。 – Li357

+6

'i + = 2;'は 'sum + = i;の後にする必要があります。代わりに' for'ループを使います。 – 4castle

+0

@ 4castle、ループの使用は過剰です、それは簡単に数式で計算することができます... –

答えて

0

合計を実行する前に変数を増分しています。

while (i<=num) { 
     sum +=i; 
     i += 2; 
} 
0

あなたはiに2に添加する前にsumiを追加する必要があります。したがって、inumを過ぎると、whileループは実行されなくなります。

数を取った後、それはしばらくの条件というi<=numに行くだろう:

import java.util.Scanner; 

public class OddSum { 
public static void main(String[] args) { 
    int num; 
    int i = 1; 
    int sum = 0; 
    Scanner input = new Scanner(System.in); 

    System.out.print("Enter a number: "); 
    num = input.nextInt(); 
    input.close(); 

    while (i<=num) { 

     // add i to sum before adding 2 to i 
     sum += i; 
     i += 2; 

    } 
    System.out.println("The sum of odd numbers between 1 and" + num + "is: "  + sum); 
} 
0

は一緒にコードのデバッグをします。それで、合計を得るのではなく、の原因となる+が再び2になります。それではどうなりますか?最初のケースでは、1は追加されず、最初の反復値1は負です。それはいつでも、ループに入ることを意味します。以前の値を追加する前に増加します。その後代わりの、あなたがiをインクリメントしている

for(int i=1;i<=num;i+=2){ 
     sum +=i; 
    } 
0

をあなたがそれを合計::あなたが代わりにforを使用することができ

while (i<=num) { 
    sum +=i; 
    i += 2; 
} 

:だから、コードをこのように書き換える

while (i <= num) { 
    sum +=i; 
    i += 2; 
} 

しかし、この種の問題は、ループ変数あなたは、ストリームを収集することで、Javaの8を使用している場合は、まだ

for (int i = 1; i <= num; i += 2) { 
    sum += i; 
} 

またはそれ以上:ことは定数だけインクリメントされ、forループで書くことが多い方が便利です

int sum = IntStream.rangeClosed(1, num).filter(i -> i % 2 != 0).sum(); 
0

あなたの例の結果がN = 8の場合、iが値7に達すると、ループが継続され、sumにも値9が追加され、最初の奇数:1を追加することを忘れてしまった直接3sumに追加することから あなたはwhileの代わりにforループをお互いの間のステートメントを切り替え、いずれかを使用することができ、次のいずれか

for(int i = 1; i <= num; i += 2) { 
     sum += i; 
    } 
関連する問題