Anfänger Anfänger Fragen

classPatrick

Mitglied
Alsoooo vorne weg ich habe "gerade erst" angefangen mit java zu arbeiten(diverse tutorials etc...,) möchte erstmal den spaß darin finden und sehen ob es mir überhaupt liegt. 🙂

Wenn ihr also tipps oder sonstige hilfreichen ratschläge parat habt immer her damit 😀

Nun zur eigentlichen frage da ich schon einige tutorials gesehen habe wollte ich mein erstes kleines projekt starten sowas wie "errate wie alt ich bin"

Ich schätze mal ich brauch nen while loop? damit ich auch wenn ich falsch rate wieder tippen kann?

Danke im vorraus 🙂

Java:
import java.util.Scanner;

class test{
	public static void main(String args[]){
		Scanner boy = new Scanner(System.in);
		
		double boy1, answer;
		boy1 = 15; 

		
			System.out.println("So how old do you think am i?");
			
			boy1 = boy.nextDouble();
			
			if (boy1 == 15){
				System.out.println("correct");
			}else{
				System.out.println("not correct");
			}
		
	}
	
}
 
Hallo,

versuchs mit einer while Schleife

Gruß Sinus

Java:
import java.util.Scanner;

class test{
	public static void main(String args[]){
		Scanner boy = new Scanner(System.in);
		
		double boy1, answer;
		boy1 = 15; 
            
         while(true) {
		
			System.out.println("So how old do you think am i?");

			if (boy1==9999) {
                              System.out.println("program wird beendet");
                              break;
                        }

			boy1 = boy.nextDouble();
			
			if (boy1 == 15){
				System.out.println("correct");
			}else{
				System.out.println("not correct");
			}
		
	}
   }
	
}
[/QUOTE]
 
Hallo,

versuchs mit einer while Schleife

Gruß Sinus

Java:
import java.util.Scanner;

class test{
	public static void main(String args[]){
		Scanner boy = new Scanner(System.in);
		
		double boy1, answer;
		boy1 = 15; 
            
         while(true) {
		
			System.out.println("So how old do you think am i?");

			if (boy1==9999) {
                              System.out.println("program wird beendet");
                              break;
                        }

			boy1 = boy.nextDouble();
			
			if (boy1 == 15){
				System.out.println("correct");
			}else{
				System.out.println("not correct");
			}
		
	}
   }
	
}
[/QUOTE]


Vielen Dank! hilft mir schon weiter 😀
 
Schau dir deinen Code nochmal genau an und überlege was genau gemacht wird. Generell empfiehlt es sich "sinnvolle" Namen für die Variablen zu verwenden um den Überblick zu behalten.

- dein Scanner würde ich umbennenen (in scanner/scan/s/s1)
- du deklarierst eine Variable für das Alter (boy1) und für eine Antwort(answer)
- dann gibst du in jedem Schritt der While-Schleife die Frage aus "Wie alt bin ich?"
- du beendest das Programm wenn das Alter 9999 entspricht
- du weist dem Alter die über den Scanner erfasste Zahl zu (damit weisst du später nicht mehr welches Alter überhaupt das richtige ist)
- im letzten Abschnitt prüfst du ob das Alter (dass sich durch die Eingaben ändert 15 ist)
- wenn du die 15 hier überprüfst und "fest" reinschreibst ist die Variable dafür ja theoretisch überflüssig
- wird für ein Alter der Datentyp Double benötigt?

Ich hatte hier erst eine Lösung parat, jedoch bin ich der Meinung, dass dir das wenig bringt, da du ja etwas lernen möchtest.

Zum Lösungsansatz bzw. "einfacheren" Aufgabenstellung: Bau dir einen Scanner und eine Variable in der du das Alter festlegen möchtest. Um das Ganze "schöner/verständlicher" zu machen gebe auf der Konsole aus worum es geht (stell die Frage nach dem Alter).

