VokabelTrainer

JavaBeginner22

Aktives Mitglied
Java:
    String wortEnglisch= englischwort.getText();
      String wortDeutsch = tfEingabede.getText();
       Wort.add(wortDeutsch);
      int index = 0;
      int index2=0;
     
     for(int i=0; i<arrayEnglish.length; i++){

         if(wortEnglisch.equals(arrayEnglish[i])){
         index=i;
            for(int j=0; j<arrayDeutsch.length;j++){
            for(int z=0; z<Wort.size(); z++){
         if(wortDeutsch.equals(arrayDeutsch[j])){
         index2=j;
         if(index==index2){
             backroundRect.setFill(Color.GREEN);
             hi.setText("Richtig!");
       
         }
         else if(index!=index2){
          backroundRect.setFill(Color.RED);
          hi.setText("Falsch:(");
         }
         else if(!arrayDeutsch.equals(Wort.get(z))){
          backroundRect.setFill(Color.RED);
          hi.setText("Falsch:(");
       
         }

Hallo was stimmt mit mein Programm nicht? Es funktioniert nur mit den Wörtern die in den jeweiligen Arraylisten sind, dann habe ich eine leere Arrayliste gemacht, und die mit den eingabeWörtern befüllt. Dann habe ich eine for Schleife laufen lassen,und die Soll überprüfen ob der eingabeWort sich nicht in der arrayDeutsch liste befindet, wenn ja dann soll die Bedienung ausgeführt werden. Also wenn der User zbs bei Dog anstatt von Hund, Hunde eingibt dann soll die Bedienung ausgeführt werden, da Hunde sich nicht in ArrayDeutsch befindet. (Der Befehl ist in der letzen Zeile)
 

Marinek

Bekanntes Mitglied
Gib mal ein Beispiel, was sich in Wort befindet.

Was sich in wortDeutsch befindet und was in wortEnglish und was du dann erwartest.
 

JavaBeginner22

Aktives Mitglied
Andere Frage, musst du Arrays verwenden? Das schreit naemlich nach einer Map.
ich habe jetzt erkannt das leere Arrays kein Sinn machen, man kann direkt so überprüfen, aber irgendwie funktioniert das auch nicht richtig
Java:
         if(!wortDeutsch.equals(arrayDeutsch[j])){
          backroundRect.setFill(Color.RED);
          hi.setText("Falsch:(");
         
       
       
         }
 
Zuletzt bearbeitet:

JavaBeginner22

Aktives Mitglied
Das macht natürlich auch kein sinn den wenn meine for Schleife an der Stelle 0 ist, dann ist dort mein Wort Hallo, und wenn ich Spaziergang habe ist es natürlich true und dann wird immer Falsch ausgeliefert, kann man mit contain arbeiten?
 

Robert Zenz

Top Contributor
Also um dich zu erloesen, deine gesamte Logik amcht wenig Sinn und ist unnoetig kompliziert. Das und du solltest den Code immer formatieren.

Gehen wir deinen Code mal durch.

Java:
String wortEnglisch = englischwort.getText();
String wortDeutsch = tfEingabede.getText();
Wort.add(wortDeutsch);
int index = 0;
int index2 = 0;

// Du schleifst durch alle Woerter die du kennst.
for (int i = 0; i < arrayEnglish.length; i++) {
    // Und pruefst ob das eingegebene Englische Wort an dieser Stelle ist.
    // Vorher musst du ja aber das englische Wort irgendwie aus der Liste
    // holen, also koenntest du dir zusaetzlich den Index merken, oder noch
    // besser, direkt das deutsche Wort dazu merken.
    if (wortEnglisch.equals(arrayEnglish[i])) {
        // Wieso?
        index = i;
        // Du schleifst durch alle deutschen Woerter.
        for (int j = 0; j < arrayDeutsch.length; j++) {
            // Du schleifst durch alle eingegebenen Woerter.
            for (int z = 0; z < Wort.size(); z++) {
                // Und suchst den Index des deutschen Wortes welches
                // zur Eingabe passt.
                if (wortDeutsch.equals(arrayDeutsch[j])) {
                    // Wieso?
                    index2 = j;
                    // Um dann zu kontrollieren ob der Index des englischen
                    // Wortes mit dem Index des deutschen Wortes uebereinstimmt.
                    // Hier waere es zielfuehrender wenn du einfach pruefen wuerdest
                    // ob das deutsche Wort am Index des englischen Wortes mit
                    // der Eingabe uebereinstimmt. Oder zumindest hattest du so etwas
                    // vor, schaetze ich.
                    if (index == index2) {
                        backroundRect.setFill(Color.GREEN);
                        hi.setText("Richtig!");
                    } else if (index != index2) {
                        backroundRect.setFill(Color.RED);
                        hi.setText("Falsch:(");
                    } else if (!arrayDeutsch.equals(Wort.get(z))) {
                        backroundRect.setFill(Color.RED);
                        hi.setText("Falsch:(");
                    }
                }
            }
        }
    }
}

Also die Logik an sich ergibt wenig Sinn und ist unnoetig kompliziert. Was du machst kann man mit nur einer Schleife loesen:

Java:
for (int index = 0; index < englischeWoerter.length; index++) {
    String englichesWort = englischeWoerter[index];
    
    if (eingegebenesEnglischesWort.equals(englischesWort)) {
        String deutschesWort = deutscheWoerter[index];
        
        if (eingegebenesDeutschesWort.equals(deutschesWort)) {
            // Richtig
        } else {
            // Falsch
        }
    }
}

Was du aber eigentlich willst dafuer ist eine Map. Weil eine Map erlaubt es dir einen Wert mit einem anderen zu verknuepfen. In deinem Fall waere das ein englisches mit einem deutschen Wort.

Java:
Map<String, String> woerter = new HashMap<>();
woerter.put("Bike", "Fahrrad");

// Pruefung

if (woerter.containsKey(eingegebenesEnglischesWort)) {
    String deutschesWort = woerter.get(eingegebenesEnglischesWort);
    
    if (deutschesWort.equals(eingegebenesDeutschesWort) {
        // Richtig
    } else {
        // Fehler: Falsches deutsche Wort.
    }
} else {
    // Fehler: Kein solches englisches Wort bekannt.
}
 

JavaBeginner22

Aktives Mitglied
ehm ich verstehe es irgendwie nicht, ich gebe ja kein englischesWort ein ich gebe nur deutscheWörter ein
ich wollte überprüfen , ob das zufällige Englische Worte was mir im Label angezeigt wurde, beim Start der Anwendung, den selben Index hat wie, das von mir eingegebene Deutsches Wort hat, was sich im arrayDeutsch befindet, und dann wollte ich den Index von diesen Wort nehmen
 

JavaBeginner22

Aktives Mitglied
if (wortEnglisch.equals(arrayEnglish)) {
// Wieso?
index = i;
Hier soll er schauen ob mein zufälliges Wort mit den Wort an der Stelle i übereinstimmt, und muss mir dann wenn es true ist den Index liefern, und dann habe ich es in der Index Variable gespeichert
 

Jw456

Top Contributor
Bei eine Map brauchst du keinen Index.
Das wird in Key Value Paare gespeichert.
Du suchst einfach nach dem key und bekommst das dazugehörigen value.
 

Ähnliche Java Themen

Neue Themen


Oben