# Anfrage- wiederholen Ja oder Nein



## nZxTnOS (9. Feb 2012)

Ich bin neu hier und arbeite erst seit einigen Tagen mit Java

Meine Aufgabe: Reifendruck prüfen! Am Ende Anfrage->Wiederholen Ja/Nein?

Meine Frage ist nun, wie bau ich da jetzt die Wiederholung ein?
Kann jemand mir bitte bei helfen? Hab nämlich keine Idee mehr wie man die Wiederholung programmiert


```
import java.util.Scanner;
public class Reifendruck{
public static void main(String[] args){
Scanner kbd= new Scanner (System.in);


System.out.println("Gebe bitte den Reifendruck vorne links an!");
int vlinks=kbd.nextInt() ;
System.out.println("Gebe bitte den Reifendruck vorne rechts an!");
int vrechts= kbd.nextInt() ;
System.out.println("Gebe bitte den Reifendruck hinten links an!");
int hlinks= kbd.nextInt ();
System.out.println("Gebe bitte den Reifendruck hinten rechts an!");
int hrechts= kbd.nextInt() ;
boolean vorneok=false, hintenok=false;


if(vlinks==vrechts) vorneok=true;
if(hlinks==hrechts) hintenok=true;
if(vorneok==true && hintenok==true)
System.out.println("Der Reifendruck ist ok!");



if(vorneok==false || hintenok==false)
System.out.println("Der Reifendruck ist unterschiedlich");



 if(vorneok==false){
System.out.println("Der Reifendruck vorne ist unterschiedlich!");
if(hintenok==false)
System.out.println("Der Reifendruck hinten ist unterschiedlich!");
}
 }
```


----------



## pro2 (9. Feb 2012)

Mach doch z. B. eine Endlosschleife um deinen aktuellen Code. Also entweder

```
for(;;){

}

//oder

while(true){

}
```

Wenn dann "ja" geantwortet wird, fängt das Programm einfach wieder oben an. Wenn nein, könntest du es schließen.
Oder du erstellst dir eine Variable wie "running" und fragst diese in einer while Schleife ab. Wenn dann nein geantwortet wird, wird diese false gesetzt.


----------



## nZxTnOS (9. Feb 2012)

Danke dir schonmal für deine Hilfe!
Kannst du mir das anhand eines Beispieles zeigen wie du das meinst?
Steh noch total am Anfang und versteh noch nicht ganz was du meinst


----------



## pro2 (9. Feb 2012)

```
public class test{
    public static void main(String[] args){
        for(;;){
            Scanner kbd= new Scanner (System.in);

            System.out.println("Gebe bitte den Reifendruck vorne links an!");
            int vlinks=kbd.nextInt() ;
            System.out.println("Gebe bitte den Reifendruck vorne rechts an!");
            int vrechts= kbd.nextInt() ;
            System.out.println("Gebe bitte den Reifendruck hinten links an!");
            int hlinks= kbd.nextInt ();
            System.out.println("Gebe bitte den Reifendruck hinten rechts an!");
            int hrechts= kbd.nextInt() ;
            boolean vorneok=false, hintenok=false;


            if(vlinks == vrechts) 
                vorneok = true;
            if(hlinks == hrechts) 
                hintenok = true;
            if(vorneok == true && hintenok == true)
                System.out.println("Der Reifendruck ist ok!");



            if(vorneok == false || hintenok == false)
                System.out.println("Der Reifendruck ist unterschiedlich");



            if(vorneok == false)
                System.out.println("Der Reifendruck vorne ist unterschiedlich!");
            if(hintenok==false)
                System.out.println("Der Reifendruck hinten ist unterschiedlich!");
            
            System.out.println("Wollen Sie wiederholen?");
            boolean x = kbd.nextBoolean();
            if(x == false){
                System.exit(0);
            }
        }
    }
}
```

Oder sowas ähnliches ^^


----------



## nZxTnOS (9. Feb 2012)

in meiner Aufgabenstellung wird irgendwas mit Char.antwort=kbd.next() nextAr(0)
erwähnt.

Hab das jetzt auf For abgeändert.

Nur zeigt er mir 2 Fehler an
Ich weiß aber nicht was ich falsch gemacht habe




