添加新数组时丢失最后一个数组元素

时间:2013-12-02 00:19:15

标签: java arrays

我遇到了丢失所有元素的问题,除了当前添加的元素,在我的数组中。我得到了正确的金额和长度,但我不能再引用旧元素了。

public class Lab7Model
{
    int ordersTotal;
    double[] priceArray;
    double prices_d, pricetotal_d, sum, priceavg_d;

public void statscompute()
{
    ordersTotal = ordersTotal + 1;
    c.statsframe.setTitle("Statistics for ("+ordersTotal+") orders.");
    prices_d = Double.parseDouble(c.pricedisplay);
    priceArray = new double[ordersTotal];

    priceArray[ordersTotal-1] = prices_d;

    for (int x = 0; x < priceArray.length; x++)
    {
        sum = sum + priceArray[x];
    }
    priceavg_d = sum/priceArray.length;
}
}

2 个答案:

答案 0 :(得分:0)

每次按行<{1}}

调用时,都会重新创建数组
statscompute()

您应该使用priceArray = new double[ordersTotal]; ,然后执行

List<Double>

而不是

priceArray.add(prices_d)

或者使用priceArray[ordersTotal-1] = prices_d; 做一些技巧如果你真的必须使用数组而不是列表(我想,这不是你的情况,使用System.arraycopy()是最好的方法)

答案 1 :(得分:0)

priceArray = new double[ordersTotal];

这会创建一个全新数组,当然所有元素都设置为0.

您可以将旧数组中的元素复制到新数组中,如下所示:

double[] newArray = new double[ordersTotal];
for(int k = 0; k < ordersTotal - 1; k++)
    priceArray[k] = newArray[k];
priceArray = newArray;

或使用System.arraycopy。

或者您可以通过进行以下更改来使用可以为您处理此问题的集合:

  • 导入java.util.List和java.util.ArrayList
  • double[] priceArray;更改为List<Double> priceList = new ArrayList<>();
  • 删除priceArray = new double[ordersTotal];
  • priceArray[ordersTotal-1] = prices_d;更改为priceList.add(prices_d);
  • priceArray.length更改为priceList.size()
  • priceArray[x]更改为priceList.get(x)