Datentypen Text eingeben, der verglichen werden soll

  • Themenstarter Themenstarter robby04
  • Beginndatum Beginndatum
R

robby04

Gast
Hallo zusammen,
ich danke vorab schon mal für die Hilfe.
Ich hab eine Anfängerfrage und hoffe, das mir hier geholfen werden kann. Ich hab kein Ähliches Thema gefunden und hoffe ihr könnt mir weiter helfen.
Ich will ein Programm schreiben, welches mich Wörter in einer bestimmten Reihenfolge abfrägt. Einfaches Bsp. habe ich in das bereits vorhandene Programm eingefügt:

Java:
import java.util.*;
public class AbfrageKontinente {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		// Eine Instanz der Klasse Scanner deklarieren zur Eingabe von Zahlen
		Scanner sc = new Scanner (System.in).useLocale(Locale.ENGLISH);
		
		// Programmbeschreibung ausgeben
		System.out.println("Programm: Alle Länder der Kontinente nennen (grob von Nord nach Süd, von Links nach Rechts!)");
		// Variable deklarieren
		int opt;		
		
		// 1.1. Optionen auflisten
		System.out.println("Welche Länder von welchem Kontinent möchten Sie aufzählen?" );
		System.out.println("Optionen: 1. Nordamerika " );
		System.out.println("              2. Südamerika" );
		System.out.println("              3. Europa");
                // ...
		
                System.out.print("Tippen Sie jetzt die Zahl für ein entsprechenden Kontinent ein: ");
		opt = sc.nextInt();

		switch (opt) {

		case 1:
		System.out.println("Nennen Sie nun die Länder von Nordamerika nacheinander!");
		
               // Solange Schleife bis "Alaska" eingegeben worden ist, ansonsten Fehlermeldung

		// Solange Schleife bis "Kanada" eingegeben worden ist, ansonsten Fehlermeldung

		// Solange Schleife bis "Grönland" eingegeben worden ist, ansonsten Fehlermeldung

		// Solange Schleife bis "USA" eingegeben worden ist, ansonsten Fehlermeldung

		// Solange Schleife bis "..." eingegeben worden ist, ansonsten Fehlermeldung
		
		break;
		}	
		
		}

}
Ich hoffe Ihr versteht worauf ich hinaus will.
Vielen Dank für Eure Antwort noch mal.

Gruß Robby
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
Ich hab das so verstanden, dass du willst, dass der Benutzer nach der Frage die Antwort eingeben muss,
ist die richtig, wird eine Zweite Frage gestellt.

Du musst also nach der Antwort die nächste Zeile lesen und vergleichen.
Strings vergleichen tust du mit .equals.
Nehmen wir an
Code:
 String eingabe = sc.next();
