Fredde MannenMedlem sedan nov. 20013 498 inlägg
Har skrivt följande metod som jag vill skall göra en array större.
// Resize area.
private void resizeArray(Media[] pArray, int pSize) {
// size of the new array.
int oldSize = pArray.length;
// new array.
Media[] tmpArray = new Media[pSize];
int preserveLength = Math.min(oldSize, pSize);
// Copy content to temp array.
if(preserveLength > 0)
System.arraycopy(pArray,0,tmpArray,0,preserveLength);
mArray = tmpArray;
}
mArray kommer från följande:
public class MediaContainer {
private int i = 0;
private Media[] mArray = new Media[1]; // min array som skall ökas under programkörning.
// add an object to an array.
public void add(Media pObject) {
// Resize our array.
resizeArray(mArray,(mArray.length + 1));
// add our object to the array.
mArray[i] = pObject;
++i; // the new index.
}
}
Jag lägger till ett objekt i arrayn av typen Media, programmet funkar bara fint fram tills jag skapar den fjärde posten som skall in i arrayn, då får jag felet:
java.lang.ArrayIndexOutOfBoundsException: 3
Arrayn verkar inte bli större.. eller är det något jag missar här? är det något jag måste ta hänsyn till för att den skall göra arrayn större.
nitro2k01Medlem sedan aug. 20037 630 inlägg
Denna rad verkar lite misstänkt:
int preserveLength = Math.min(oldSize, pSize);
Om oldSize är mArray.length, och pSize är mArray.length+1, vilket värde returnerar då pSize? Math.max kanske är mer passande. Varför koden fallerar först vid fjärde elementet övergår dock mitt förstånd.
Och varför använder du inte den alldeles utmärkta klassen ArrayList?
Fredde MannenMedlem sedan nov. 20013 498 inlägg
nitro2k01 skrev:
Denna rad verkar lite misstänkt:
int preserveLength = Math.min(oldSize, pSize);
Om oldSize är mArray.length, och pSize är mArray.length+1, vilket värde returnerar då pSize? Math.max kanske är mer passande. Varför koden fallerar först vid fjärde elementet övergår dock mitt förstånd.
Och varför använder du inte den alldeles utmärkta klassen ArrayList?
Ja varför använder jag inte ArrayList .. ja varför inte .. :)
Fredde MannenMedlem sedan nov. 20013 498 inlägg
Löste problemet med att skriva om min resizeArray till
// Resize area.
private static Media[] resizeArray(Media[] pArray, int pSize) {
// new array.
Media[] temp = new Media[pSize];
// Copy content to temp array.
System.arraycopy(pArray,0,temp,0, pArray.length);
return temp;
}
Och ändra på add() metoden till
public void add(Media pObject) {
// Resize our array.
mArray = MediaContainer.resizeArray(mArray, i + 1);
// add our object to the array.
mArray[i] = pObject;
++i; // resize counter
}
Så nu funkade det utan att kasta fel.. och det löstes utan en ArrayList .. hehe..
spangoMedlem sedan juni 20006 147 inlägg
Att lägga till saker blir rätt långsamt för dig, eftersom du allokerar en ny array och kopierar över den gamla till den varje gång du lägger till nåt. Bättre att låta den växa med ett gäng element varje gång och sen bara utöka den när det behövs. Eller köra på en ArrayList som kan göra sånt åt dig, automatiskt ;)
Fredde MannenMedlem sedan nov. 20013 498 inlägg
spango skrev:
Att lägga till saker blir rätt långsamt för dig, eftersom du allokerar en ny array och kopierar över den gamla till den varje gång du lägger till nåt. Bättre att låta den växa med ett gäng element varje gång och sen bara utöka den när det behövs. Eller köra på en ArrayList som kan göra sånt åt dig, automatiskt ;)
Jo.. det var dock en rest. uppgift som en lärare vill att jag skulle åtgärda.. får inte använda arraylist..
men skulle kunna göra som du sa och bara utöka den när det behövs. :)
LimeMedlem sedan sep. 2001837 inlägg
OT
Fredde Mannen skrev:
Jo.. det var dock en rest. uppgift som en lärare vill att jag skulle åtgärda.. får inte använda arraylist..
men skulle kunna göra som du sa och bara utöka den när det behövs. :)
Varför kan inte lärare lära ut hur man SKA göra och sluta hålla på och hitta på en massa klurigheter. 90% av alla de som går en programmeringskurs behöver eller har inte intresset av att lära sig finlir långt ner i språket, t.ex. hur man effektivast skriver sin egen ArrayList-klass. Av de 10%-e som är kvar, kan redan hälften skriva sin egen ArrayList-klass och är bara där för att få poängen och de 5%-e som återstår borde aldrig ha släppts i närheten av ett programmeringsspråk från första början... ;)
Nä, men skämt å sido, det tar ett par, tre år att få ur nyexade programmerare vissa olater som lärare på gymnasier och högskolor lär ut...
Nu kommer jag att få stryk. ;)
Fredde MannenMedlem sedan nov. 20013 498 inlägg
Lime skrev:
Varför kan inte lärare lära ut hur man SKA göra och sluta hålla på och hitta på en massa klurigheter. 90% av alla de som går en programmeringskurs behöver eller har inte intresset av att lära sig finlir långt ner i språket, t.ex. hur man effektivast skriver sin egen ArrayList-klass. Av de 10%-e som är kvar, kan redan hälften skriva sin egen ArrayList-klass och är bara där för att få poängen och de 5%-e som återstår borde aldrig ha släppts i närheten av ett programmeringsspråk från första början... ;)
Nä, men skämt å sido, det tar ett par, tre år att få ur nyexade programmerare vissa olater som lärare på gymnasier och högskolor lär ut...
Nu kommer jag att få stryk. ;)
Ja, själv hade jag velat använda ArrayList.. mycket enklare hade det blivit och mycket mindre rader kod.. höhö.. :)
Nåja.. det är lite småkul i alla fall :)