Meine Aufgabe besteht u.a. darin, dass ich die zehn häufigsten Wörter einer eingelesenen Textdatei (z.B. eine Passage aus dem Faust) mithilfe Java-Programmierung bestimmen soll.
Ich bin elementar vorgegangen und noch nicht ganz fertig (was durchaus zulässig ist) und habe mir einen einfachen Algorithmus überlegt, welchen ich nun kurz in Worten fassen möchte:
Das erste Wort des Arrays wird mit allen anderen Wortes des Arrays auf (String-)Gleichheit überprüft. Gilt die Gleichheit, so wird ein Zähler um eins erhöht.
Genauso für das zweite Wort, wobei es mit den anderen Worten ab dem 1. Arrayelement wieder verglichen wird.
Auf eines muss man jedoch achten: Es ist sinnlos ein schon einmal verglichenes Wort wieder mit den anderen auf Gleichheit zu untersuchen, daher habe ich ein Hilfsarray definiert, wo alle bisherigen Startwörter eingefügt werden. In der if-Abfrage soll nun geschaut werden, ob das neue Startelement schon einmal als ein solches vorgekommen ist.
Beispielarray:
[Mutter, Esel, Liebe, Hass, Esel, Mutter, Garten, Hase, Baum, Hase, Käfer, Eva, Wald, Baum]
Das Wort "Mutter" wird nun mit allen anderen Elementen des Arrays auf Gleichheit verglichen.
Jedoch: Wenn array[j] bei der zweiten "Mutter" angelangt ist, muss nicht mehr mit den anderen worten auf Gleichheit überprüft werden, denn das ist ja schon passiert. Dieser Umstand führt auf die Idee ein Hilfsarray einzuführen, in dem alle Wörter stehen, die schon mit allen anderen verglichen wurden. Es wird deshalb in einer if-Abfrage geschaut, ob array[j] schon im Hilfsarray hilfsarray vorkommt. Wenn ja, dann kann der Vergleich in diesem inneren Schleifenduechgang ausfallen, wenn nein... (ich hoffe, es ist klar geworden, was meine Idee diesbezüglich ist)
Nun der Code:
Meine kommentierter Code (siehe if-Abfrage) ist natürlich ein semantischer Unsinn. Ich habe jedoch keinen Befehl gefunden mit dem ich nachfragen kann, ob denn das neue array[j] denn nicht schon im Hilfsarray vorkommt. Ich möchte also abfragen: Ist array[j] € hilfsarray? (wobei das Eurozeichen an das mathematische Elementzeichen erinnern soll).
Ich wollt euch nun fragen, ob es denn so einen Befehl überhaupt gibt, oder muss ich dies extra mit einer weiteren Schleife abprüfen, ob array[j] ein Element von hilfsarray ist?
Ich bin elementar vorgegangen und noch nicht ganz fertig (was durchaus zulässig ist) und habe mir einen einfachen Algorithmus überlegt, welchen ich nun kurz in Worten fassen möchte:
Das erste Wort des Arrays wird mit allen anderen Wortes des Arrays auf (String-)Gleichheit überprüft. Gilt die Gleichheit, so wird ein Zähler um eins erhöht.
Genauso für das zweite Wort, wobei es mit den anderen Worten ab dem 1. Arrayelement wieder verglichen wird.
Auf eines muss man jedoch achten: Es ist sinnlos ein schon einmal verglichenes Wort wieder mit den anderen auf Gleichheit zu untersuchen, daher habe ich ein Hilfsarray definiert, wo alle bisherigen Startwörter eingefügt werden. In der if-Abfrage soll nun geschaut werden, ob das neue Startelement schon einmal als ein solches vorgekommen ist.
Beispielarray:
[Mutter, Esel, Liebe, Hass, Esel, Mutter, Garten, Hase, Baum, Hase, Käfer, Eva, Wald, Baum]
Das Wort "Mutter" wird nun mit allen anderen Elementen des Arrays auf Gleichheit verglichen.
Jedoch: Wenn array[j] bei der zweiten "Mutter" angelangt ist, muss nicht mehr mit den anderen worten auf Gleichheit überprüft werden, denn das ist ja schon passiert. Dieser Umstand führt auf die Idee ein Hilfsarray einzuführen, in dem alle Wörter stehen, die schon mit allen anderen verglichen wurden. Es wird deshalb in einer if-Abfrage geschaut, ob array[j] schon im Hilfsarray hilfsarray vorkommt. Wenn ja, dann kann der Vergleich in diesem inneren Schleifenduechgang ausfallen, wenn nein... (ich hoffe, es ist klar geworden, was meine Idee diesbezüglich ist)
Nun der Code:
Java:
static String zehnhäufigstenWörter(Integer[] array) {
int i, j = 0, zähler = 0;
int[] hilfsarray = new int[array.length];
//while (j < array.length) {
//hilfsarray[j] = array[j];
//j++;
//}
while (j < array.length) {
i = 0;
while (i < array.length) {
if (array[j].equals(array[i]) && !array[j].equals(hilfsarray[j]) ) //hier, rechts vom UND-Symbol sollte dieser Befehl hinein, wo ich abfrage, ob das Anfangselement denn nicht schon einmal ein solches war und daher nicht mehr mit den anderen verglichen werden muss.
{
zähler++;
hilfsarray[j] = array[j];
}
i++;
}
j++;
}
}
Meine kommentierter Code (siehe if-Abfrage) ist natürlich ein semantischer Unsinn. Ich habe jedoch keinen Befehl gefunden mit dem ich nachfragen kann, ob denn das neue array[j] denn nicht schon im Hilfsarray vorkommt. Ich möchte also abfragen: Ist array[j] € hilfsarray? (wobei das Eurozeichen an das mathematische Elementzeichen erinnern soll).
Ich wollt euch nun fragen, ob es denn so einen Befehl überhaupt gibt, oder muss ich dies extra mit einer weiteren Schleife abprüfen, ob array[j] ein Element von hilfsarray ist?
Zuletzt bearbeitet: