Programm erkennt String aus .txt Datei nicht

Diskutiere Programm erkennt String aus .txt Datei nicht im Allgemeine Java-Themen Bereich.
M

MateMalte

Hi Ihr,

ich habe mich an einem Chatbot versucht, um damit eine Schulaufgabe zu lösen.
Dazu habe ich drei Klassen erstellt:

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;

public class Philosophie extends Frame {
    private Label lPhilosophie = new Label();
    private TextArea textArea1 = new TextArea("", 1, 1, TextArea.SCROLLBARS_VERTICAL_ONLY);
    private TextArea textArea2 = new TextArea("", 1, 1, TextArea.SCROLLBARS_NONE);
    private TextField tfHelloWorld = new TextField();
    private Button bLos = new Button();
    private Button bHilfe = new Button();
   
    private String anfrage, wiedergabe;
    private int position;
   
    private Question q = new Question();
    private Answer a = new Answer();
   
    public Philosophie() {
        super();
        addWindowListener (new WindowAdapter() {
            public void windowClosing(WindowEvent evt) { dispose(); }
        });
        int frameWidth = 640;
        int frameHeight = 554;
        setSize(frameWidth, frameHeight);
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (d.width - getSize().width)/2;
        int y = (d.height - getSize().height)/2;
        setLocation(x,y);
        setTitle("Philosophie");
        setResizable(false);
        Panel cp = new Panel(null);
        add(cp);
       
        cp.setBackground(new Color(0x404040));
        lPhilosophie.setBounds(16, 8, 593, 73);
        lPhilosophie.setText("Philosophie");
        lPhilosophie.setAlignment(Label.CENTER);
        lPhilosophie.setBackground(new Color(0x404040));
        lPhilosophie.setFont(new Font("Dialog", Font.PLAIN, 28));
        lPhilosophie.setForeground(Color.WHITE);
        cp.add(lPhilosophie);
        textArea1.setBounds(16, 88, 593, 321);
        textArea1.setBackground(new Color(0x404040));
        textArea1.setText("");
        textArea1.setForeground(Color.WHITE);
        textArea1.setEnabled(true);
        textArea1.setFont(new Font("Dialog", Font.PLAIN, 16));
        textArea1.setFocusable(false);
        cp.add(textArea1);
        tfHelloWorld.setBounds(16, 416, 497, 41);
        tfHelloWorld.setBackground(new Color(0x404040));
        tfHelloWorld.setForeground(Color.WHITE);
        tfHelloWorld.setFont(new Font("Dialog", Font.PLAIN, 16));
        tfHelloWorld.setText("");
        cp.add(tfHelloWorld);
        bLos.setBounds(16, 464, 593, 41);
        bLos.setLabel("Los!");
        bLos.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
            bLos_ActionPerformed(evt);
          }
        });
        bLos.setBackground(new Color(0x404040));
        bLos.setFont(new Font("Dialog", Font.PLAIN, 12));
        bLos.setForeground(Color.WHITE);
        cp.add(bLos);
        bHilfe.setBounds(520, 416, 89, 41);
        bHilfe.setLabel("Hilfe");
        bHilfe.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
            bHilfe_ActionPerformed(evt);
          }
        });
        bHilfe.setBackground(new Color(0x404040));
        bHilfe.setFont(new Font("Dialog", Font.PLAIN, 12));
        bHilfe.setForeground(Color.WHITE);
        cp.add(bHilfe);
        // Ende Komponenten
       
        setVisible(true);
    }
   
    public static void main(String[] args) {
        new Philosophie();
    }
   
    public void bLos_ActionPerformed(ActionEvent evt) {
        anfrage = tfHelloWorld.getText();
        q.setFrage(anfrage);
        anfrage = q.getFrage();
        position = q.getPosition();
        a.setPosition(position);
        wiedergabe = a.getAntwort();
        tfHelloWorld.setText("");
        textArea1.append(anfrage + "\n");
        textArea1.append(wiedergabe + "\n\n");
    }
   
    public void bHilfe_ActionPerformed(ActionEvent evt) {
        JFrame newframe = new JFrame();
        newframe.setSize(400, 315);
        newframe.setLocationRelativeTo(null);
        newframe.setTitle("Hilfe");
        newframe.add(textArea2);
        newframe.setVisible(true);
        newframe.setResizable(false);

        textArea2.setBackground(new Color(0x404040));
        textArea2.setForeground(Color.WHITE);
        textArea2.setEnabled(true);
        textArea2.setFocusable(false);
        textArea2.setText("");
    }
}
Java:
import java.io.*;
import java.util.List;
import java.util.stream.Collectors;

