Vokabelproblem

mathiasj

Bekanntes Mitglied
Hallo,
ich weiß, dass der Titel nicht wirklich aussagekräftig ist, aber mir ist nichts besseres eingefallen :)

Ich habe ein Vokabellernprogramm, bei dem eine Vokabel natürlich mehrere Bedeutungen haben kann. Deswegen suche ich nach einem Schrägstrich und rufe split() auf; die einzelnen Stücke speichere ich in einem Array. Ich habe also z.B. die Vokabel Frage|Antwort1/Antwort2/Antwort3.
Jetzt wird geprüft, ob der Text, den der Benutzer eingegeben hat, dem der Karte entspricht.
Doch wie kann ich es bewerkstelligen, dass alle mäglichen Kombinationen abgefragt werden? Also, wenn der Benutzer schreibt Antwort2/Antwort1/Antwort3, dass es dann keinen Unterschied macht? Das Ganze soll natürlich auch für Vokabeln mit 4;5... Bedeutungen funktionieren...
 
M

Marcinek

Gast
Ein Beispiel für eine FOR schleife?

Vielleicht solltest du dich auf nur ein Problem konzentrieren.. ;D TIC TAC TOE Online oder Vokabel trainer? ;D

---

Die Art deiner Fragen ist sowieso in der Kategorie "Suspekt". Es mag für dich so aussehen, als ob du hier mit Eigeninitiative nur so glänzt aber leider ist dem nicht so.

Wenn du ein Problem hast, dann ist in meiner Signatur beschrieben, wie man korrekt in einem Forum postet.

Hier die Kurzfassung:

1. Problem beschreiben, SOLL Zustand. (Hast du)
2. Deine Lösung beschreiben (IST-Zustand) (Fehlt)
3. Den Fehler posten und mit Fehlermeldung. (Fehlt)

Alles andere klingt nach: Ich muss hier was machen und habe kein Bock drauf und macht mal...
 

mathiasj

Bekanntes Mitglied
Also müssen tue ich gar nichts; ich programmierte aus Spaß und habe halt einfach ein bisschen Hilfe gebraucht... Ich habe ja versucht das Problem zu lösen, aber ich komme nicht auf den richtigen Ansatz, da eine Vokabel ja unendlich viele Bedeutungen haben kann... Ich muss irgendwie mit der length arbeiten, doch genau im code Ansatz ist ja mein Problem... Ich weiß nicht, wie ich allgemein sagen kann, dass alle Kombinationen ausprobiert werden... Und genau das habe ich in meinem ersten Beitrag geschrieben.

Außerdem gibt es etwas wie Updates d.h., ich kümmere mich auch während ich ein neues Projekt schreibe um meine alten Projekte...
 
Zuletzt bearbeitet:
D

dashlkda

Gast
Irgendwie verstehe ich nicht warum ein Benutzer für eine Vokabel mehrere verschiedene Antworten eingeben muss?

In der Regel gibt man doch nur eine mögliche Antwort ein.

o_O oft haben Worte mehrere ähnliche Bedeutungen die aber vom Kontext abhängig sind. Ich habe hier auch ein Vokabelprogramm, da ich nebenbei Russisch lerne. Dort ist es auch so geregelt das wenn man identische Worte eingibt die einfach zusammengefasst werden. D.h. Fremdwort / Antwort_1 | Antwort_2 ... und andersherum Antwort_1 | Antwort_2 / Fremdwort. Macht auch nur so Sinn sonst weiß man ja schließlich nie welches Wort nun gemeint ist.
 

mathiasj

Bekanntes Mitglied
Ja, aber in Latein etc. wird das Ganze dann schon wieder komplizierter... Fakt ist, dass ich diese Funktion gerne hätte, aber wie gesagt leier nicht auf den rihtigen Ansatz komme... Ich möchte natürlich auch nicht einfach sagen, eine Vokabel kann nur bis zu 5 Bedeutungen haben; dann ist Schluss...
 

m7x

Mitglied
Hier mal ein Ansatz:

Mache eine Map<String, String[]> (initialisieren mittels HashMap) auf.
Jetzt speichere jede Vokabel darin (for-Schleife über die Zeilen der Datei):

1. Splitte am "|" // Achtung: Split funktioniert mit Regex --> du musst split("\\|") schreiben!
Index 0 ist im erhaltenen Array dein Key index 2 der String mit den Bedeutungen
2. Splitte die Bedeutungen am "/" Du erhälst dein Value für die Map
3. Speichere Key und Value in die Map

Jetzt lässt du dir immer wieder eine Integer i im Bereich der Zeilen der Datei durch Zufall erzeugen.
Nun kommt die tricky Zeile:
String aktuelleVokabel = (String) vokabeln.keySet().toArray();
die Nutzt du gleichzeitig als Key für die Map.
Jetzt gehe alle vom Benutzer eingeg. Vokabeln durch:
Für jede gehst du das Value der Map durch und überprüfst ob die aktuelle Vokabel dabei ist.

Viel Spaß beim Programmieren,

m7x
 
Zuletzt bearbeitet:

m7x

Mitglied
Hier mal ein Ansatz:

Mache eine Map<String, String[]> (initialisieren mittels HashMap) auf.
Jetzt speichere jede Vokabel darin (for-Schleife über die Zeilen der Datei):