```
import java.util.Scanner;
public class Reifendruck_Wiederholung{
public static void main(String[] args){
for(int i=0; i<anz);

Scanner kbd= new Scanner (System.in);
int anz= kbd.nextInt() ;



  System.out.println("Gebe bitte den Reifendruck vorne links an!");
int vlinks=kbd.nextInt() ;
System.out.println("Gebe bitte den Reifendruck vorne rechts an!");
int vrechts= kbd.nextInt() ;
System.out.println("Gebe bitte den Reifendruck hinten links an!");
int hlinks= kbd.nextInt ();
System.out.println("Gebe bitte den Reifendruck hinten rechts an!");
int hrechts= kbd.nextInt() ;
boolean vorneok=false, hintenok=false;


if(vlinks==vrechts) vorneok=true;
if(hlinks==hrechts) hintenok=true;
if(vorneok==true && hintenok==true)
System.out.println("Der Reifendruck ist ok!");



if(vorneok==false || hintenok==false)
System.out.println("Der Reifendruck ist unterschiedlich");



 if(vorneok==false){
System.out.println("Der Reifendruck vorne ist unterschiedlich!");
if(hintenok==false)
System.out.println("Der Reifendruck hinten ist unterschiedlich!");

System.out.println("Wollen Sie das Programm wiederholen?");
boolean i=kbd.nextBoolean() ;
if(i==false){
  System.exit(0);
}
 }
}
```



FEHLER

```
Compiliere F:\AEW\JAVA\Reifendruck_Wiederholung.java mit Java-Compiler
Reifendruck_Wiederholung.java:4:19: error: ';' expected
for(int i=0; i<anz);
                  ^
Reifendruck_Wiederholung.java:47:1: error: class, interface, or enum expected
}
^
2 errors
```


----------



## nZxTnOS (9. Feb 2012)

Ich hab keine Idee mehr wie das gehen soll

Was mach ich falsch?


```
import java.util.Scanner;
public class Reifendruck_Wiederholung{
public static void main(String[] args){

for(int i=0; i>anz;){

Scanner kbd= new Scanner (System.in);




  System.out.println("Gebe bitte den Reifendruck vorne links an!");
int vlinks=kbd.nextInt() ;
System.out.println("Gebe bitte den Reifendruck vorne rechts an!");
int vrechts= kbd.nextInt() ;
System.out.println("Gebe bitte den Reifendruck hinten links an!");
int hlinks= kbd.nextInt ();
System.out.println("Gebe bitte den Reifendruck hinten rechts an!");
int hrechts= kbd.nextInt() ;
boolean vorneok=false, hintenok=false;}


if(vlinks==vrechts) vorneok=true;
if(hlinks==hrechts) hintenok=true;
if(vorneok==true && hintenok==true)
System.out.println("Der Reifendruck ist ok!");



if(vorneok==false || hintenok==false)
System.out.println("Der Reifendruck ist unterschiedlich");



 if(vorneok==false){
System.out.println("Der Reifendruck vorne ist unterschiedlich!");
if(hintenok==false)
System.out.println("Der Reifendruck hinten ist unterschiedlich!");

System.out.println("Wollen Sie das Programm wiederholen? 1 für Nein/ 0 für Ja");
boolean i=kbd.nextBoolean() ;
int anz= kbd.nextInt() ;
if(i==0){
  System.exit(0);
}
 }

}
```




FEHLERMELDUNGEN:

```
Compiliere F:\AEW\JAVA\Reifendruck_Wiederholung.java mit Java-Compiler
Reifendruck_Wiederholung.java:5:19: error: ';' expected
for(int i=0; i>anz){
                  ^
1 error
```


Würde mich sehr sehr sehr freuen, wenn ihr mir bei meinem Problem weiterhelfen könnt


----------



## HimBromBeere (9. Feb 2012)

> for(int i=0; i<anz);


Erstens: wo bekommst du anz her
Zweitens: Eine for-Schleife besteht aus drei Argumenten: der Anfangsbedingung (z.B. int i = 0), eine Prüfbedinung (z.B. i < anz) UND einem Fortsetzungsausdruck (z.B. i++). Oder kurgefasst:

```
for (Initialisierung; Test; Fortsetzung)
```
in deinem Fall also etwa:

```
for (int i = 0; i < anz; i++)
```
Wie ich eingangs aber bereits erwähnte, ist nicht klar, wo du anz herholst (außerdem ergibt das feste Angeben einer Gesamtanzahl an Schleifendurchläufen in deinem Fall auch keinen Sinn, schließlich soll diese Schleife solange durchlaufen, bis Widerholung = nein ist, das kannst du nicht an einer Zählvariable festmachen). Daher der Vorschlag von pro2 mit der Endlosschleife for( ; ; ). Dabei musst du irgendwo INNERHALB der Schleife eine Möglichkeit schafen, wieder erauszukommen (z.B. mit break)


