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

Java 添加最新数组元素时丢失最后一个数组元素,java,arrays,Java,Arrays,除了当前添加的元素,我的数组中的所有元素都丢失了。我得到了正确的总和和长度,但我不能再引用旧元素了 public class Lab7Model { int ordersTotal; double[] priceArray; double prices_d, pricetotal_d, sum, priceavg_d; public void statscompute() { ordersTotal = ordersTotal + 1; c.statsf

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

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;
}
}
公共类Lab7Model
{
int ordersTotal;
双数组;
双倍价格、总价、总价、平均价格;
公共无效StatCompute()
{
ordersTotal=ordersTotal+1;
c、 setTitle(“订单的统计数据(“+ordersTotal+”));
价格=Double.parseDouble(c.pricedisplay);
priceArray=新的双精度[ordersTotal];
priceArray[ordersTotal-1]=价格;
对于(int x=0;x
每次按行调用
statcompute()
时,都要重新创建数组

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

priceArray.add(prices_d)
而不是

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

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

您可以将元素从旧数组复制到新数组中,方法如下:

double[] newArray = new double[ordersTotal];
for(int k = 0; k < ordersTotal - 1; k++)
    priceArray[k] = newArray[k];
priceArray = newArray;
double[]newArray=newdouble[ordersTotal];
for(int k=0;k
或者使用System.arraycopy

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

  • 导入java.util.List和java.util.ArrayList
  • 更改
    double[]价格数组
    to
    List priceList=new ArrayList()
  • 删除
    priceArray=newdouble[ordersTotal]
  • 更改
    priceArray[ordersTotal-1]=价格
    价格表。添加(价格)
  • pricelarray.length
    更改为
    priceList.size()
  • pricelarray[x]
    更改为
    priceList.get(x)

考虑制定一个计划。您没有添加任何您正在“设置”某个位置的值。我按照您的步骤操作--谢谢。第一次执行生成正确的和(比如4.0)和平均值(4.0/1=4.0)。第二次执行(添加5.5)将产生不正确的总和(13.5),从而产生不正确的平均值(6.75,而不是4.75)。public void statcompute(){ordersTotal=ordersTotal+1;c.statsframe.setTitle(“订单的统计数据”);prices_d=Double.parseDouble(c.pricedisplay);priceAcc.add(prices_d);for(int x=0;xdouble[] newArray = new double[ordersTotal]; for(int k = 0; k < ordersTotal - 1; k++) priceArray[k] = newArray[k]; priceArray = newArray;