public class Question {

    private List<String> question;
    private String Frage;
    private int position;
   
    public Question() {
        File fragen = new File("D:\\Programme\\Eclipse\\Workplace\\Philosophie\\Dokumente\\question.txt");
        try(BufferedReader reader = new BufferedReader(new FileReader(fragen))) {
              question = reader.lines().skip(1).collect(Collectors.toList());
            } catch (IOException ex) {
              throw new UncheckedIOException(ex);
            }
    }
   
    public String getFrage() {
        if(question.contains(Frage)) {
           
            } else {
            Frage = "404 Question not found";
        }
        return Frage;
    }
   
    public int getPosition() {
        position = question.indexOf(Frage);
        if(Frage == "404 Question not found") {
            position = 0;
        }
        return position;
    }
   
    public void setFrage(String FrageNew) {
        Frage = FrageNew;
    }
}
Java:
import java.io.*;
import java.util.List;
import java.util.stream.Collectors;

public class Answer {
   
    private List<String> answer;
    private String Antwort;
    private int Position;
   
    public Answer() {
        File antworten = new File("D:\\Programme\\Eclipse\\Workplace\\Philosophie\\Dokumente\\answer.txt");
        try(BufferedReader reader = new BufferedReader(new FileReader(antworten))) {
            answer = reader.lines().skip(1).collect(Collectors.toList());
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }
   
    public String getAntwort() {
        Antwort = answer.get(Position);
        if(Position == 0) {
            Antwort = "Please choose another question.";
        }
        return Antwort;
    }
   
    public void setPosition(int PositionNew) {
        Position = PositionNew;
    }
}
Mein Problem ist, dass mir beim testen aller Fragen, immer wieder bei bestimmten (auch immer die gleichen) Fragen ein Fehler ausgegeben wurde.
Mein Programm meint diese Frage nicht in der Datei zu finden, obwohl ich sie 1:1 aus dieser kopiert habe.
Was ist das Problem? Ich komme hier nicht weiter.

Danke für eure Zeit.

P.S. Falls die Dateien auch gebraucht werden wäre das kein Problem. Müsste nur gesagt werden.
 
J

JustNobody

Was für ein Fehler wird denn ausgeben? Ansonsten ist die Logik sehr schwer nachzuvollziehen.

Generell sollten Klassen mit einem großen Buchstaben anfangen und Variablen, Methoden, ... mit einem kleinen Buchstaben.

Ein if / else nur mit Befehlen im else Block dreht man einfach um: also if (!Bedingung) { ... } - dann hat man keinen leeren Block mehr.

Dann fällt mir in der Logik auf:
Position 0 hat eine besondere Bedeutung - also wird das erste Element der List nicht verwendet. Üblich für "nicht enthalten" ist normalerweise -1.

Wenn eine Frage / Antwort immer in der Liste der Fragen / Antworten vorkommt, dann musst Du die nicht separat speichern. Dann reicht das Speichern der Position. Also beim Setzen der Frage wird nur die Position bestimmt und gesetzt. Eine Variable "Frage" braucht man nicht, denn die ist ja über die Position immer bestimmt.
Und braucht man die Position bei Antwort überhaupt? Warum nicht einfach ein getAntwort(int position)?

Das Design scheint mir auch wenig durchdacht. Eine Frage hängt mit einer Antwort zusammen. Daher hatte ich eher an etwas gedacht, dass halt die Frage und Antwort in sich kapselt. Derzeit hast Du zusammenhängende Arrays, die nicht zusammen verwaltet werden. Ändere etwas an Antwort und schon passt alles nicht mehr zusammen.....
 
Thema: 

Programm erkennt String aus .txt Datei nicht

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben