2017-02-01 3 views
1

Ich habe einen 2DArraylist als:Array Werte außerhalb der Schleife ändern - Java

private ArrayList<double[]> allNeuronsParams = new ArrayList<double[]>(); 

I-Werte versuche in einer Schleife, um es zuzuweisen:

for (int i = 0; i < getTotalNeuronNum(); i++) { 

     allNeuronsParams.add(defaultParamCase1);  //this is fine 

     setNeuronParam(i, 0, (double)NMassociatedNum); //this is fine 

     setNeuronParam(i, 1,extractedNeuronTypes[i]); //this is the problem 
    } 

Das Problem ist mit meiner letzten Aufgabe innerhalb der Schleife:

 setNeuronParam(i, 1,extractedNeuronTypes[i]); 

Diese Zeile ordnet Werte vom Array extractedNeuronTypes dem zweiten Index jeder Zeile von allNeuronsParams 2-D ArrayList über die Funktion setNeuronParam(row, index, value) zu.

Wenn ich Werte innerhalb der Schleife drucke, ist alles korrekt. Aber wenn ich nach der Schleife eine Druckanweisung einfüge, sind die Werte nicht mehr korrekt.

Die Werte, die gedruckt werden, sind alle 3. Dies ist der Standardwert für das Array extractedNeuronTypes. Vor meiner for-Schleife rufe ich eine andere Funktion auf, öffne eine Datei und lese neue Werte in dieses Array - nicht für alle Indizes, aber für einen Teil von ihnen ändern sich die Werte. Zum Beispiel ändern sich Werte von Standardwerten von {3, 3, 3, 3} zu neuen Werten von {3, 2, 1, 3}.

Aus irgendeinem Grund wird nur auf die {3, 3, 3, 3} zugegriffen. Noch einmal drucke ich Werte innerhalb der Schleife und die richtigen Zahlen {3, 2, 1, 3} werden der 2-D ArrayListe zugewiesen.

Aber hier ist das, was ich nach der Schleife bekommen - fett Zahlen sind falsch, alles andere ist in Ordnung:

Meine Parameter sind: 1,0, 3.0, -1,0, -2,345, 1,0, 1.432.345,1, -13456,0, -1.4, 2,000003, 2,000003, 2,000003, 2,000003

My Parameter sind: 1.0, 3.0 , -1.0, -2,345, 1,0, 1432345,1, -13456,0, -1.4, 2,000003, 2,000003, 2,000003 , 2.000003

My Parameter sind: 1.0, 3.0 , -1.0, -2,345, 1,0, 1432345,1, -13456,0, -1.4, 2,000003, 2,000003, 2,000003, 2,000003

My Parameter sind: 1.0, 3.0 , -1.0, -2,345, 1,0, 1.432.345,1, -13.456,0, -1,4, 2,000003, 2,000003, 2,000003, 2,000003

Könnte jemand sehen, was ich hier falsch bin?

Vielen Dank.

+0

Was ist das Hauptproblem? Das ist nicht die richtige Art, Fragen zu stellen ... –

+0

Ist es normal, dass alle anderen Werte identisch sind? Sind Sie sicher, dass der Wert korrekt gelesen wurde (haben Sie es ausgedruckt, um sicher zu gehen)? – AntonH

+0

Hallo, es tut mir leid - zum ersten Mal eine Frage zu stellen! Ich weise einer Arraylist Werte innerhalb einer Schleife zu, und ein Teil davon ändert sich außerhalb der Schleife. – fatima

Antwort

0

Es sieht so aus, als ob alle Zeilen auf dasselbe Array verweisen (defaultParamCase1).

statt

allNeuronsParams.add(defaultParamCase1); 

machen Sie eine tiefe Kopie defaultParamCase2 schaffen sollte, und fügen Sie diese Kopie an die Arraylist

+0

Werte von Double-Array defaultParamCase1 sind innerhalb einer anderen Methode gesetzt und ich setze Index 0 und 1 auf -1 dort - defaultParamCase1 [0] = -1; \t defaultParamCase1 [1] = -1; Also sollte nicht -1 anstatt 3 gedruckt werden, wenn das der Fall ist? – fatima

+0

könnten Sie die setNeuronParam-Methode posten? Diese –

+0

ist die Methode: 'public void setNeuronParam (int neuronIndex, int paramIndex, Doppel paramValue) { \t \t \t \t allNeuronsParams.get (neuronIndex) [paramIndex] = paramValue; \t} ' – fatima

0

OK - Vielen Dank allen für Ihre Hilfe.Ich habe endlich herausgefunden, was das Problem war. Einige von euch haben das tatsächlich erwähnt, obwohl es einige Zeit gedauert hat, es herauszufinden.

Ich wollte das gleiche Array mehrere Zeit zu meinem ArrayList hinzufügen; Mir war jedoch nicht bewusst, dass wir selbst in diesem Fall für jede Zeile der ArrayListe einen neuen Speicherbereich erstellen müssen, da meine ArrayList 2-D ist.

am Anfang meiner Methode So habe ich die folgende Zeile:

allNeuronsParams.add(new double[getNumOfParams(defaulParamFilePath)+2]);

Vor diesem ich ein Array wurde mit und ich fügte hinzu, dass ein Array mehrere Male, so dass alle Verweise auf die Zeige wurden Das gleiche Array und nur die Werte der letzten Iterationen wurden gespeichert und gedruckt.

Verwandte Themen