2016-03-23 11 views
1

Ich muss ein Programm schreiben, das alle ungeraden Zahlen zwischen zwei Grenzen hinzufügt. Ich habe es, um die ungeraden Zahlen hinzuzufügen, aber ich kann es zum Funktionieren bringen, wenn einer der Grenzen ein Negativ ist. Dies ist der Code, den ich bereits jede Hilfe sehr schätzen würde.Odd Summation Now

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

Vielen Dank für Ihre Antworten. Funktioniert jetzt großartig – jzaunegger

Antwort

3

Dummerweise ist die Bedingung für eine ungerade Zahl ist

n % 2 != 0 

n % 2 == 1 nicht für negative ungerade Zahlen funktioniert, weil n % 2-1 gibt.

2

Anstatt zu testen i für ungerade jede Schleife Iteration, würde ich vorschlagen, Sie beginnen mit der ersten ungeraden Zahl nach Ihrem niedrigsten Wert im Bereich und dann inkrementieren um 2 in der Schleife. So etwas wie,

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

Sie müssen i % 2 != 0 als Bedingung, um zu überprüfen, ob eine Zahl ungerade ist oder nicht, weil die Bedingung, die Sie derzeit leider mit nicht für negative Zahlen arbeiten.
Nachdem Sie aussortiert haben, ob ein oder b erste sein sollte, könnten Sie die Summe in eine bekommen Zeile IntStream:

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

Dieses nimmt die Summe aller ungeraden Zahlen. Vergessen Sie nicht zu importieren

import java.util.stream.IntStream; 

Prost!