....
if(eingabe.equals("deine Antwort") //Ist deine eingegebene Zeile = der antwort?
    System.out.println("Das ist richtig"); //Richtig! Hier weiter machen was passieren soll wenn Antwort Richtig
else                                         //antwort falsch
   System.out.println("Deine antwort ist falsch, versuche es erneut") //Fehlermeldung. Frage erneut stellen mit einer Methode realisierbar.

Ich glaube so in etwa müsste es klappen, sonst frag weiter, bin ein bisschen müde.
Gute Nacht 🙂
 
Zuletzt bearbeitet:
Naja, du könntest einfach eine(mehrere) Liste(n) anlegen.
z.B.
Java:
private static final List<String> NORTH_AMERICA = Arrays.asList("Alaska", "Kanada", "Grönland", "USA");

in deinen case-Abschnitten rufst du jeweils eine Methode auf die dann einen String einliest und mit dem String am Index i in der entsprechenden Liste vergleicht ?!

Java:
		case 1:
			System.out.println("Nennen Sie nun die Länder von Nordamerika nacheinander!");
			interrogate(sc, NORTH_AMERICA);
			break;
		case 2:
			System.out.println("Nennen Sie nun die Länder von Südamerika nacheinander!");
			interrogate(sc, SORTH_AMERICA);
			break;
//usw.
die Methode [c]interrogate[/c] überlasse ich jetzt mal dir(Schleife über die Liste und vergleichen). Vllt. ist dir ja jetzt auch eine andere Idee gekommen wie man es noch lösen könnte
Vergleichen könntest du wie schon gesagt per equals oder equalsIgnoreCase...
 
Hallo Ihr beiden,
also erstmal danke für die beiden Antworten. Das mit der Liste habe ich irgendwie nicht hinbekommen, aber die andere Variante. Habe hierzu aber noch eine Frage zur Schleife, die funktioniert einfach nicht, wo liegt hier mein Fehler. Hier ein Ausschnitt:

Java:
do {

String eingabe1 = sc.next();
if(eingabe1.equals("Alaska")){System.out.println("Richtig");}
else{System.out.print("Deine Antwort ist falsch, versuche es erneut!");}

while (eingabe1.equals("Alaska")} // Hier stimmt was nicht an der do while Schleife, hier wird mir ein Fehler angezeigt.

Ich will, dass man das so lange eingeben muss bis die Antwort richtig ist.
Kann das sein, dass der das nicht schluckt, weil das Buchstaben und keine Zahlen sind?
Danke nochmals.

Gruß Robby
 
Zuletzt bearbeitet von einem Moderator:
Auf die Variable
Code:
eingabe1
hast du nur innerhalb der do-while-Schleife zugriff. So könntest du das Problem lösen:
Java:
String eingabe1 = ""; // Die Variable bereits außerhalb der Schleife deklarieren.
do {
    eingabe1 = sc.next();
    if(eingabe1.equals("Alaska")) {
        System.out.println("Richtig");
    } else {
        System.out.print("Deine Antwort ist falsch, versuche es erneut!");
    }
}while(!eingabe1.equals("Alaska")); // Hier fehlte dir ein '!' schließlich soll die Schleife solange laufen bis die Antwort richtig ist.
Das mit der Liste habe ich irgendwie nicht hinbekommen, aber die andere Variante.
Was hat da denn nicht geklappt? Ich fände eRaaaas Vorschlag mit der Liste (den Listen) nämlich auch besser.
 
ok, ihr habt mich überzeugt mit den Listen. Dann werde ich mich hier noch mal probieren. Denn mit der anderen Variante wird mein Quellcode ziemlich lang und kostet viel Mühe.

Danke. Ich frag noch mal ... wenn ich stecke... Danke

Bin halt noch frisch in der Materie.

Gruß Robby
 
Hallo noch mal,

also sorry, das ich jetzt noch mal nerve. Aber ich habs jetzt die ganze Zeit probiert und ich bekomm es einfach nicht hin, das es mit den Listen im Prinzip so funktioniert wie hier.

Java:
import java.util.*;
public class AbfrageKontinente {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner (System.in).useLocale(Locale.ENGLISH);
		System.out.println("Programm: Alle Länder der Kontinente nennen (grob von Nord nach Süd, von Links nach Rechts!)");
		int opt;		
		System.out.println("Welche Länder von welchem Kontinent möchten Sie aufzählen?" );
		System.out.println("Optionen: 1. Nordamerika " );
		System.out.println("              2. Südamerika" );
		System.out.println("              3. Europa");
		System.out.println("              4. Afrika");
		System.out.println("              5. Asien");
		System.out.println("              6. Ozeanien");
		System.out.println("              7. Antarktis");
		

		System.out.print("Tippen Sie jetzt die Zahl für ein entsprechenden Kontinent ein: ");
		opt = sc.nextInt();

		switch (opt) {

		case 1:
                System.out.println("Nennen Sie nun die Länder von Nordamerika nacheinander!");
		
		//eingabe1: Alaska	
		String eingabe1 = "Alaska"; 
		do {eingabe1 = sc.next();
		if(eingabe1.equals("Alaska")) {
                System.out.println("Richtig");} 
		else {System.out.print("Deine Antwort ist falsch, versuche es erneut!");}}
		while(!eingabe1.equals("Alaska"));
		
//eingabe2: Kanada	
String eingabe2 = "Kanada"; 
do {eingabe2 = sc.next();
if(eingabe2.equals("Kanada")) {
System.out.println("Richtig");} 
else {System.out.print("Deine Antwort ist falsch, versuche es erneut!");}}
while(!eingabe2.equals("Kanada"));
		
		//......
		
		
		break;
		}
	}
}


Kann mir das jemand erklären oder besser mit dem Beispiel oben umsetzen.
Ich könnte mein Programm jetzt wie oben schreiben:
Problem ist aber, das wird ein ewig langens Programmm, wenn ich jedes einzelne Land für jeden einzelnen Kontinent eingebe. Jedes Land 7 Programmzeilen plus 7 (bzw.9 inkl. Kommentar) individuelle Änderungen mal ca. 210 Länder. Da ist mir die Gefahr für Fehler und der damit verbundene Aufwand einfach zu groß.
Wäre genial, wenn jedes Land nur einmal in eine Liste eingetragen wird und fertig. Der Rest insich Schleifen. Ich schaffe das einfach gerade nicht und verzweifle grad. Weiß wie ich es theoretisch umsetzen muss, aber praktisch gehts einfach für mich momentan nicht.

Es muss doch eine Methode geben eine Liste (wie oben bereits erwähnt, aber ich kanns nicht richtig umsetzen) von Wörtern nach einander abzufragen und bei einer Fehleingabe das Wort erneut eingeben zu lassen, solange bis es richtig ist.
Die Wörter haben dann eine Art Index, der einzelnd nachgefragt und eingegeben werden muss, wie gesagt, solange bis es stimmt.

Könntet ihr mir bitte weiterhelfen. Ich komm einfach nicht zu meinem Ergebnis. Das mitgesendete Programm läuft, aber es ist viel zu Aufwendig es vollständig umzusetzen.

Danke schon mal für Eure Hilfe.

Gruß Robby
 
Also ohne jetzt hier groß eine ganz andere Lösung zu posten, eine Mischung aus meinem Vorschlag und Mizar wäre dann wohl:
Java:
	private static void interrogate(Scanner sc, List<String> list) {
		String s = null;
		for (int i = 0; i < list.size(); i++) {
			do {
				System.out.println("Bitte gebe Land Nr.: " + (i+1) + " ein");
				s = sc.next();
			} while (!s.equalsIgnoreCase(list.get(i)));
			System.out.println("Richtig!");
		}
		System.out.println("Alle richtig, super !");
	}

??
 

Zurück
Oben