Essah (24.11.2013)
-
23.11.2013, 14:16 #1
- Registriert seit
- 19.11.2011
- Beiträge
- 2.128
Thanked 1.937 Times in 1.180 PostsArray befüllen ohne immer den Index anzugeben
Hallo.
Habe hier einen Code, der in der Zeileblt[blt.length] = new Verein(a, b, c , d);
fehlschlägt.
Vorhaben: Dem Array ohne immer den Index mitzugeben , ein neues Element hinzufügen. Es muss bei einem Array bleiben, darf keine List nehmen.
Fehler: java.lang.ArrayIndexOutOfBoundsException.
public class VereinsManager
{
private Verein[] blt = new Verein[18];
{
ad("BvB" , 12, 19, 44);
for(Verein d : blt)
{
System.out.println(d.getName() + " " + d.getGames() + " " + d.getRank() + " " + d.getPoints());
}
}
public VereinsManager(){}
public void ad(String a, int b, int c, int d)
{
blt[blt.length] = new Verein(a, b, c , d);
}
Kann mir jemand sagen, warum das fehlschlägt?
-
23.11.2013, 14:33 #2
- Registriert seit
- 15.11.2011
- Beiträge
- 8.014
- Blog Entries
- 5
Thanked 9.385 Times in 3.223 PostsAW: Array befüllen ohne immer den Index anzugeben
Weil der Index 0-Basierend ist. Element 1 hat den Index 0, und das letzte Element 18 somit den Index 17. Da dein Array eine Länge von 18 hat, greifst du mit Index 18 auf das 19. Element zu, welches es nicht gibt. Daher die Exception. Wenn du variabel auf das letzte Element zugreifen willst, musst du von der Länge des Arrays eins subtrahieren. Möchtest du generell Elemente hinzufügen ohne jedes mal den Index angeben zu müssen, verwende einen Zähler oder direkt einen dynamischen Array.
Damit könntest du dann so etwas machen:
ArrayList<Verein> vereine = new ArrayList<Verein>();
vereine.add(new Verein(a,b,c,d));
Und für Java haben wir einen eigenen BBCode (java statt code, wird im erweiterten Editor auch oben angezeigt), mit entsprechend passendem Syntaxhighlighting für Java, bitte zukünftig diesen nutzen. Habs ediert.
-
The Following User Says Thank You to DMW007 For This Useful Post:
-
23.11.2013, 14:43 #3
AW: Array befüllen ohne immer den Index anzugeben
Wie mein Vorposter bereits richtig erwähnte, fangen Indices bei 0 an. Der Index für das letzte Element im Array lautet also array.length - 1.
Da du keine Listen verwenden darfst, kannst du dir eine Hilfsmethode oder -klasse schreiben, wenn dir die Angabe von Indices so nervt.
Eine kleine Klasse DynamicArray könnte so aussehen:
import java.lang.reflect.Array;
public class DynamicArray<T> {
public static void main(String[] args) {
DynamicArray<Integer> da = new DynamicArray<>(Integer.class, 5);
for (int i = 0; i < 5; ++i) {
da.add(i*i);
System.out.println("Element at index " + i + ": " + da.get(i));
}
// Eigentlich ungültigen Index 5 testen:
da.add(100);
System.out.println("Element at index 5:" + da.get(5));
}
// ---------------------------------------------------------------------
private T[] array;
private Class<T> clazz;
private int capacity;
private int currentIndex;
public DynamicArray(Class<T> clazz, int capacity) {
this.clazz = clazz;
array = (T[]) Array.newInstance(clazz, capacity);
this.capacity = capacity;
currentIndex = 0;
}
public final void add(T element) {
checkNewCapacityIsNeeded();
array[currentIndex] = element;
++currentIndex;
}
public final T get(int i) {
if (i < 0 || i >= capacity)
throw new IllegalArgumentException("invalid index: " + i);
return array[i];
}
private final void checkNewCapacityIsNeeded() {
if (currentIndex == capacity) {
T[] newArray = (T[]) Array.newInstance(clazz, ++capacity);
for (int i = 0; i < capacity-1; ++i) {
newArray[i] = array[i];
}
array = (T[]) newArray.clone();
}
}
}
Für deinen kleinen Fall dürfte eine Hilfsmethode allerdings ausreichen. Speicher dazu den aktuellen Index und inkrementiere denselbige, wenn ein Element hinzugefügt wird. Vergiss aber nicht zu überprüfen, ob der Index gültig ist.
-
The Following User Says Thank You to Nuebel For This Useful Post:
Essah (24.11.2013)
-
24.11.2013, 15:11 #4
- Registriert seit
- 08.01.2012
- Beiträge
- 279
- Blog Entries
- 1
Thanked 69 Times in 45 PostsAW: Array befüllen ohne immer den Index anzugeben
Wenn du den Index nicht immer angeben willst würde doch eigentlich etwas in dieser Art schon reichen:
Verein[] Vereine = new Verein[18];
int ArrayPosition = 0;
public void Hinzufuegen(Verein derVerein){
Vereine[ArrayPosition] = derVerein;
ArrayPosition++;
}
-
The Following User Says Thank You to Essah For This Useful Post:
Ähnliche Themen
-
Computer immer laufen lassen ohne Unterbrechung geht das?
Von Sido im Forum Internet und TechnikAntworten: 14Letzter Beitrag: 03.02.2014, 16:35 -
Dezimalzahlen im Array
Von Devon im Forum PHPAntworten: 13Letzter Beitrag: 04.07.2013, 20:08 -
Knuddels Band-Index?
Von Chrissy im Forum Knuddels AllgemeinAntworten: 3Letzter Beitrag: 11.05.2013, 22:06 -
[Problem] PC drückt immer Home Taste btw kommt immer am Desktop..
Von Klaus Bukkake im Forum WindowsAntworten: 3Letzter Beitrag: 02.05.2013, 22:48 -
Index mit Passwort schützen?
Von x BoooM x im Forum WebmasterAntworten: 6Letzter Beitrag: 23.01.2012, 22:27
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.