2017-09-04 1 views
0

Bei der Verarbeitung versuche ich eine ArrayList von IntLists so zu erstellen, dass die anfängliche Anzahl von Elementen in der ArrayList von Anfang an variabel ist (aber ich werde es nicht im Code ändern) und die Nummer Die Anzahl der Elemente in der IntListe ist anfangs 0, wird jedoch innerhalb des Codes hinzugefügt und bearbeitet. Mein Code ist ein japanisches Ladder-Spiel, bei dem die ArrayList aus Leitern besteht, von denen jede eine IntList enthält, die "Rungen" enthält, die int-Komponenten sind, die einer Y-Position auf der Leiter entsprechen.Ändern von Einträgen in ArrayList von IntLists

ArrayList <IntList> Ladders = new ArrayList <IntList>(); 
IntList temp = new IntList(); 

void setup() 
{ 
    for(int i=0;i<numRails-1;i++) 
    { 
    Ladders.add(new IntList()); 
    temp.clear(); 
    temp.append(0); 
    Ladders.set(i,temp); 
    } 
} 
void addRung (int spot) 
{ 
    temp.clear(); 
    temp = Ladders.get(spot); 
    temp.append(50); 
    //note that 50 is an arbitrary number, it would be given by MouseY 
    Ladders.set(spot,temp); 
    print(Ladders); 

    //I have also tried... 
    Ladders.get(spot).append(50); 
} 

Also mein Problem ist, dass addRung() 50 auf jedes einzelne Element OFTHE Arraylist und hinzuzufügen scheint "print (Leitern);" Ausgänge ...

[IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ]] 

Gibt es einen besseren Weg, dies vollständig zu tun oder mache ich etwas falsch?

enthalten ich ein Bild von dem, was mein Code ausgibt, ... It should be a single rung at location 50 but it is 9 rungs at 50.

+1

Sie erstellen eine einzelne IntList und fügen sie der ArrayList 50 Mal hinzu. Sie benötigen 50 verschiedene IntListen. –

+0

Wie könnte ich meine addRung() Funktion schreiben, um das zu tun? –

Antwort

0

Bitte denken Sie sorgfältig über genau das, was dieser Code tut:

for(int i=0;i<numRails-1;i++) 
    { 
    Ladders.add(new IntList()); 
    temp.clear(); 
    temp.append(0); 
    Ladders.set(i,temp); 
    } 

Hier sind das Hinzufügen eines neuen IntList zu Ihre LaddersArrayList. Dann löschen Sie temp und fügen 0 hinzu, und dann setzen Sie den Index (den Sie gerade hinzugefügt haben, einen neuen IntList zu) temp, die die neue IntList ersetzt, die Sie gerade hinzugefügt haben.

Mit anderen Worten, Sie fügen temp zu jedem Index der ArrayList hinzu. Das sind nur ein paar Verweise auf das gleiche IntList, weshalb, wenn Sie einen Wert zu einem Index hinzufügen, fügt es den Wert zu jedem Index hinzu.

Um dies zu beheben, müssen Sie Ihre temp Variable vollständig loswerden. Fügen Sie einfach einen neuen IntList zu jedem Index hinzu und verwenden Sie dann die get()-Funktion, um den IntList aus dem Index in ArrayList abzurufen. Es würde wie folgt aussehen:

ladders.get(index).append(value); 

Als Randbemerkung, sollten Sie es sich zur Gewohnheit debugging your code wirklich vor eine Frage zu stellen. Ein paar Druckanweisungen hätten viel dazu beigetragen, herauszufinden, was vor sich geht. Dann, wenn Sie stecken bleiben, können Sie eine MCVE anstelle von getrennten Schnipsel posten.

Sie sollten auch versuchen, Standardnamenskonventionen zu verwenden: Variablen sollten mit einem Kleinbuchstaben beginnen.

+0

Danke, Kevin. Ich bin neu in der Codierung und das ist meine erste Frage. Ich werde sicher sein, dass Sie beim nächsten Mal mehr Informationen hinzufügen. –

+0

@MaxwellGreene Kein Problem. Beachten Sie, dass Sie [Antworten akzeptieren] (https://stackoverflow.com/help/someone-answers) akzeptieren können, wenn Sie sie hilfreich finden. Glückliche Kodierung. –

Verwandte Themen