User Eingabe mit Zeile aus TextFile vergleichen

Naza

Mitglied
Hallo zusammen,

erst mal freue ich mich sehr das ich nun endlich auch hier angemeldet bin nach etwas längerem stöbern und immer wieder von google aus hier landen ;)

Da komme ich auch schon zu meiner ersten Frage. Ich will ein Consolen Quizspiel programmieren zum Einstieg und hänge schon etwas fest. Ich hab zu der Mainklasse 2 zusätzliche Klassen erstellt einmal für die Antwort.txt und einmal für die Fragen.txt.

Nun will es erreichen das er in meiner Main die Eingabe des user mit der ersten oder je nach dem zweiten Zeile in der Antwort.txt vergleicht ob diese richtig ist oder eben nicht. Wenn nicht soll der User noch 2 weitere male die möglichkeit haben auf diese Frage zu Antworten bevor es zu nächsten übergeht.

Wie kann sowas aussehen?
Vielen lieben dank für eure Hilfe im vorraus

Grüße naza
 
G

Gonzo17

Gast
Wo genau ist dein Problem? Das Einlesen einer Textdatei? Oder der Ablauf deines Programmes?

Genereller Tipp, taste dich mit kleinen Aufgaben heran. Mach zum Beispiel ein Quiz, das mit hart-kodierten Strings arbeitet und entsprechend nur bei dieser Eingabe positiv verläuft. Dann mach ein Tutorial um Textdateien einzulesen. Danach kannst du im Idealfall das Wissen zusammenführen und dein Quiz vervollständigen.

Achso und herzlich Willkommen im Forum :)
 

c_sidi90

Top Contributor
Herzlich Willkommen!

Erwartest du jetzt ein fertig programmiertes Quiz von uns ? Wie weit bist du ? Hast du schon Code ? Wenn nicht, wieso und woran haperts bei dir genau ?

Ich helfe dir gerne auf die Sprünge, aber versuch dich etwas konkreter auszudrücken. Soll es denn auf jede Frage mehrere Antwortmöglichkeiten geben a la 4 Antworten, eine davon ist richtig ? Wie sehen deine Textdateien denn aus ?
 

Naza

Mitglied
Sry für die magere Fragestellung. Also nein das einlesen ist nicht das Problem. Ich habe bereits via BufferedReader und FileReader die txt drinne und hab auch schon ein wenig rumprobiert und kann diese Zeilen ausgeben lassen. Mein Problem liegt eher darin jetzt zu dem Punkt zu kommen das mein Programm die Eingabe des Users(Die ich auch schon via Scanner intigriert habe) mit eben der Antwort 1 aus der antwort txt zu vergleichen.


EDIT:
@sidi

Nein natürlich erwarte ich kein fertiges Programm, wäre ja etwas sinnfrei dann noch etwas selbst zu tun ;) Ich wills ja selbst können. Aber ein tipp oder ein kleiens Beispiel wie das von statten gehen könnte also die Sache an sich wäre schön
 

c_sidi90

Top Contributor
Dazu würde ich dir empfehlen eine Methode zu schreiben, welche gleich bei Programmstart alle Fragen und Antworten in eine Liste<String> speichert z.B. eine ArrayList.

D.h. Programm startet -> Programm iteriert durch jede Zeile in Fragen.txt speichert jede Zeile in die Liste
gleicher Schritt in eine 2. List für die Antworten

Dem user wird also eine Frage gestellt, welche sich in der fragenListe befindet. Seine antwort speicherst du dir in einer temporären String Variable und vergleichst diese mit der Antwort im selben Index der antwortenListe.

Das kannst du über die .equals bzw equalsIgnoreCase (je nach Umsetzung)Methode der String-Klasse erreichen.
 
G

Gonzo17

Gast
Das kannst du über die .equals Methode der String-Klasse erreichen.

Man sollte noch anfügen, dass ein equalsIgnoreCase() auch sinnvoll sein könnte, da wird Groß-/Kleinschreibung nicht beachtet und dementsprechend wird eine Antwort "apfel" auch auf die richrige Antwort "Apfel" passen.
 