----------



## nZxTnOS (9. Feb 2012)

Ja okeyy...hab das jetzt so verstanden!...danke schonmal dafür :toll::applaus:

Ich hab das Programm jetzt so geändert:


```
import java.util.Scanner;
public class Reifendruck_Wiederholung{
public static void main(String[] args){
for(boolean x; x==true){
Scanner kbd= new Scanner (System.in);


System.out.println("Gebe bitte den Reifendruck vorne links an!");
int vlinks=kbd.nextInt() ;
System.out.println("Gebe bitte den Reifendruck vorne rechts an!");
int vrechts= kbd.nextInt() ;
System.out.println("Gebe bitte den Reifendruck hinten links an!");
int hlinks= kbd.nextInt ();
System.out.println("Gebe bitte den Reifendruck hinten rechts an!");
int hrechts= kbd.nextInt() ;
boolean vorneok=false, hintenok=false;}

{
if(vlinks==vrechts) vorneok=true;
if(hlinks==hrechts) hintenok=true;
if(vorneok==true && hintenok==true)break;
System.out.println("Der Reifendruck ist ok!");







 if(vorneok==false){
System.out.println("Der Reifendruck vorne ist unterschiedlich!");
if(vorneok==false || hintenok==false)
System.out.println("Der Reifendruck ist unterschiedlich");
if(hintenok==false)
System.out.println("Der Reifendruck hinten ist unterschiedlich!");

System.out.println("Wollen Sie das Programm wiederholen?");
boolean x=kbd.nextBoolean();
if(x==false)break;
System.exit(0);

 }
 }
 }
 }
```


Fehlermeldung:

```
Compiliere F:\AEW\JAVA\Reifendruck_Wiederholung.java mit Java-Compiler
Reifendruck_Wiederholung.java:4:23: error: ';' expected
for(boolean x; x==true){
                      ^
1 error
```


Wie bekomm ich den Fehler weg? Was meint er damit?


----------



## pro2 (9. Feb 2012)

Nein, du hast es nicht verstanden. Die for-Schleife ist falsch..^^


----------



## nZxTnOS (9. Feb 2012)

Ahh okey... die Fortsetzung fehlt

Also muss das so aussehen?

```
for(boolean x; x==true; ?)
```

Wie musst denn die Fortsetzung aussehen?
Kannste mir nicht zeigen wie es richtig aus zu sehen haben soll?
Wäre echt klasse, bin mit meinem Latein jetzt echt am Ende


----------



## pro2 (9. Feb 2012)

Tutorial / Java Grundlagen / Schleifen

Lesen.. sonst bringt dir das gar nichts.


----------



## bossa (9. Feb 2012)

1. Versuch dir anzugewöhnen, stets innerhalb der geschweiften Klammern den Quelltext einzurücken. Das macht die Sach übersichtlicher und dir wär sofort aufgefallen, dass da eine öffnende Klammer zu viel drin ist. nämlich die da:

```
boolean vorneok=false, hintenok=false;}
 
{             // <-- HIER!
if(vlinks==vrechts) vorneok=true;
```

2. Du verwendest 2x die Variable x. Ein mal in der For-Schleife und ein mal später. Wenn du die For-Schleife so anwendest, wie sie Sinn gibt, ist das auf jeden Fall ein mal zu viel.

3. Dein Programm wird dich überhaupt nur fragen, ob du wiederholen willst, wenn der Reifendruck vorn nicht ok ist. Überhaupt macht er alle weiteren Abfragen nur dann, wenn der Reifendruck vorn nicht gleich ist. Das willst du mit Sicherheit nicht, oder? 

*Nochmal: Achte auf deine Klammern und Rücke den Quelltext dazwischen ein, sonst kommst verlierst du den Überblick!*

4. Auch deine Abfrage, ob der Reifendruck grundsätzlich ok ist funktioniert nicht! Verschachtele die If-Anweisungen! Aber da das auch zu euren Aufgaben gehören wird und ich dir nicht alles vorkauen mag - du sollst ja auch was lernen! - gibt's von mir nur die Beseitigung der Fehler, über die der Compiler meckert und die Lösung der Schleife.