1. Splitte am "|" // Achtung: Split funktioniert mit Regex --> du musst split("\\|") schreiben!
Index 0 ist im erhaltenen Array dein Key index 2 der String mit den Bedeutungen
2. Splitte die Bedeutungen am "/" Du erhälst dein Value für die Map
3. Speichere Key und Value in die Map

Jetzt lässt du dir immer wieder eine Integer i im Bereich der Zeilen der Datei durch Zufall erzeugen.
Nun kommt die tricky Zeile:
String aktuelleVokabel = (String) vokabeln.keySet().toArray();
die Nutzt du gleichzeitig als Key für die Map.
Jetzt gehe alle vom Benutzer eingeg. Vokabeln durch:
Für jede gehtst du das Value der Map durch und überprüfst ob die aktuelle Vokabel dabei ist.

Viel Spaß beim Programmieren,

m7x
 

m7x

Mitglied
Uups zweimal gepostet könnte ein mod das eine bitte mal entfernen

Edit: Hab bei Projekte grad gesehn, dass dus schon fertig hast
--> Bitte schließ den thread mal
 
Zuletzt bearbeitet:

Landei

Top Contributor
Ja, aber in Latein etc. wird das Ganze dann schon wieder komplizierter... Fakt ist, dass ich diese Funktion gerne hätte, aber wie gesagt leier nicht auf den rihtigen Ansatz komme... Ich möchte natürlich auch nicht einfach sagen, eine Vokabel kann nur bis zu 5 Bedeutungen haben; dann ist Schluss...

Ich würde auch zu der Version raten, die ThreadPool vorgeschlagen hat. Was nützt, wenn du weißt, dass "Zug" mit "Train/Move" übersetzt werden kann, und dann in deinem TicTacToe-Spiel "Please make a train" schreibst? Der jeweilge Kontext/Anwendungsfall gehört eben zum Lernen des Wortpaars dazu...
 
Zuletzt bearbeitet:

mathiasj

Bekanntes Mitglied
@m7x Vielen Dank! So klappt es! Und das Programm habe ich noch nicht fertig; in Projekte habe ich eine frühere Version gepostet.

@Landei Ich verstehe nicht so ganz, was du meinst... Natürlich muss men den Gebrauch lernen, aber man muss dazu auch wissen, welche Bedeutungen die Vokabel alles haben kann. Naja, ist ja egal; ich habe jetzt ja eine Lösung.
 

Landei

Top Contributor
Ich sage nur, dass es sinnvoll ist, aus didaktischen Gründen Homonyme auch als separate Wortpaare zu behandeln (was gleichzeitig dein Programm vereinfacht).

Übrigens: Eventuell willst du ja später einmal verschiedene "Sets" (thematisch, Schwierigkeit u.s.w.) definieren können - schließlich kann man irgendwann z.B. alle Farben, und will die nicht immer und immer wieder abgefragt bekommen - und wie passt dann das "Green" beim Golfen in dein System?

Nebenbei bemerkt kommen in manchen anderen Sprachen Homonyme sehr häufig vor, so wird für das japanische "kikan" ( Find words - Denshi Jisho ) an die 20 Bedeutungen gelistet, und 10 davon sind mindestens relevant. Wie soll das jemand jemals aus dem Kopf hinschreiben können? Im Englischen mag das nicht so häufig sein, aber da lassen sich auch Beispiele finden, z.B. dict.cc | cut | Wrterbuch Englisch-Deutsch oder dict.cc | table | Wrterbuch Englisch-Deutsch
 

m7x

Mitglied
@Landei Könnte man machen aber manchmal reichts auch wie von mir beschrieben
[OT]
Für Latein reichts so aus. Ist ja auch ziemlich einseitig man übersetzt ja nur von Latein zu Deutsch kaum andersrum, da reicht das wirklich. Wo wir einmal dabei sind "vinidcare" ist ein cooles Wort (von seinen Bedeutungen) ^^.
EDIT: Bedeutungen (nach Ostia Altera): bestraften, beschützen, befreien; na wenn das ma eindeutig ist :D
[/OT]
 
Zuletzt bearbeitet:

m7x

Mitglied
So zitier hier nochmal meine PN von vorhin

m7x hat gesagt.:
Hi

Ich hatte dir ja vorhin nen Tipp zu deinem Proggi gegeben.
Hab jetzt gemerkt, dass ich nen Denkfehler drinne hatte, hoffe den hattest du nicht auch.
Wenn ja Entschuldigung.
Wenn er sie alle durchschaut, kann der Anwender das Programm "exploiten" (wenn man das so nennen kann) und drei mal das selbe Wort reinschreibn. Ne Lösung wäre das Array der Wörter immer in ne Liste zu kopieren und aus der dann zu löschen wenn ein Wort gefunden wurde
Java:
List<String> aktuelle Bedeutunen = new List<String>();
for(String vok : bedeutungennaktuell)
{
    aktuelleBedeutungen.add(vok);
}

... //erste for (über eingaben des benutzers, zähler i) zweite for über die Liste (zähler j)
    if(<Wort gefunden>){aktuelleBedeutungen.remove(j)}
...
if(aktuelleBedeutungen.size() == 0)
{
  <alle richtig>
}

Wenn du den Fehler auch hattest kannst du ja das nur zur ergänzung noch in den thread schreiben

Viele Grüße m7x

reingeschrieben hab ichs jetz selber ^^
 

Oben