Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
// hier möchte ich schauen, ob o in meinem Array (menge) enthalten sist
public boolean contains(String o) throws IllegalArgumentException {
for (int i = 0; i < array.length; i++) {
if (array[i] == o) {
return true;
}
}
if (o == null) {
throw new IllegalArgumentException("o darf nicht null sein!");
} else {
return false;
}
}
//(...)
//und hier möchte ich dem Array etwas hinzufügen
public boolean add(String o) {
if (contains(o) == false) {
for (int i = 0; i < array.length; i++) {
array[i] = o;
}
return true;
} else
return false;
}
Also ich habe weiter oben das Array erstellt. Und in der add-Methode möchte ich dem Array einen Wert hinzufügen. Dafür darf 3 nicht null sein, und auch nicht schon im Array enthalten sein.
Ich geh jetzt mal davon aus, dass ich die contains-Methode richtig eingebunden habe und es nur weitergeht, wenn o nicht null ist und nicht schon im Array ist.
Ich glaube, dass in meiner add-Methode, schon enthaltene Werte einfach überschrieben werden.
Ist das so? Wie kann sagen, laufe das Array durch, bis du ein leeres Feld findest und füge o dann hinzu?
Außerdem überschreibst Du in Deiner add-Methode im Fall, dass o nicht gefunden wird
mit Deiner for-Schleife alle Elemente des Arrays. Ich denke, dass ist nicht so
gewollt.
Fast! ;-) So wird o in alle Elemente eingefügt, die null sind.
Eher in etwa so:
[JAVA=23]
public boolean add(String o) {
if (contains(o) == false) {
for (int i = 0; i < array.length; i++) {
if(array == null) {
array = o;
return true;
}
}
return false;
} else
return false;
}[/code]
So wird false zurückgeliefert, wenn o schon enthalten ist und ebenso,
wenn das Array voll ist.
Ob o enthalten ist prüfe ich doch schon in der contains-Methode, oder? Das war jedenfalls beabsichtigt.
Also das Array hat 10 Stellen. Angenommen, es enthält schon 3 Werte und ich möchte jetzt einen vierten Wert einfügen. Funktioniert es mit dieser Methode, auch, dass der Wert an der leeren 4. Stelle eingefügt wird?
Ah, ich seh, du hast an dem Code was geändert. Jetzt erscheint es mir auch logisch. Danke!
Ob o enthalten ist prüfe ich doch schon in der contains-Methode, oder? Das war jedenfalls beabsichtigt.
Also das Array hat 10 Stellen. Angenommen, es enthält schon 3 Werte und ich möchte jetzt einen vierten Wert einfügen. Funktioniert es mit dieser Methode, auch, dass der Wert an der leeren 4. Stelle eingefügt wird?
Ah, ich seh, du hast an dem Code was geändert. Jetzt erscheint es mir auch logisch. Danke!
Dein neuer code sieht legitimm aus, loca.
Wieso probierst du es nicht einmal selbst aus, indem du das array kurz ausgibst?
Java:
println(array[i]);
in der innnersten if schleife die du da hast
P.S. die Bennenung/Logik deiner "contains" methode ist etwas irreführend.... if contanis == false ? Wenn man es liest, klingt es so, als ob es NICHTS enthält, wobei es bedeuted, DASS es etwas enthält.
if contains == true; wäre logischer (ist aber nur ein schönheitsfehler, finde ich)
Also das Array hat 10 Stellen. Angenommen, es enthält schon 3 Werte und ich möchte jetzt einen vierten Wert einfügen. Funktioniert es mit dieser Methode, auch, dass der Wert an der leeren 4. Stelle eingefügt wird?
Wenn das Array zuvor leer war ja. Sind allerdings irgendwann mehr als 3 Elemente hinzugefügt
und dann z.B. das Element an Stelle 2 "gelöscht" worden nicht mehr. Die Methode weist o immer
dem ersten gefundenen Null-Element zu.
P.S. die Bennenung/Logik deiner "contains" methode ist etwas irreführend.... if contanis == false ? Wenn man es liest, klingt es so, als ob es NICHTS enthält, wobei es bedeuted, DASS es etwas enthält.
if contains == true; wäre logischer (ist aber nur ein schönheitsfehler, finde ich)
Wieso ist die Benennung irreführend? Die Funktion contains(o), liefert true zurück
wenn das Element o enthalten ist, sonst false. Ist doch durchaus logisch und wird
allgemein so angewandt.
anstatt: if(contains(o)==false) kann man kürzer schreiben: if(!contains(o)).
Und naja, if(contains(o)==true) kann ebenfalls noch einfacher kürzer schreiben: if(contains(o)).
eine (if-)abfrage wird nur dann ausgeführt, wenn der Ausdruck darin true ist, dass braucht man nicht noch explizit mit [c]==true[/c] prüfen.
Wieso ist die Benennung irreführend? Die Funktion contains(o), liefert true zurück
wenn das Element o enthalten ist, sonst false. Ist doch durchaus logisch und wird
allgemein so angewandt.
Ich habe Kritik an der letzten else{ } schleife geübt (von contains(o)). Du bekommst ein false, wenn: o!=null ist. Das ist meiner Meinung nach nicht logisch:
Beispiel:
Wenn man nun einen gültigen Wert für String o übergibt, erfült man in Zeile 5 irgendwann die Bedingung, in Zeile 6 bekommt man ein "true"! (soweit ok) DANN geht die Methode aber weiter... es wird geprüft, ob o == null ist, was es natürlich nicht ist, da wir ja zuvor schon ein true bekommen haben (für einen eingegebenen Wert).
Also kommt: else { return false; }
Die Methode gibt immer ein false aus, auch wenn es ein true zuvor ausgibt... (oder es gibt eine Meldung aus mit: "O darf nicht null sein".
Korrigiert mich, wenn ich falsch liege^^ aber ich denke es ist so... und somit eben doch nicht logisch.
Wenn man nun einen gültigen Wert für String o übergibt, erfült man in Zeile 5 irgendwann die Bedingung, in Zeile 6 bekommt man ein "true"! (soweit ok) DANN geht die Methode aber weiter...
Warum geht die Methode dann weiter? return ist return. Springt aus der Methode und gibt ggf. einen Wert zurück. (Ausnahmen wie try-finally bestätigen die Regel. :bae