Innerhalb einer While-Schleife frage die vom Scanner erfasste Zahl (die, die in der Konsole eingegeben wird) ab und überprüfe ob sie mit der Variable Alter übereinstimmt. Wenn dies der Fall ist gebe eine "Erfolgs"-Nachricht über die Konsole aus und beende die While-Schleife. Wenn Sie nicht dem Alter entspricht, fordere die Person über eine Konsolenausgabe dazu auf es erneut zu versuchen.

Wenn du das umgesetzt hast, kannst du das Ganze auch noch erweitern z.B. könntest du falls Falsch geraten wird dem Spieler einen Tipp geben ob die Eingegebene Zahl zu hoch oder zu niedrig ist. Zusätzlich ist es mit der "einfachen" Lösung so, dass du nur Zahlen in die Konsolen eingeben kannst und er bei Buchstaben eine Fehlermeldung zeigt, vielleicht könnte man sich noch überlegen ob das nicht vielleicht verhindert werden könnte? 🙂

Viel Spass :rtfm:
 
Generell empfiehlt es sich "sinnvolle" Namen für die Variablen zu verwenden um den Überblick zu behalten.

- dein Scanner würde ich umbennenen (in scanner/scan/s/s1)

Widersprichst dir selber 😉
Code:
s
und
Code:
s1
sind schon mal keine sinnvollen bzw. sprechende Namen.
Code:
scan
klingt für mich eher nach einer Methode, daher würde ich einfach
Code:
scanner
nehmen. 🙂

@classPatrick

Java:
while(true) {
   System.out.println("So how old do you think am i?");
   if (boy1==9999) { 
      System.out.println("program wird beendet");
      break;
   }
   boy1 = boy.nextDouble();
   if (boy1 == 15){
      System.out.println("correct");
   }else{
      System.out.println("not correct");
   }
}

Ich würde von solchen
Code:
while(true)
-Endlosschleifen Abstand nehmen! Verwende immer eine sinnvolle Abbruchbedingung statt break/return.

Vorschlag:
Java:
boolean solved = false; // Abbruchbedingung
while(!solved) { // solange diese nicht zutrifft führe die schleife aus!
   System.out.println("So how old do you think am i?");
   boy1 = boy.nextDouble();
   if (boy1 == 15){
      System.out.println("correct");
      solved = true; // frage beantwortet, daher die abbruchbedingung setzen damit die schleife beendet
   }else{
      System.out.println("not correct");
   }
}
System.out.println("program wird beendet");
 
Ich würde von solchen
Code:
while(true)
-Endlosschleifen Abstand nehmen! Verwende immer eine sinnvolle Abbruchbedingung statt break/return.

Vorschlag:
Java:
boolean solved = false; // Abbruchbedingung
while(!solved) { // solange diese nicht zutrifft führe die schleife aus!
   System.out.println("So how old do you think am i?");
   boy1 = boy.nextDouble();
   if (boy1 == 15){
      System.out.println("correct");
      solved = true; // frage beantwortet, daher die abbruchbedingung setzen damit die schleife beendet
   }else{
      System.out.println("not correct");
   }
}
System.out.println("program wird beendet");

deine Methode ist sicherlich eleganter.
Aus welchem Grund sollte man vor returns und breaks Abstand nehmen?
 
deine Methode ist sicherlich eleganter.
Aus welchem Grund sollte man vor returns und breaks Abstand nehmen?

break/return in Schleifen haben schon ihre Berechtigung.
Es ging mir generell um die
Code:
while(true)
Schleife.
Weil du kannst zu allen eine Abbruchbedingung definieren und dann sollte man das auch an entsprechender Stelle überprüfen lassen und nicht irgendwo in der Schleife.

Vorteile sind unter anderem: Du hast nur eine Stelle an der diese Prüfung erfolgt und musst daher auch nur eine Stelle ändern wenn sich diese Bedingung ändert, man kann direkt am Schleifenkopf erkennen was die Abbruchbedingung ist (bei nur break/return musst du diese im Code erstmals finden)
 

Zurück
Oben