Java - 从二维数组列表读取数据时遇到问题

标签 java android arrays nested-lists

我创建了一个二维数组列表,其中包含不同位置随机生成的数值。

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/

相关文章:

android - Proguard + RenderScript 支持库错误

java - java随机字符

javascript - 增加字符串中的 X

java - Micrometer 中的计数器线程安全吗

java - 如何将 SQLite 表行保存到数组中?

java - 如何确定java中的数据库约束冲突?

php - 遍历多个数组值以填充另一个数组中的桶的算法

java - 使用 jOOQ 使用正确的类型转换从 values() 中选择插入

android - 在Android中更改默认日期选择器的样式

java - 如何在android中将src设置为relativeLayout?