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.
Ich möchte gerne eine Methode Schreiben, womit ich ein übergebenes Element in einem bestehenden Array hinzufügen kann.
meine idee ist zuerst ein ArrayObjekt erzeuge , dann und dann zuerst alle Alemente des ersten Arrays da rin tun dann das letzte element.
Java:
public ArrayList hinzufügen(int newElement) {
ArrayList[] newArray = new ArrayList[data.length + 1];
for(int i = 0; i < data.length;i++){
}
}
Wie kann ich nun den letzte schritt, also die elemenete in newArray einfügen???
das alte Array bleibt ja unverändert , Daten die du neu hinzufügst werden lediglich hinten an die liste angehängt, ausser du weist ihr einen festen Index zu.
Wenn du z.B "Hallo", "Welt" bereits hinzugefügt hast,
belegt "Hallo" index[0]
und "Welt" index[1]
wenn du jetzt mit
Code:
deineArrayList.add("irgendwas")
hinzufügst landet es in der List auf index[2]
das ist ja der Sinn von ArrayList im Vergleich zu einem Normalen Array, ebend das diese sich automatisch erweitert und keine festgelegte länge hat .
Desweiteren sollte man bei einer ArrayList den zu speichernden Datentyp angeben z.B
Code:
ArrayList<String> MeineArrayList = new ArrayList<String>();
Deine ArrayList-Deklaration ist falsch. Du erzeugst ein Array aus ArrayListen. Eine ArrayList hat aber eine dynamische Länge und braucht deshalb keine vorgegebene Größe.
Wie heißt denn dein bestehendes Array?
Beispiel:
Java:
class ArrayTest {
private ArrayList<int> list;
public ArrayTest() {
this.list = new ArrayList<int>();
}
public void addElement(int newElement) {
this.list.add(newElement);
}
}
Fertig. Nicht so ein kaputtes Konstrukt verwenden, wie du es gerade tust.
Alternativ, so wie du es haben willst:
Java:
public ArrayList<int> append(ArrayList<int> list, int newElement) {
if(newElement <0){
return null;
}
list.add(newElement)
return list;
}
Also mein Rückgabewert ist ja vom typ ArrayList. und meine daten vom typ int[]. wie kann ich jetzt newArray zurückgeben.
Java:
public class ArrayList {
private int[] data;
public ArrayList() {
this.data = new int[0];
}
public ArrayList append(int newElement) {
if(newElement <0){
return null;
}
int[] newArray = new int[data.length + 1];
for(int i = 0; i < data.length;i++){
newArray[i] = data[i];
}
newArray[data.length + 1]=newElement;
return ...;
}
public void main(String[] args) {
int[] data = { 2, 3, 5, 7};
append(8);
}
das ist das was ich implementiert habe. ich will ja wenn ich append aufrufe das bekomme [2,3,5,7,8]
dazu muss ich ja newArray rütuck geben, aber wenich return newArray schreibe dann wiill er das nicht weil meine rückgabe wert vom Typ ArrayList ist. wie kann ich das problem beheben??
Deine geforderter Rückgabewert stimmt eben nicht mit dem zurückgegebenen Wert überein.
Statt public ArrayList append einfach public int[] append schreiben.
PS: Deine Klasse solltest du nicht ArrayList nennen, da dieser Name schon für eine von Java definierte Klasse vergeben ist.
1) ArrayList ist eine Klasse, die bereits in java.util implementiert ist (ArrayList (Java Platform SE 6)). Hier gibt's also Namenskonflikte, daher auch die Verwirrung bei den anderen hier. Kannst du die nicht umbenennen, bzw. ist in der Aufgabenstellung verlangt, dass du diese Klasse selbst implementieren musst?
2) in deinem Konstruktor initialisierst du dein Array mit einer Länge von 0. Hier kannst du also nichts mehr hineinpacken. Du wirst zwangsläufig beim Einfügen einen IndexOutOfBoundsException bekommen.
3) wenn du append aufrufst, woher weißt du dann, an welcher Position im Array du das neue Element einfügen sollst? Lösung wäre hier (vorausgesetzt es bleibt bei einem Array und nicht einer java.util.ArrayList) eine Klassenvariable, in dem du den aktuellen Index speicherst. Bei jedem Aufruf von append wird an der Index-Stelle eingefügt und anschließend der Index hochgezählt.
Hi,
zu 2): der Konstruktur erzeugt eine Leere List.
zu 3): wie gesagt ich muss das neue Element am ende einfügen. das soll heissen, ich koppiere die bestehende Liste und dann füge das new Element am ende der list
Bsp:vorhandene Liste: [2,3,1], newElement 4: append(4) --> [2,3,1,4]
Nur, um mal ein bisschen deine Verwirrung aufzuklären, da ja hier doch viel durcheinander geworfen wird: Dein Code stimmt soweit FAST, nur kannst du nicht newArray[data.length + 1] = newElement; aufrufen. Wenn das Array die Länge L hat, ist der letzte Index K - 1, also in diesem Fall: newArray[newArray.length - 1] = newElement;
Nun musst du allerdings noch irgendwas mit newArray machen. Um zu wissen, was, brauchen wir die Aufgabenstellung. Denkbar wäre allerdings so etwas: data = newArray;
So weit so gut. Nun zu dem "return null;". Auch hier brauchen wir die Aufgabenstellung. Denkbar wäre hier:
[c]return this;[/c]
[c]return new ArrayList(newArray);[/c]
Je nachdem, was die Methode genau machen soll. => Aufgabenstellung.
Dass "append" static sein soll liegt daran, dass du nicht einfach "append" aufrufen kannst, ohne zu sagen, was denn genau "append" ausführen soll. Wenn man mehrere ArrayList'en hat, weiß das Programm ja dann nicht mehr, welche du meinst, oder allgemein, dass du überhaupt ArrayList'en meinst. Das musst du dem Programm sagen, und zwar über die Punktnotation. Aber dafür brauchen wir erst mal eine Liste, die kriegen wir so:
Java:
public static void main(String[] args) {
int[] data = { 2, 3, 5, 7};
int newElement = 8;
/*Hier*/ ArrayList list = new ArrayList(data); /*Hier*/
/*Hier*/ list /*Hier*/.append(newElement);
}
So. Ich habe allerdings hier den Verdacht, dass du einen Fehler begehst, was die Umsetzung der Aufgabenstellung angeht. Wenn du nur an "data" anhängen willst, wäre so eine Methode sinnvoller:
Java:
public int[] append(int[] data, int newElement) {
int[] newArray = new int[data.length + 1];
System.arraycopy(data, 0, newArray, 0, data.length);
newArray[newArray.length - 1] = newElement;
return newArray;
}
Sollten jetzt noch Fragen bestehen, sag einfach bescheid.
PS: Die Verwirrung in dem Thema hier liegt daran, dass java schon eine Klasse "ArrayList" besitzt, diese allerdings auch noch generisch ist, (was das genau ist muss dich denke ich noch nicht interessieren), weshalb jeder hier mit spitzen Klammern <> (teilweise auch noch falsch) rumfuchtelt. Methoden wie "add", "set" und "get" beziehen sich hier meißtens auf eben diese Klasse, java.util.ArrayList und haben somit gar nichts mit deinem Problem zu tun.
PPS: Ich hab ja total die letzten 10 Antworten überlesen... Das meiste wurde schon gesagt... Ich lass es aber trotzdem mal stehen.