我创建了一个二维数组列表,其中包含不同位置随机生成的数值。
public static int Prices[][] = new int[Cities.length][ItemNames.length];
public static List<int[][]> CityPrices = new ArrayList<int[][]>();
public static void NewDay()
{
for(int i = 0; i<Cities.length; ++i)
{
Prices[i] = PriceGenerator.ReturnPricesForCity(i);
//This method returns an array of random integers
}
CityPrices.add(Prices);
}
但是稍后当我想检索特定商品过去天数的价格历史记录时,它每天都会返回相同的值
int Prices[] = new int[GlobalVariables.CityPrices.size()];
String sTest = "";
for(int i = 0; i < Prices.length; ++i)
{
Prices[i] = GlobalVariables.CityPrices.get(i)[spinCity.getSelectedItemPosition()][spinItem.getSelectedItemPosition()];
sTest = sTest + Prices[i] + ",";
}
在本例中,sTest 返回的值连续五天为:6055,6055,6055,6055,6055。 例如,如果我添加一天,这些值将更改为新数字的范围,在本例中为:7294,7294,7294,7294,7294,7294,
请告诉我我做错了什么,因为过去 4 天我一直在试图解决这个问题,但没有成功。
最佳答案
CityPrices
列表中的每个元素都是相同的:在每种情况下,您都添加 Prices
二维数组。您的循环会修改 Prices[i]
,但不会更改 Prices
,它仍然是对同一二维数组的引用。
我认为您想象它将传递当前状态下的数组内容,但事实并非如此:它将数组的引用传递给 .add( )
方法,因此对数组的任何后续更改都将反射(reflect)在 CityPrices
的内容中。
如果在循环结束时您尝试
CityPrices.get(0) == CityPrices.get(1)
您会看到它返回true
。
关于Java - 从二维数组列表读取数据时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27128470/