Ein Wort aus einer Datei zufällig ermitteln

Hallo,

ich möchte gerne den folgenden Code erweitern, so dass via Zufall ein Wort aus der Datei gezogen wird. Das Wort soll später für ein anderen Code verwendet werden (Hangman-Spiel), daher wäre ein String sinnvoll.
Meine Herausforderung liegt daran das ich nicht weiß in welcher Position die jeweiligen Wörter vorhanden sind. Zumindest fällt mir kein Weg ein die Datei zu durchsuchen und dann ein zufälliges Wort auszugeben.

Kurzbeschreibung meiner Frage:
Ein Wort aus einer Datei zufällig ermitteln.

Weiß wer weiter?

Beschreibung des Codes:
Beim starten des Programmes wird eine Datei Namens "wortliste_hangman.dat" erstellt, zumindest wenn noch keine Datei vorhanden ist. Sobald man etwas im "JTextArea" einträgt und auf "Speichern" klickt wird das Wort in die Datei "wortliste_hangman.dat" gespeichert.
Sobald man "Einlesen" anklickt erscheinen alle gespeicherten Wörter im "JTextArea".

Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.RandomAccessFile;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class WortlisteHangman1 extends JFrame {
    private static final long serialVersionUID = 6468516705291496250L;
    private JTextArea feld;//für das Eingabefeld
    private JButton einlesen, beenden, speichern;//für die Schaltflächen
    private String dateiName;//für den Dateinamen
    private int anzahlWoerter = 0;//für die Anzahl der Wörter

    class MeinListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {   
            if (e.getActionCommand().equals("lesen"))//wurde auf Einlesen geklickt?
            dateiLesen();
            if (e.getActionCommand().equals("speichern"))//wurde auf Speichern geklickt?
            dateiSchreiben();
            if (e.getActionCommand().equals("ende"))//wurde auf Beenden geklickt?
            System.exit(0);
    }
}
    //Konstuktor
    public WortlisteHangman1(String titel) {
        super(titel);
        dateiName = "wortliste_hangman.dat";
        JPanel tempPanel;//für das Panel mit den Schaltflächen
        feld = new JTextArea();//ein neues Eingabefeld erstellen
        
        einlesen = new JButton("Einlesen");//die Schaltflächen
        einlesen.setActionCommand("lesen");
        speichern = new JButton("Speichern");
        speichern.setActionCommand("speichern");
        beenden = new JButton("Beenden");
        beenden.setActionCommand("ende");

        MeinListener listener = new MeinListener();
        einlesen.addActionListener(listener);
        speichern.addActionListener(listener);
        beenden.addActionListener(listener);
        
        setLayout(new BorderLayout());//ein BorderLayout anwenden
        add(new JScrollPane(feld), BorderLayout.CENTER);//das Eingabefeld mit Scrollbars
        tempPanel = new JPanel();//ein Panel für die Schaltflächen
        tempPanel.setLayout(new FlowLayout(FlowLayout.LEFT));//ein Panel für die Schaltflächen
        tempPanel.add(einlesen);
        tempPanel.add(speichern);
        tempPanel.add(beenden);
        add(tempPanel,BorderLayout.SOUTH);
        setMinimumSize(new Dimension(400,300));//Größe setzen, Standardverhalten festlegen und anzeigen
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    /**Methode zum Lesen*/
    private void dateiLesen() {
        try {
            RandomAccessFile datei = new RandomAccessFile(dateiName, "r");//die Datei zum Lesen öffnen
            anzahlWoerter = datei.readInt();//die Anzahl der Wörter lesen bzw. gespeicher Zahl lesen
            feld.setText("");//zum Löschen des Feldtextes, so dann man auf Laden klicken kann wir man möchte
            for (int index = 0; index < anzahlWoerter; index++) {//es wird solange gelesen bis die "anzahlWoerter" erreicht ist
                datei.skipBytes(2);//den Zeiger verschieben, 2 Bytes überstpringen
                feld.append(datei.readUTF() + "\n");//Daten aus der Datei lesen und in Feld übertragen
                }
            datei.close();
            }
        catch (IOException e) {
            JOptionPane.showMessageDialog(this, "Problem aufgetreten");
            }
        }

    /**Methode zum Schreiben*/
    private void dateiSchreiben() {//die Datei zum Lesen und Schreiben öffnen
        if (feld.getText().isEmpty()) {//ist im Eingabefeld eine Information enthalten? / wenn nein, dann verlassen wir die Methode direkt wieder
            return;
        }
        try {
            RandomAccessFile datei = new RandomAccessFile(dateiName, "rw");       
            anzahlWoerter ++;
            System.out.println(anzahlWoerter);
            datei.writeInt(anzahlWoerter);//Am Anfang der Datei die Anzahl der Wörter
            datei.seek(datei.length());//An das Ende der Datei
            datei.writeChar('*');//das Trennzeichen
            datei.writeUTF(feld.getText());//das Wort reinschreiben
            feld.setText("");
            datei.close();
        }
        catch (IOException e) {
            JOptionPane.showMessageDialog(this, "Problem aufgetreten");
        }
    }
      
      public static void main(String[] args) {
        new WortlisteHangman1("Wortliste für Hangman");
    }
}
 

abc66

Top Contributor
Zumindest fällt mir kein Weg ein die Datei zu durchsuchen und dann ein zufälliges Wort auszugeben.

Also prinzipiell so...
Java:
	public static void main(String[] args) throws IOException {
		System.out.println(Files.lines(Paths.get("test1.txt"))
				.collect(Collectors.collectingAndThen(Collectors.toCollection(ArrayList::new), list -> {
					Collections.shuffle(list);
					return list;
				})).stream().findFirst().orElse(null));
	}
 