c_sidi90

Top Contributor
Hab dir mal was geschrieben woran du dich orientieren kannst. Die alten Hasen werden sicher einige Punkte finden die Verbesserungswürdig sind, dass ist mir bewusst, es geht hierbei nur um die Hilfestellung wie man so etwas angehen kann.


Benötigte Variablen
Java:
	ArrayList<String> antworten;
	ArrayList<String> fragen;
	int currentPos = 0;

Du liest die Fragen ein
Java:
private void initFragen(){
		try {
			FileReader fr = new FileReader(new File("C:/fragen.txt"));
			BufferedReader reader = new BufferedReader(fr);
			String line = null;
			
			while((line=reader.readLine())!=null){
				fragen.add(line);
			}
			
			reader.close();
		} catch (FileNotFoundException e) {
		} catch (IOException e) {
		}
		
	}

Das selbe machst du in einer anderen Methode initAntworten für die antworten.txt

Du stellst eine Frage
Java:
private void stelleFrage(int currentPos){
		
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("Frage " + currentPos+1);
		System.out.println(fragen.get(currentPos));
		
		try {
			if(reader.readLine().equals(antworten.get(currentPos))){
				System.out.println("korrekte Antwort");
				currentPos++;
				
				if(currentPos>=fragen.size()){
					System.out.println("Keine Fragen mehr..");
					return;
				}
				stelleFrage(currentPos);
			}else{
				
				//In dem Beispiel gehts nach einer falschen Antwort einfach weiter
				System.out.println("falsche Antwort");
				currentPos++;
				
				if(currentPos>=fragen.size()){
					System.out.println("Keine Fragen mehr..");
					return;
				}
				stelleFrage(currentPos);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

So sehen meine Dateien aus:

Fragen.txt

wieviel ist 1+1?
welche Farbe hat Gras?

Antworten.txt
2
gruen
 
Zuletzt bearbeitet:

Naza

Mitglied
Also ich hab jetzt einfach mal nach meinem Stand des Wissens das hier probiert, bitte verbessern wenn nötig. Aber wenn ich mir die Liste jetzt einfach ausgeben wollte grig ich nur Speicherplätze:

Java:
BufferedReader qs = new BufferedReader(new FileReader("fragen.TXT"));
BufferedReader ans = new BufferedReader(new FileReader("antwort.TXT"));
        
String Fragen;
String Antworten;
        
String[] qsList;
String[] ansList;
        
qsList = new String[20];
ansList = new String[20];
        
for(int i = 0; i < qsList.length; i++)
        {
            qsList[i] = qs.readLine();
            System.out.println(qsList);
        }

Wäre das in etwa aber der richtige Ansatz?

EDIT:

Sry hatte nich gesehen das du schon geantwortet hast. das Sieht super aus und ihr habt mir den passenden Denkanstoß gegeben ;) ... Genau das brauchte ich
 

Naza

Mitglied
jetzt bin ich etwas verwirrt. ich bin deinem beispiel so gut wie es geht gefolgt , aber wenn ich jetz in der main "stelleFrage" aufrufen möchte haut das nich hin da bekomm ich immer:

"Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - cannot find symbol"

Ich weiss was das heisst, er will von mir das ich die
public static stelleFrage(int currentPos)

in:
stelleFrage()

umwandel. Aber irgendwie hmm hab ich n Denkfehler ich grigs grad nich hin den aufruf in der main zu machen -.-
 

c_sidi90

Top Contributor
Schau dir am besten die gesamte Klasse an:

Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

/**
 * Java Forum Beispiel nr.52
 * @author sidiropoulos
 *
 */
public class Main {
	
	ArrayList<String> antworten;
	ArrayList<String> fragen;
	int currentPos = 0;
	
	public Main(){
		antworten = new ArrayList();
		fragen = new ArrayList();
		
		initFragen();
		initAntworten();
		
		stelleFrage(currentPos);
	
		
	}
	
	private void initFragen(){
		try {
			FileReader fr = new FileReader(new File("C:/fragen.txt"));
			BufferedReader reader = new BufferedReader(fr);
			String line = null;
			
			while((line=reader.readLine())!=null){
				fragen.add(line);
			}
			
			reader.close();
		} catch (FileNotFoundException e) {
		} catch (IOException e) {
		}
		
	}
	
	private void initAntworten(){
		try {
			FileReader fr = new FileReader(new File("C:/antworten.txt"));
			BufferedReader reader = new BufferedReader(fr);
			String line = null;
			
			while((line=reader.readLine())!=null){
				antworten.add(line);
			}
			
			reader.close();
		} catch (FileNotFoundException e) {
		} catch (IOException e) {
		}
	}
	
	private void stelleFrage(int currentPos){
		
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("Frage " + currentPos +1);
		System.out.println(fragen.get(currentPos));
		
		try {
			if(reader.readLine().equals(antworten.get(currentPos))){
				System.out.println("korrekte Antwort");
				currentPos++;
				
				if(currentPos>=fragen.size()){
					System.out.println("Keine Fragen mehr..");
					return;
				}
				stelleFrage(currentPos);
			}else{
				
				//In dem Beispiel gehts nach einer falschen Antwort einfach weiter
				System.out.println("falsche Antwort");
				currentPos++;
				
				if(currentPos>=fragen.size()){
					System.out.println("Keine Fragen mehr..");
					return;
				}
				stelleFrage(currentPos);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void main(String[]args){
		new Main();
	}
}
 

Naza

Mitglied
Wunderbar .. läuft. Jetzt werde ich das alles noch anpassen und verfeinern vllt eine Highscore einbauen mal sehen ;)


danke an alle
danke sidi
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T User input in Verbindung mit ChronoUnit anpassen und falls falsche Eingabe getätigtwird Java Basics - Anfänger-Themen 7
Z User/passwort eingabe...Help! Java Basics - Anfänger-Themen 4
S Input/Output Welche Möglichkeiten Eingabe von User abfragen Java Basics - Anfänger-Themen 5
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
W User zwischen Optionen wählen lassen Java Basics - Anfänger-Themen 1
JD_1998 Vektorrechner; User Input -> Index out of bounds Java Basics - Anfänger-Themen 3
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
R Wie überprüfen wann der User online oder offline ist? Java Basics - Anfänger-Themen 5
B Import Tabelle - Struktur durch User einstellbar Java Basics - Anfänger-Themen 4
C Wie kann ich einen User Input mit einer If-Anweisung verbinden? Java Basics - Anfänger-Themen 5
I gemeinsame Config-Datei für alle Windows-User Java Basics - Anfänger-Themen 5
J Dateien für anderen User "mitgeben" Java Basics - Anfänger-Themen 1
M "Per-User"-Variable Java Basics - Anfänger-Themen 2
P Ein Array mit der Eingaber der User füllen und ausgeben Java Basics - Anfänger-Themen 6
J Array manuell vom User eingeben, Zeilenweise Java Basics - Anfänger-Themen 2
R User Input wird übersprungen?! Java Basics - Anfänger-Themen 17
H Erste Schritte 2 User Interfaces für eine Anwendung Java Basics - Anfänger-Themen 7
D User - Interface über die Console Java Basics - Anfänger-Themen 14
N User wechseln? Java Basics - Anfänger-Themen 3
3 User erstellen / Oracle Content DB Java Basics - Anfänger-Themen 2
G Startmenü und user.dir Java Basics - Anfänger-Themen 14
P System.getProperty("user.dir") beeinflussen Java Basics - Anfänger-Themen 3
kulturfenster User soll Radius von Kugel bestimmen Java Basics - Anfänger-Themen 4
K User Aktivität überwachen Java Basics - Anfänger-Themen 9
I User anlegen und Sytempfade zuordnen Java Basics - Anfänger-Themen 4
I Wie kann man in root -User wechseln? Java Basics - Anfänger-Themen 16
S Windows User != Server User auslesen Java Basics - Anfänger-Themen 19
H Dienst beenden als normaler User Java Basics - Anfänger-Themen 3
X Property user.name über Konsole verändern Java Basics - Anfänger-Themen 6
M JTable Zellen für User sperren Java Basics - Anfänger-Themen 4
Torschti Eingabe von Dezimalzahlen (bis zu zwei Kommastellen) Java Basics - Anfänger-Themen 11
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
M Dialogbox sofort neustarten, falls aktuelle Eingabe falsch Java Basics - Anfänger-Themen 11
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
A Bei VierGewinnt Eingabe per Buchstabe (a,b,c...) Java Basics - Anfänger-Themen 2
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
J Mein Programm läuft bei der ersten Eingabe nicht mehr weiter, woran liegt das? Java Basics - Anfänger-Themen 6
M Eingabe limit Java Basics - Anfänger-Themen 8
brypa Programm mit Eingabe Java Basics - Anfänger-Themen 129
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
D falsche eingabe erkennen Java Basics - Anfänger-Themen 2
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
H For-Schleife bis Index von Eingabe laufen lassen Java Basics - Anfänger-Themen 24
Hamudi Bachir 2D Array eingabe vom Benutzer Java Basics - Anfänger-Themen 31
S Warum erscheint bei mir "Hallo Welt" und nicht die aktuelle Eingabe? Java Basics - Anfänger-Themen 16
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
B Array bei jeder Eingabe um eins erweitern Java Basics - Anfänger-Themen 3
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
chocobear26 Interface JOptionPane - Dialog_Fenster zeigt immer vorherige Eingabe an. Java Basics - Anfänger-Themen 4
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
M JTextField nur Zahleneingaben zulassen, eingabe sperren Java Basics - Anfänger-Themen 24
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
K falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
N Eingabe erkennen, ob groß oder kleingeschrieben worden ist Java Basics - Anfänger-Themen 22
N Fehlerausgabe bei falscher Eingabe der Users Java Basics - Anfänger-Themen 3
N Eingabe des Users direkt hinter die Ausgabe Java Basics - Anfänger-Themen 3
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
M String array durch Eingabe begrenzen Java Basics - Anfänger-Themen 7
iman Eingabe von Benutzer Filter machen. Java Basics - Anfänger-Themen 7
M Input/Output JTextField Eingabe in String Variable speichern Java Basics - Anfänger-Themen 15
D Eingabe einscannen, ohne vorher einen Datentypen anzugeben? Java Basics - Anfänger-Themen 1
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
H Eingabe Java Basics - Anfänger-Themen 7
F Bedingung für Eingabe Java Basics - Anfänger-Themen 2
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
Dimax Erste Schritte String Eingabe Prüfen Java Basics - Anfänger-Themen 11
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
B Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen Java Basics - Anfänger-Themen 5
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
J Eingabe Einschränken Java Basics - Anfänger-Themen 1
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
D Array via Eingabe befüllen Java Basics - Anfänger-Themen 6
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N Abbrechen einer Eingabe endet im Fehler Java Basics - Anfänger-Themen 3
S Konsolen eingabe Java Basics - Anfänger-Themen 17
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
x-tshainge Bei if (eingabe = = ... ) enter als eingabe nehemen Java Basics - Anfänger-Themen 4
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
S Eingabe in anderer Klasse verwenden Java Basics - Anfänger-Themen 3
T Input/Output Falsche Eingabe ausgeben Java Basics - Anfänger-Themen 3
R Ratespiel mit Return und einer Eingabe Java Basics - Anfänger-Themen 1
K Eingabe in Array speichern und Ausgeben Java Basics - Anfänger-Themen 9
J Eingabe des Scanners an einer bestimmten Position Java Basics - Anfänger-Themen 6
J Input/Output Den zweiten Output erst nach Eingabe ausgeben Java Basics - Anfänger-Themen 4
S Eingabe auf Richtigkeit und Reihenfolg überprüfen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben