2017-07-02 2 views
-2

Ich habe für das, was wie Stunden scheint anstarrt und ich kann nicht für das Leben von mir herausfinden, warum die Ausgabe beim Ausführen in einer Schleife stecken, so (ja, ich korrigiere jetzt einfach die Schreibweise von geschätzt):Do-While-Anweisung stecken in der Endlosschleife

Dein zukünftiges Kind ist geschätzt, um auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, auf 4 Fuß und 10 Zoll zu wachsen. Ihr zukünftiges Kind ist geschätzt, um zu 4 Fuß und 10 Zoll zu wachsen

Das passiert jedes Mal, wenn ich Schleifen schreibe.

// Ermöglicht die Verwendung der Tastatur Scanner keyboardInput = neuer Scanner (System.in);

//Allows user to input numbers 
    System.out.println("Enter the gender of your future child. Use 1 for Female and 0 for Male: "); 
    int Gender = keyboardInput.nextInt(); 
    System.out.println("Enter the height in feet, then in inches of the mom: "); 
    int MomHeight = keyboardInput.nextInt(); 
    System.out.println("Enter the height in feet, then the height in inches of the dad: "); 
    int DadHeight = keyboardInput.nextInt(); 

    int female; 
    int male; 
    int HeightFeet; 
    int HeightInches; 

    DecimalFormat feet = new DecimalFormat("#0"); 
    DecimalFormat inches = new DecimalFormat("#0"); 

    //Loop statements 
    while (Gender == 0) 
    { 
     male = (MomHeight * 13/12 + DadHeight)/2; 
     HeightFeet = male/12; 
     HeightInches = male % 12; 

    System.out.print("Your future child is estimated to grow to " + feet.format(HeightFeet)); 
    System.out.print(" feet and " + inches.format(HeightInches)); 
    System.out.print(" inches."); 
    System.out.println(""); 
    } 

    while (Gender == 1) 
    { 
     female = (DadHeight * 12 /13 + MomHeight) /2; 
     HeightFeet = female/12; 
     HeightInches= female % 12; 

    System.out.print("Your future child is estmated to grow to " + feet.format(HeightFeet)); 
    System.out.print(" feet and " + inches.format(HeightInches)); 
    System.out.print(" inches."); 
    System.out.println(""); 
    } } } 
+3

Wenn Sie Geschlecht innerhalb der Schleife nie ändern, wie wird es jemals beenden. Dies ist keine Programmierfrage, sondern eine grundlegende Logikfrage. –

+0

Sie müssen 'if' anstelle von' while' verwenden. –

+0

Es würde wirklich jedem helfen, wenn Sie den Java Namenskonventionen folgen würden. –

Antwort

3

In Ihrem Schleifen wird Gender nie geändert. Du fährst also in der Tat für immer.
Jetzt glaube ich nicht, dass Sie eine while Aussage benötigen.
Eine Anweisung if else if wäre vorzuziehen, da Sie keine neue Eingabe vom Benutzer in die Schleife aufnehmen, sondern eine Verarbeitung entsprechend einer bestimmten Bedingung (männliches oder weibliches Geschlecht) anwenden möchten.

By the way, sollten Sie Ihre Variable gender nennen, anstatt Gender zu respektieren Java Namenskonventionen:

if (gender == 0){ 
     ... 
} 

else if (gender == 1){ 
     ... 
} 

Wenn Sie alle Verarbeitung mehrere Male wiederholen würde, könnten Sie eine Schleife über alle verwenden:

+0

Ich kapitalisiere meine Variablen normalerweise nicht. Ich weiß nicht, was mein Gehirn heute macht. Das wenn sonst wie ein Charme funktioniert. Ich danke dir sehr. – Stephanie

+0

Sie sind herzlich willkommen :) Ich zeige Ihnen auch ein Beispiel, um eine 'do-while' zu ​​verwenden, die Sinn macht, den gesamten Prozess zu wiederholen. – davidxxx

+0

Ja, das habe ich gesehen. Nochmals, vielen Dank. Ich kann dir nicht einmal sagen, wie sehr ich das schätze. Macht viel mehr Sinn als das Zeug, das ich mir anschaute, um das herauszufinden! – Stephanie

0

Um eine Schleife zu beenden, müssen Sie die Bedingung falsch werden, nachdem die Schleife nach Ihrer gewünschten Anzahl ausgeführt wurde.

Auch im obigen Code scheinen Sie eine Auswahl zwischen den auszuführenden Anweisungen zu treffen, anstatt eine herkömmliche Schleife auszuführen. Erwägen Sie die Verwendung einer „if“ Anweisung

while (Gender == 0){ 
//Do this 
} 

while (Gender == 1){ 
//Do this instead 
} 

Wenn Sie die Schleife zu verlassen nach dem Drucken der Ausgabeanweisungen „X“ mal wollte, würden Sie eher stützen die Bedingung auf einer Zählvariable.

So eine Wahl auf das Geschlecht Variable basiert und die Aussagen Druck auf dem Zählung Variable basiert.

//Assume print is to be done 2 times 

int count = 1; 

if(Gender == 0){ 
//Female selection 
while(count < 3){ 
// Execute female code 
count++; 
} 
else if(Gender == 1){ 
//Male selection 
while(count < 3){ 
// Execute male code 
count++; 
} 
Verwandte Themen