MoxxiManagarm

Top Contributor
Also prinzipiell so...
Kann man so machen, aber ich denke Speicher-schonender und performanter wäre vermutlich RandomAccessFile.

Java:
File yourFile = new File(yourFilePath);
try (RandomAccessFile reader = new RandomAccessFile(yourFile, "r")) {
  reader.seek(new Random().nextInt(yourFile.length));
  // der "Cursor" befindet sich nun an einer zufälligen Stelle im File
  // du musst nun nur noch das Wort oder die Zeile identifizieren, in dem sich der Cursor befindet
}

Nachteil dieser Lösung ist jedoch, dass die Einrittswahrscheinlichkeit eines Tokens von seiner Länge abhängt, d.h. für ein Gleichgewicht müsstest du eventuell mit Leerzeichen auffüllen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
S Wort suchen und ersetzen in einer Datei Java Basics - Anfänger-Themen 6
P Zufälliges Wort direkt aus einer Liste ausgeben Java Basics - Anfänger-Themen 9
M Bestimmtest Wort aus einer Textdatei löschen Java Basics - Anfänger-Themen 3
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
JavaBeginner22 Wort mit der größten Länge ausgeben Java Basics - Anfänger-Themen 4
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
I String nach Wort suchen Java Basics - Anfänger-Themen 6
I Java-Wort einlesen und ausgeben Java Basics - Anfänger-Themen 7
B Umbruch nach bestimmten Wort Java Basics - Anfänger-Themen 5
M Programm, das ein Wort einliest Java Basics - Anfänger-Themen 3
F Wort nach String ausgeben Java Basics - Anfänger-Themen 5
L Mit java ein wort mehrfach versetzt darstellen Java Basics - Anfänger-Themen 14
T Zeilen des ListArray nach einem Wort durchsuchen und diese Zeile ausgeben Java Basics - Anfänger-Themen 4
V Ein Wort einlesen und dann jede Buchstabe ausgeben Java Basics - Anfänger-Themen 10
H Erste Schritte Längstes Wort eines Strings herausfinden Java Basics - Anfänger-Themen 7
S Wort in Text suchen und ersetzen Java Basics - Anfänger-Themen 3
Ananaskirsche Variablen Gucken ob Wort in Datei exisitert Java Basics - Anfänger-Themen 6
L Wort in String ersetzen Java Basics - Anfänger-Themen 11
X Methoden Wort aus String löschen und richtige Verschachtelung Java Basics - Anfänger-Themen 17
W Vergleich ob Buchstabe in einem Wort enthalten ist Java Basics - Anfänger-Themen 3
M Methoden String methoden ,Häufigkeit einm wort in der Zeichenkette Java Basics - Anfänger-Themen 14
N RegEx Wort anzeigen Java Basics - Anfänger-Themen 6
B CSV auslesen > Wort bilden > CSV ausgeben Java Basics - Anfänger-Themen 7
K Klassen String - nach Wort durchsuchen Java Basics - Anfänger-Themen 6
D 1 Wort aus TextDatei auslesen Java Basics - Anfänger-Themen 3
J Ein Wort einlesen und dann jede Buchstabe ausgeben Java Basics - Anfänger-Themen 25
D Das 1. Wort aus einem String herauslesen Java Basics - Anfänger-Themen 6
W Zahl/Wort in ein Array zerlegen Java Basics - Anfänger-Themen 6
D Wort nach Leerzeichen - String Java Basics - Anfänger-Themen 10
I Wie kann ich ein Wort in einem String suchen Java Basics - Anfänger-Themen 3
I Wort aus String löschen Java Basics - Anfänger-Themen 11
S Wort in zwei farben aufleuchten lassen Java Basics - Anfänger-Themen 2
Ollek Bestimmtes Wort aus einem Dokument lesen Java Basics - Anfänger-Themen 7
T Ersten Buchstaben in einem Wort groß schreiben. Java Basics - Anfänger-Themen 6
I Schriftart für einzelnes Wort in der JTextArea auswählen Java Basics - Anfänger-Themen 3
G Wort suchen Java Basics - Anfänger-Themen 4
L Was bedeutet das Wort "this" ? Java Basics - Anfänger-Themen 2
B a > n ? "wort" : "blub" << was Java Basics - Anfänger-Themen 3
B Char kommt 2 mal im Wort vor (indexOf) Java Basics - Anfänger-Themen 5
M Wort in einem String suchen und ausschneiden Java Basics - Anfänger-Themen 2
L Gezielte Infos aus Datei holen - Suche nach Position/Wort Java Basics - Anfänger-Themen 22
E Wort in Datei suchen Java Basics - Anfänger-Themen 5
T Deutsches Wort für WindowClosingAdapter :) Java Basics - Anfänger-Themen 9
D wort rückwärts Java Basics - Anfänger-Themen 9
D Ein Wort einlesen über Tastatur und wieder ausgeben Java Basics - Anfänger-Themen 6
M Wort als Int funktioniert nicht Java Basics - Anfänger-Themen 29
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Radius von einer ellipse bestimmen Java Basics - Anfänger-Themen 7
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
M Zufallszahl generieren mit einer linken und rechten Grenze Java Basics - Anfänger-Themen 3
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
S Textausgabe in einer For-Schleife Java Basics - Anfänger-Themen 12
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
B Popups mit Klicksabfangen zumAusfüllen einer .ods Datei Java Basics - Anfänger-Themen 0
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
E Suchfunktion in einer Liste Java Basics - Anfänger-Themen 39
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
F wie kann ich die Position des letzten Vokals innerhalb einer Zeichenkette ermitteln? Java Basics - Anfänger-Themen 5
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben