我正在编写一个程序来收集排序算法的计数器结果。我将值存储在JSONObject中,以便我可以计算平均值等等。
public void addCounters(String sortName, Integer arraySize, long[] counters){
results.getJSONObject(sortName).getJSONObject("testresults").accumulate(arraySize.toString(), counters);
System.out.println(results);
}
如您所见,它应该将每个结果附加到适用于它的键。
第一个输出正确..
{“inSort”:{“repetitionspertest”:100,“description”:“Best Case”,“numofcounters”:2,“testresults”:{“1000”:[998,0]}}}
第二个输出正确添加..
{“inSort”:{“repetitionspertest”:100,“description”:“Best Case”,“numofcounters”:2,“testresults”:{“1000”:[[998,0],[998,0] ]}}}
但是当添加新密钥时,它会更改所有数组。即使是不同的钥匙......
{“inSort”:{“repetitionspertest”:100,“description”:“Best Case”,“numofcounters”:2,“testresults”:{“1000”:[[1998,0],[1998,0] ]], “2000”:[1998,0]}}}
您可以看到键“1000”中的值正在更改为1998而不是998。 我甚至尝试将自己的等价物写入.accumulate()方法,但无济于事。
我假设这与在内存中引用相同的数组有关,但我不知道如何解决这个问题!
请有人提出解决方案吗?
提前致谢!
答案 0 :(得分:0)
问题在于调用addCounters()
的方法。您在参数long[] counters
中传递的引用正在初始化一次到new long[2]
并错误地重复使用。每次执行排序算法时,必须将变量初始化为新的长数组。