Texteingabe mit String Arraywerten vergleichen

  • Themenstarter Themenstarter Babbbsi
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

Babbbsi

Gast
Hallo,
eigentlich läuft mein Programm soweit. Man gibt in ein Textfeld ein Wort ein und auf Knopfdruck wird die Eingabe mit Werten aus einem Stringarray("eingabe") verglichen. Falls dass Wort da ebenfalls enthalten ist gibt er in der Ausgabelistbox ein alternatives Wort dazu aus welches er von einem 2. Stringarray namens "alternativen" bekommt.
Allerdings hab ich das Problem dass er das nur mit dem 1. Wert korrekt macht aber wenn ich den Wert für die 2. Eingabe eingebe, also "eingabe2" gibt er trotzdem den alternativwert vom 1. Eingabewert aus, also immernoch "eingabe1"
was muss ich ändern damit er immer den passenden Wert ausgibt? (wenn das eingegebene Wort an 5. position im Eingabe-Array steht soll er auch den 5. Wert des Alternativ-Arrays ausgeben)
Finde den Fehler einfach nicht...

Code:
/*
 * Eingabe.java
 *
 * Created on 6. September 2006, 12:55
 */

package anglizismenindex;

//Klassen importieren
import javax.swing.*;
/**
 *
 * @author  Axel
 */
public class Eingabe extends javax.swing.JFrame {
    
    /** Creates new form Eingabe */
    public Eingabe() {
        initComponents();
        jList1.setModel(liste);
        this.setSize(500,400);
        
            //Werte des Eingabe-Speichers
    eingabe[0]="eingabe1";
    eingabe[1]="eingabe2";
    
    //Werte des Alternativen-Speichers
    alternativen[0]="Test1";
    alternativen[1]="eingabe2, Bla, bla, bla blaodjdje";
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
    private void initComponents() {
        jTextField1 = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        jList1 = new javax.swing.JList();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem4 = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();
        jMenuItem3 = new javax.swing.JMenuItem();
        jMenuItem5 = new javax.swing.JMenuItem();

        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().add(jTextField1, new org.netbeans.lib.awtextra.AbsoluteConstraints(190, 40, 240, 40));

        jScrollPane1.setViewportView(jList1);

        getContentPane().add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(190, 170, 240, 140));

        jLabel1.setText("Anglizismus-Eingabe:");
        getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(60, 50, -1, -1));

        jLabel2.setText("Alternativen:");
        getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(110, 170, -1, -1));

        jButton1.setText("Eingabe pr\u00fcfen");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        getContentPane().add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(240, 110, -1, -1));

        jMenu1.setText("Datei");
        jMenuItem4.setText("Beenden");
        jMenu1.add(jMenuItem4);

        jMenuBar1.add(jMenu1);

        jMenu2.setText("Hilfe");
        jMenuItem1.setText("Info");
        jMenu2.add(jMenuItem1);

        jMenuItem2.setText("\u00dcber");
        jMenu2.add(jMenuItem2);

        jMenuItem3.setText("Verweise");
        jMenu2.add(jMenuItem3);

        jMenuItem5.setText("Aktualisieren");
        jMenu2.add(jMenuItem5);

        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
        jTextField1.setText("");
        
        
        for (int i=0; i<index; i++)
        {
            if(jTextField1.getText().equals(eingabe[i]));
        }
        ausgeben(alternativen[i]);
        
    }                                        
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Eingabe().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JList jList1;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JMenuItem jMenuItem3;
    private javax.swing.JMenuItem jMenuItem4;
    private javax.swing.JMenuItem jMenuItem5;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   
    //Deklarationen
    int index;
    int i;
    
    //Listbox(Ausgabefenster)
    DefaultListModel liste = new DefaultListModel();
    
    //Array(Speicher) für 10000 Eingabewerte
    String eingabe[] = new String[10000];
    
    //Array(Speicher) für 10000 Alternativen
    String alternativen[] = new String[10000];
    
    //Methode "ausgeben" deklarieren
    public void ausgeben (String alternativen)
    {
        liste.add(0, alternativen);
    }
}

Danke!
 
Code:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
        jTextField1.setText("");
       
       
        for (int i=0; i<index; i++)
        {
            if(jTextField1.getText().equals(eingabe[i]));
        }
        ausgeben(alternativen[i]);
       
    }

Das hier is kaputt. Dieser Code wird dir auf immer und ewig den ersten alternativen Text ausgeben. Und zwar deshalb: Das Semikolon beendet die if-Abfrage, ohne das irgendwelcher bedingter Code zur Ausführung kommen würde. Und dann steht ausgeben(alternativen) auch noch ausserhalb der Schleife.

Das hier sollte gehen (vorrausgesetzt, sonst geht alles 😉):

Code:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
        jTextField1.setText("");
       
       
        for (int i=0; i<index; i++)
        {
            if(jTextField1.getText().equals(eingabe[i])) {
                    ausgeben(alternativen[i]);
                    break;
            }
        }
               
    }

Das "break;", das ich noch eingefügt habe, ist eigentlich nicht nötig, es stellt nur eine kleine Beschleunigungsmöglichket dar (die du bei diesem Code aber keinesfalls messen können oder gar spüren wirst).

mpG
Tobias

P.S.: Alle Bezeichner englisch wählen; Bezeichner wie jButton1 sind böse - wer soll sowas denn nach einem halben Jahr noch verstehen? - Texte nach "//" sind Kommentare, die kanst du entfernen, wenn du sie nicht mehr brauchst...
 
kann vielleicht daran liegen, das
Code:
jTextField1.getText()
100% mit deinem eingetragenen wort übereinstiimen muss. Würde zum bespiel mit
Code:
trim()
oder
Code:
toUpperCase()
den Eingabe String etwas "Normieren". Natürlich musst du dann auch die Vergleichswerte etwas anpassen.
 
Mh, wenn jetzt gar nichts mehr kommt, dann schlägt vermutlich der Vergleich in der If-Bedingung fehl, wie mein Vorredner bereits erkannt hat.

Hier kannst du einerseits wie vorgeschlagen mt String-Normierungen hantieren (was aber u.U. nicht die Anforderungen trifft) oder einen Debugger auspacken und mal erleben, was Entwickler so etwa 50% des Tages tun (wenn sie nicht mit JUnit arbeiten).

mpG
Tobias
 
Kommando zurück! Der Fehler ist so offensichtlich, das er schon wieder als gut versteckt gelten muss:

Code:
jTextField1.setText("");

Damit setzt du den Text immer auf einen leeren String zurück. An sich nichts schlechtes, aber wenn du das machst, bevor du dir die Eingabe des Users holst, hast du ein Problem...

Also: obige Zeile an das Ende der actionPerformed() kopieren (ud sie am Anfang der Methode löschen).

mpG
Tobias
 
😀 Habs geschafft! :applaus:
Vielen dank für eure Hilfe!!! :toll:

Das mit dem jTextfield löschen am Anfang klang wirklich plausibel nur ging es danach immer noch nicht. Habe jetzt noch mal Stundenlang rumexperimentiert und andere Lösungen probiert und am Ende gings!
Nur das ich jetzt am Ende beim gleichen Quellcode rauskam den mir Tobias schon vor Stunden geraten hat :lol:

Naja, jdenfalls geht es mit diesem Code:
Code:
for (int i=0; i<index; i++)
        {
            if(jTextField1.getText().equals(eingabe[i]))
            {
                ausgeben(alternativen[i]);
            }               
         }      
        jTextField1.setText("");
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben