次のようなクラスAがあるとします
public class A {
protected static float[] floatArray = null;
protected static Map<Integer, float[]> history = new HashMap<Integer,float[]>();
protected static Integer historyCount = 0;
public void runEverySecond(Populator objPopulator) {
floatArray = objPopulator.getValues();
history.put(historyCount, floatArray);
historyCount++;
}
}
クラスBは次のようになります
public class B {
private A objA;
protected final static Populator objPopulator = new Populator();
public void run(Integer numOfTime) {
for(int i = 0; i < numOfTime; i++)
objA.runEverySecond(objPopulator);
}
}
クラスポピュレータは次のようになります
public class Populator {
protected float[] randomValues = new float[2];
public float[] getValues() {
randomValues[0] = //some new random float value generated for every call
randomValues[1] = //some new random float value generated for every call
return randomValues;
}
}
主な外観を含むクラスは次のとおりです
public class MainClass {
public static void main() {
final B objB = new B();
objB.run(10);
}
}
これが私が直面している問題です。マップ履歴には、マップ内のすべてのエントリに対して同じ値が含まれています。objPopulator.getValues() メソッドによって生成されたすべての値を Map 履歴に保存したいと考えています。どうすればいいのですか?
いくつかの助けは本当にかなりのものです。前もって感謝します :)
クラス A で表される実際のコード (無関係なコードを削除したもの)
public class MySuperAgent implements Agent {
protected static float[] marioFloatPos = null;
protected static Map<Integer, float[]> levelRecord = new HashMap<Integer, float[]>();
protected static Integer mapCount = 0;
/* protected static int testCount = 0;
protected static float[] testx = new float[2];
protected static float[] testy = new float[2];*/
@Override
public void integrateObservation(Environment environment) {
marioFloatPos = environment.getMarioFloatPos();
levelRecord.put(mapCount, marioFloatPos);
mapCount++;
/*if(testCount < 2){
testx[testCount] = marioFloatPos[0];
testy[testCount] = marioFloatPos[1];
testCount++;
} else {
testCount = 0;
}*/
}
}
クラス C は、環境オブジェクトを表すクラス B と同様のクラスから integrateObservation メソッドが呼び出されます。コメント ブロック内のコードを使用すると、マリオの x と y の過去の 2 つの値のみを記録できます。マリオの x と y のすべての値を保存する方法が必要です :)