2017-09-04 1 views
0

En cours de traitement, j'essaie de créer une ArrayList de IntLists de sorte que le nombre initial d'éléments dans ArrayList soit variable pour commencer (mais je ne le changerai pas dans le code) et le nombre des éléments dans IntList est initialement 0 mais sera ajouté et modifié dans le code. Mon code est un jeu Ladder japonais dans lequel ArrayList est constitué de Ladders, chacun ayant une IntList contenant des "Rungs" qui sont des composants int qui correspondent à un emplacement Y sur l'échelle.Modification d'entrées dans ArrayList de 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); 
} 

Donc mon problème est que addRung() semble ajouter 50 à chaque élément DELA ArrayList et « impression (échelles); » sorties ...

[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 ]] 

Y a-t-il une meilleure façon de s'y prendre entièrement ou est-ce que je fais quelque chose de mal?

I inclus une image de ce que mon code est ... fournir en sortie It should be a single rung at location 50 but it is 9 rungs at 50.

+1

Vous créez une seule IntList en l'ajoutant 50 fois à ArrayList. Vous avez besoin de 50 IntLists différentes. –

+0

Comment pourrais-je écrire ma fonction addRung() pour faire cela? –

Répondre

0

S'il vous plaît bien réfléchir à exactement ce que ce code fait:

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

Vous êtes ici d'ajouter une nouvelle IntList à votre LaddersArrayList. Ensuite, vous effacez temp et ajoutez-y 0, puis vous définissez l'index (que vous venez d'ajouter un nouveau IntList) à temp, qui remplace le nouveau IntList que vous venez d'ajouter. En d'autres termes, vous ajoutez temp à tous les index de ArrayList. C'est juste un tas de références à la même IntList, ce qui explique pourquoi lorsque vous ajoutez une valeur à un index, il ajoute la valeur à chaque index.

Pour résoudre ce problème, vous devez vous débarrasser complètement de votre variable temp. Ajoutez simplement un nouveau IntList à chaque index, puis utilisez la fonction get() pour obtenir le IntList à partir de l'index dans le ArrayList. Il ressemblerait à ceci:

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

Comme une note de côté, vous devriez vraiment prendre l'habitude de debugging your code avant de poser une question. Quelques déclarations imprimées auraient grandement contribué à vous aider à comprendre ce qui se passe. Ensuite, si vous êtes bloqué, vous pouvez publier un MCVE au lieu d'extraits déconnectés.

Vous devez également essayer d'utiliser des conventions de dénomination standard: les variables doivent commencer par une lettre minuscule.

+0

Merci, Kevin. Je suis nouveau au codage et c'est ma première question. Je serai sûr d'inclure plus d'informations la prochaine fois. –

+0

@MaxwellGreene Pas de problème. Notez que vous pouvez [accepter les réponses] (https://stackoverflow.com/help/someone-answers) si vous les trouvez utiles. Codage heureux. –