ich versuche gerade eine methode zu schreiben, die die anzahl einzigartiger elemente ausgibt.
Code:
public class Wortmenge {
private String[] woerter;
public Wortmenge(String[] woerter) {
this.woerter = woerter;
}
public int gibAnzahl() {
int i = 0;
int j = 1;
int anzahlWort = 1;
while (i<woerter.length && j<woerter.length) {
if (!(woerter[i].equals(woerter[j]))) {
anzahlWort = anzahlWort + 1;
j++;
.
.
.
}
ich glaube ich gehe ganz falsch an die aufgabe ran. kann mir bitte jemand auf die sprünge helfen?
habe versucht alle werte miteinander zu vergleichen aber dann wiederhole ich einige vergleiche und anzahlWort steigt, obwohls nicht stimmt
immer nur zwei Wörter zu vergleichen bringt dir nur wenig Information,
ein int-Wert anzahlWort kann dir später beim Auftauchen eines Wortes x auch kaum sagen, ob genau dieses x schon bekannt ist oder nicht,
der typische Weg ist, ein Set zu eröffnen, z.B. ein HashSet,
und dort alle Wörter einzufügen, Doppelte werden dabei automatisch gelöscht
hm kann ich diesen hashset auch selber implementieren? weil wir dürfen noch nicht behandelte themen in der klausur nicht benutzen. darf nur stink normale arrays benutzen :-s
durchlaufe die Ursprungs-Liste mit zwei Laufvariablen
(normalerweise benutzt man dafür zwei for-Schleifen ineinander, deine while-Konstruktion ist sehr kompliziert)
pro Wort durchläufst du das neue Array und schaust nach ob schon vorhanden,
wenn ja dann zum nächsten Wort, ansonsten das aktuelle Wort ins neue Array einfügen
hm kann ich diesen hashset auch selber implementieren? weil wir dürfen noch nicht behandelte themen in der klausur nicht benutzen. darf nur stink normale arrays benutzen :-s
Wenn ihr nur selbstgeschriebene methoden benutzen dürft denke ich nicht das der Lehrer auf Hastable hinauswill.
Eine Möglichkeit wäre das du jeden Wert mit jedem Wer vergleichst der einen kleineren Index hat.
Also: Wenn der index i = 10 ist, dann musst du dessen Wert mit jedem Wert dessen Index < 10 ist vergleichen. usw...
Für Klausuren und Hausaufgaben bei denen man die Finger abgehackt bekommt (z.B. "Du darfst kein HashSet verwenden, obwohl es eine gute Lösung darstellen würde") galt für mich immer: So wenig Aufwand wie möglich. Also ungefähr so:
Code:
final String[] treffer = new String[woerter.length];
int anzahlTreffer = 0;
eingabeSchleife: for (int eingabeIndex = 0; eingabeIndex < woerter.length; eingabeIndex++) {
final String wort = woerter[eingabeIndex];
for (int trefferIndex = 0; trefferIndex < anzahlTreffer; trefferIndex++) {
if (treffer[trefferIndex].equals(wort)) {
continue eingabeSchleife;
}
}
treffer[anzahlTreffer++] = wort;
System.out.println(wort);
}
falsche Frage, eher immer final und nur nicht final wenn nötig
falls man darauf Wert legt,
und final bedeutet nur, dass man der Variablen kein neues Array zuweisen kann, das Array selber kann normal verändert werden
public static int einmalig(String[] woerter) {
int anzahlEinzige = woerter.length;
for (int ind = 0; ind < woerter.length - 1; ind++) {
int vgl = ind + 1;
while (vgl < woerter.length && !woerter[ind].equals(worter[vgl++]);
if (vgl < woerter.length)
anzahlEinzige--;
}
return anzahlEinzige;
}
hmm komisch.. warum klappt das denn bei mir nicht.. ich habe die klammersetzung noch ergänzen müssen, weil netbeans meckert.. hab da wohl was falsch gemacht aber eigentlich müsste es richtig ein :-s
achso sorry, ja der klappt auch bei mir.. versuche gerade den ohne continue hinzubekommen. wir dürfen nicht immer alles benutzen, das sind punktabzüge :-s
beispielsweise haben wir bisher immer gelernt, dass while eine schleife ist.. und haben nie wie ein ausdruck mit ; beendet
Wer wird schon als solcher geboren? Ich hatte das Glück, von meinem Onkel mit 10 Jahren einen Atari 800XL geschenkt zu bekommen. Ein Diskettenlaufwerk hab ich erst ein paar Monate später bekommen. Dafür hatte ich von Anfang an ein Basic-Handbuch. Hat mich halt total begeistert, der Maschine Dinge sagen zu können, und die hat dann gemacht was ich ihr gesagt habe. Und seitdem programmiert man halt dies und das. Seit einigen Jahren auch beruflich. Aber geboren wurde ich als Nichtprogrammierer.