Achte auf die Einrückungen! Da sieht man sauber, was wo anfängt und aufhört!


```
import java.util.Scanner;
public class Reifendruck_Wiederholung{
	public static void main(String[] args){
		boolean repeat=true;
		while(repeat==true){
			Scanner kbd= new Scanner (System.in);
			 
			System.out.println("Gebe bitte den Reifendruck vorne links an!");
			int vlinks=kbd.nextInt() ;
			System.out.println("Gebe bitte den Reifendruck vorne rechts an!");
			int vrechts= kbd.nextInt() ;
			System.out.println("Gebe bitte den Reifendruck hinten links an!");
			int hlinks= kbd.nextInt ();
			System.out.println("Gebe bitte den Reifendruck hinten rechts an!");
			int hrechts= kbd.nextInt() ;
			boolean vorneok=false, hintenok=false;
		 
			if(vlinks==vrechts) vorneok=true;
			if(hlinks==hrechts) hintenok=true;
			if(vorneok==true && hintenok==true)break;
			System.out.println("Der Reifendruck ist ok!");
			 
			if(vorneok==false)
				System.out.println("Der Reifendruck vorne ist unterschiedlich!");
			if(vorneok==false || hintenok==false)
				System.out.println("Der Reifendruck ist unterschiedlich");
			if(hintenok==false)
				System.out.println("Der Reifendruck hinten ist unterschiedlich!");
			 
			System.out.println("Wollen Sie das Programm wiederholen?");
			
			repeat=kbd.nextBoolean();			
		}
		System.exit(0);
	}
}
```

Zur Schleife:
Es ist eine While-Schleife. Das Tutorial müsstest du ja mittlerweile gelesen haben. Du musst dir ERST deine Boolsche Variable erzeugen, sonst kennt die Schleife sie nicht. Dann sagst du "Mache das folgende solange repeat true ist". Man könnte auch vereinfacht 

```
while(repeat){
```
schreiben, aber ich denke so wie gezeigt wird klarer, was passiert.

In deinem Programm wird dann später gefragt und ein neuer Wert für repeat eingegeben. Die Schleife ist am Ende. Jetzt wird geschaut, ob denn repeat noch immer "true" ist. Wenn ja geht's von vorn los. Wenn nicht springt er raus. 

NATÜRLICH beendet das Programm erst außerhalb der Schleife mit System.exit(0). Wenn das drinnen steht, würde nix wiederholen.




So, und jetzt setz dich noch an die Reifendrucküberprüfung. Die stimmt noch nicht ganz und kann eigentlich auf viel weniger Zeilen gebracht werden.


----------



## Sakura26 (10. Feb 2012)

Vielleicht zur verschönerung noch des Quellcodes: 


```
import java.util.Scanner;
public class Reifendruck_Wiederholung{
    public static void main(String[] args){
        
    	int beenden = 1; 
    	
        while(beenden!=0){
            Scanner kbd= new Scanner (System.in);
             
            System.out.println("Gebe bitte den Reifendruck vorne links an!");
            int vlinks=kbd.nextInt() ;
            System.out.println("Gebe bitte den Reifendruck vorne rechts an!");
            int vrechts= kbd.nextInt() ;
            System.out.println("Gebe bitte den Reifendruck hinten links an!");
            int hlinks= kbd.nextInt ();
            System.out.println("Gebe bitte den Reifendruck hinten rechts an!");
            int hrechts= kbd.nextInt() ;
            boolean vorneok=false, hintenok=false;
         
            if(vlinks==vrechts) vorneok=true;
            if(hlinks==hrechts) hintenok=true;
            if(vorneok==true && hintenok==true)break;
            System.out.println("Der Reifendruck ist ok!");
             
            if(vorneok==false)
                System.out.println("Der Reifendruck vorne ist unterschiedlich!");
            if(vorneok==false || hintenok==false)
                System.out.println("Der Reifendruck ist unterschiedlich");
            if(hintenok==false)
                System.out.println("Der Reifendruck hinten ist unterschiedlich!");
             
            System.out.println("Wollen Sie das Programm wiederholen? [Exit: 0, Weiter: 1]");
            
            beenden=kbd.nextInt();           
        }
        System.exit(0);
    }
}
```

Damit der User weiß womit er das Programm beendet


```
System.out.println("Wollen Sie das Programm wiederholen? [Exit: 0, Weiter: 1]");
```


----------

