2016-09-23 6 views
0

Ich habe zwei while-Schleifen, wobei man die ungeraden Zahlen zwischen 50 und 100 nimmt und die andere die geraden Zahlen zwischen 50 und 100. Es wird gut gedruckt und es funktioniert, aber mein Professor möchte, dass ich es umwandle in eine While-Schleife statt zwei. Ich habe Probleme damit, weil ich die Print-Anweisung vor, um verwende, damit es in passt, wenn die Zahlen gehen in.Wie kombiniere ich diese beiden while-Anweisungen zu einer?

int e = 50; 
int o = 51; 
System.out.print("Even numbers between 50 and 100: 50,"); 
while (e <= 98){ 
    e += 2; 
    if (e%2 == 0){ 
     System.out.print(e + ","); 
    } 
} 
System.out.print("\nOdd numbers between 50 and 100: 51,"); 
while (o <= 97){ 
    o+= 2; 

    if (e%1 == 0) { 
     System.out.print(o + ","); 
    } 
} 


Even numbers between 50 and 100: 50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100, 
Odd numbers between 50 and 100: 51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87,89,91,93,95,97,99, 

Der Ausgang wie dieses Recht sieht jetzt, aber ich muss in der Lage sein, es zu tun mit nur einer Schleife

+3

'e% 1 == 0' - du wolltest das nicht schreiben – harold

+1

Speichere die geraden und ungeraden in Arrays oder Strings und drucke dann am Ende – Taylor

+0

e% 1 == 0 gibt dir kein Extra Information. a% b == 0 bedeutet, dass a durch b teilbar ist. Also sagt e% 1 == 0, dass e durch 1 teilbar ist, was immer wahr sein wird. Was Sie hier verwenden wollten, ist e% 2 == 0 (was bedeutet, dass e durch 2 teilbar ist, was e gerade bedeutet) und e% 2 == 1 (was bedeutet, dass e nicht durch 2 teilbar ist, was bedeutet, dass e ungerade ist). –

Antwort

3

Wenn Sie nur eine while-Schleife möchten, und separate Leitungen, sollten Sie Ihre Saiten bauen und einen Drucker ausgeben. Etwas wie:

StringBuilder odds = new StringBuilder(); 
StringBuilder evens = new StringBuilder(); 
i = 50; 
while(i<100) { 
    if(i%2 == 1) { 
     odds.append(i).append(","); 
    } 
    else { 
     evens.append(i).append(","); 
    } 
    i++; 
} 
// remember that odds and evens now probably ends with a ','which you should remove 
odds.removeCharAt(odds.size()); 
evens.removeCharAt(evens.size()); 
// or do something like the following: 
//odds.append(" and nothing more!"); 
//evens.append(" and nothing more!"); 

System.out.println("Odd numbers are: "); 
System.out.println(odds); 
System.out.println("Even numbers are" "); 
System.out.println(evens) 
+0

'StringBuilder' zur Rettung, bevor Schüler schlechten Stil lernen ... –

+0

Ich frage mich immer, ob es tatsächlich hilft, und nicht bereits von Compiler für Stringbuilder optimiert. Aber ja, du hast Recht! Was weiß ich ... http://stackoverflow.com/questions/11942368/why-use-stringbuilder-explicitly-if-the-compiler-converts-string-concatenation-t –

+0

Wenn ich den Link I 'finden kann Ich füge es zu diesem Kommentar hinzu, aber das Hinzufügen zu einer Zeichenkette mit + verwendet tatsächlich String-Builder, aber es ist ein neues Objekt bei jeder Iteration der Schleife. Es ist definitiv langsamer. – jonhopkins

1

Versuchen Sie, eine Zählervariable in jedem Schritt um 1 zu erhöhen, und verwenden Sie eine if-Anweisung, um den Modul (%) zu überprüfen. Wenn es gleich 0 ist, dann ist die Anzahl gerade; Wenn es gleich 1 ist, ist die Zahl ungerade. Zum separaten Drucken können Sie zwei Listen oder Arrays verwenden.

int count=50; 
StringBuilder odds = new StringBuilder(); 
StringBuilder evens = new StringBuilder(); 

while(count<=100) 
{ 
if(count%2==0) // here, the number is even, append this number to even string 
    evens.append(count).append(","); 

else // here, the number is odd, append this number to odds string 
    odds.append(count).append(","); 
count++; 
} 

// when everything is done, print the strings 
// before doing that, you should remove the last comma at the end of these Strings. 
// Otherwise, you will have something like this: 93,95,97, 

evens.setLength(evens.length() - 1); // to remove the comma at the end 
odds.setLength(odds.length() - 1); // to remove the comma at the end 

System.out.println("The even numbers are: " + evens.toString()); 
System.out.println("The odd numbers are: " + odds.toString()); 

Es ist viel effizienter, ein StringBuilder eher zu verwenden, als die Verwendung von += Art für String s von Anhängen. Werfen Sie einen Blick auf diesen Link:

https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html

+0

Der Zustand der while-Schleife sollte "count <= 100" sein. Die Beispielergebnisse des Posters zeigen, dass 100 enthalten sein sollte. –

+0

Danke, änderte es. – codemirel

+0

Nein, es ist NICHT besser, StringBuilder zu verwenden. Sein Muss SB zu verwenden. – JIV

0

Sie können einzelne verwenden, während wie diese Schleife ungerade für den Druck und gerade Zahl ist.

int e = 50; 
    while (e <= 98) 
    {  
     if (e%2 == 0) 
     { 
      System.out.println("even :"+e); 
     } 
     else 
     { 
      System.out.println("odd :"+e); 
     } 
     e++; 
    } 
0

Erstellen Sie einfach 2 string Ausgangsvariablen und sie in der Schleife unter der Bedingung, basierend füllen

if (i%2==1) 
    odd_output = odd_output + "," + i.toString 
else 
    even_output = even_output + "," + i.toString 

(Ich könnte in Java-Syntax falsch)

Und dann drucken nur die beiden resultierenden Strings mit alle zusätzlichen Informationen, die Sie mögen

0

Hier müssen Sie keine separate Arrays Oder Strings pflegen, aber eine komplexe Bedingungen

public class EvenOddTest { 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     int num = 50; 
     System.out.println("Even numbers between 50 and 100: "); 
     while (num < 100){ 
      if (num%2 == 0){ 
       System.out.print(num + ","); 
      } else { 
       System.out.print(num + ","); 
      } 
      if(num == 98) { 
       num = 49; 
       System.out.println(); 
       System.out.println("Odd numbers between 50 and 100: "); 
      } 
      num += 2; 
     } 
    } 
} 
0

Ich weiß es nicht direkt die Frage nicht beantworten (obwohl der Ausgang der gleiche ist), aber im Jahr 2016, wenn man eine Folge von Zahlen drucken möchten tun wir etwas wie folgt aus:

public static void main(String[] args) { 
    int[] evenNumbers = IntStream.rangeClosed(50, 100).filter(i -> i % 2 == 0).toArray(); 
    int[] oddNumbers = IntStream.rangeClosed(50, 100).filter(i -> i % 2 != 0).toArray(); 

    System.out.println("Even numbers between 50 and 100: " + Arrays.toString(evenNumbers)); 
    System.out.println("Odd numbers between 50 and 100: " + Arrays.toString(oddNumbers)); 
} 

Wenn das Ziel Ihrer Übung darin besteht, zu lernen, wie man eine while Schleife verwendet, ist meine Lösung nutzlos. Wenn Sie jedoch Java so üben wollen, wie es heutzutage sein sollte, dann denke ich, dass es das Ziel erreicht.

Verwandte Themen