do while Schleife wird 2 mal durchlaufen

AlexU

Neues Mitglied
Hi, ich habe grade angefangen Java zu lernen und habe folgendes Problem.
In Zeile 24-34 wird die do-while Schleife 2 Mal ausgeführt bevor ich meine Eingabe über den Scanner eingeben kann.

In der Console sieht das dann so aus:
Do you wish to continue (yes or no)
>>>Please respond with (yes or no)<<<
Do you wish to continue (yes or no)

Eigentlich will ich nicht das die unteren 2 Zeilen angezeigt werden, jedoch läuft die Schleife immer zweimal durch statt wie gewollt einmal, bevor ich meine Eingabe "yes" oder "no" tätige.
Die mittlere Zeile soll nur angezeigt werden, falls man beim Ersten Mal was anderes als "yes oder "no" eingibt

Kann mir vielleicht jemand erklären woran das liegt bzw was für einem Irrtum ich unterliege?

Java:
import java.util.Scanner;

class SquareRoot {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		boolean status = true;
		boolean condition = false;
		double number;
		double root;
		String str;
		
		do {
			System.out.println("Enter a number:");
			number = scan.nextDouble();
			
			if( number < 0) {
				System.out.println(">>>number must be positive<<<");
				status = true;
			}
			else {
				root = Math.sqrt(number);
				System.out.println("Square root of " +number +" is " +root);
				
				do {
					if(condition) System.out.println(">>>Please respond with (yes or no)<<<");	//hint: enter yes or no
					condition = true;	//if a user doesnt enter yes or no at the first time, the hint gets enabled
					
					System.out.println("Do you wish to continue (yes or no)?");
					str = scan.nextLine();
					
					if( str.equals("yes") ) status = true;
					if( str.equals("no") ) status = false;
				}
				while( !(str.equals("yes") || str.equals("no")) );
				
				condition = false;		//hint gets dissabled for the next time
				
			}
		}
		while(status);
		
		System.out.println("\nBye");
	}
}
 
ersetz mal das letze
Code:
while(Status);

durch
Code:
while(!status);

Status wird mit true initialisiert, nach der eingabe wird Status ebenfalls auf true gesetzt, was ja keinen sinn macht da Status bereits true ist, dies wird wiederholt solange Status == true , deshalb könnte es sein das du in der ersten Anweisung festhängst

habs jetzt nicht probiert aber nen versuch wäre es wert hier nochmal fix was zur Veranschaulichung

es wird so lange zur eingabe aufgefordert bis die eingabe "stop" ist dann wird das Programm beendet

Java:
package tests;

import java.util.Scanner;


public class Foo {

	boolean isInterrupted = false;
	
  public Foo(){
	  
	  do{
		  System.out.println("Machen sie eine Eingabe !");
		  String state = new Scanner(System.in).nextLine();
		  
		  if(state.equals("stop")){
			 isInterrupted = true;
			 System.out.println("Programm wird beendet !");
		  }
		  else{
			  System.out.println("Programm wird fortgesetzt!");
			  
		  }
	  }while(!isInterrupted);
  }
  public static void main(String[]args){
	  new Foo();
  }
}
 
Zuletzt bearbeitet:
Das liegt daran, dass der nextDouble nur die DoubleZahl aus dem stndin liest. Das anschließende Linefeed bleibt im Buffer drin. Dadurch bekommt nextLine direkt einen Linefeed geliefert und du bekommst einen leeren String als Ergebnis. Nimm für die Texteingabe einen eigenen Scanner dann sollte es klappen.

Gruß

Claus
 

Zurück
Oben