2016-03-23 7 views
1

私は2つの境界の間にすべての奇数を追加するプログラムを書く必要があります。私は奇数を追加するようにしましたが、境界の1つが否定的であれば、それを働かせることができます。これは私がすでに助けてくれたコードです。奇数合計今すぐ動作

import java.util.Scanner; 

/** 
    Computes a sum of odd integers between two bounds. 
    Input: a, the lower bound (may be odd or even). 
    Input: b, the upper bound (may be odd or even). 
    Output: sum of odd integers between a and b (inclusive). 
*/ 
public class OddSum 
{ 
    public static void main(String[] args) 
    { 
     // Read values for a and b 
     Scanner in = new Scanner(System.in); 
     int a = in.nextInt(); 
     int b = in.nextInt(); 
     int sum = 0; 
     int swap; 
     if(a > b) { 
      swap = a; 
      a = b; 
      b = swap; 
     } 
     for (int i = a; i <=b; i++){ 
      if (i % 2 ==1) 
       sum +=i; 
     } 
     System.out.println(sum); 
    } 
} 
+0

ありがとうございました。今すぐ素晴らしい作品 – jzaunegger

答えて

3

うるさく、奇数のための条件は、n % 2-1を与えるので、負の奇数のために動作しません

n % 2 != 0 

n % 2 == 1です。

2

ループの繰り返しごとに奇妙さをテストするのではなく、最初の奇数から始めて、範囲内の最小値にして、ループで2ずつ増やすことをお勧めします。何かのように、

int a = in.nextInt(); 
int b = in.nextInt(); 
int lo = Math.min(a, b); 
int hi = Math.max(a, b); 
if (lo % 2 == 0) { // <-- ensure that lo is odd. 
    lo++; 
} 
int sum = 0; 
for (int i = lo; i <= hi; i += 2) { 
    sum += i; 
} 
System.out.println(sum); 
2

あなたは数が奇数であるかどうかを確認するためにあなたの条件としてi % 2 != 0を使用する必要があるかどうかあなたは現在、残念ながら使用している状態が負の数では動作しませんので。
あなたがまたはbが最初にあるべきかどうか、あなたはIntStreamを使用して1行に合計を得ることができる整理した後:

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

これは、すべての奇数の合計がかかります。輸入するのを忘れないでください

import java.util.stream.IntStream; 

乾杯!

関連する問題