将数据插入未知长度的java数组

将数据插入未知长度的java数组,java,drjava,Java,Drjava,我正在为收据制作程序,由于有多个项目,数组长度未知。这是我的代码: public static void main (String str[]) throws IOException { Scanner scan = new Scanner (System.in); //Entering Input int mult = 1; double price = 0; double y = 0; int l = 1; double [] list

我正在为收据制作程序,由于有多个项目,数组长度未知。这是我的代码:

public static void main (String str[]) throws IOException {
    Scanner scan = new Scanner (System.in);
    //Entering Input
    int mult = 1;
    double price = 0;
    double y = 0;
    int l = 1;
    double [] list = new double[l];
    while(mult != 0){
      if (mult != 0)
        System.out.println("Please Enter the Cost of the Item: ");
        y = scan.nextDouble();
        list[l]= y;
        l++;
      System.out.println("More than one item? (1 = yes 0 = no) ");
      mult = scan.nextInt();
      if (mult != 0)
        price += y;
    }

当我运行它时,我输入项目的成本并得到一个错误。

如果我是你,我会使用数组列表。它是一种可以使用的动态数据结构,而不是必须定义元素数量的典型数组。您可以执行以下操作:

ArrayList<Double list = new ArrayList<Double>();
list.add(y); 

ArrayList没有长度未知的数组。Java中任何数组(任何类型)都有字段长度

但实际上这不是你的问题;因为您根本没有使用传递给方法的数组。本质上,您要问的是如何对未知大小的输入使用数组

有两个答案:

  • 正如BlackHatSamurei所建议的,您可以使用
    List number=new ArrayList()
    -在添加其他元素时动态增长的现有类[您一直在使用这些类,并且只有在实例化具体对象时才使用特定的ArrayList实现]
  • 如果这是关于学习的:您可以实现自己版本的列表。含义:您创建了一个使用数组存储数据的类,并且每当您想要添加数组可以容纳的更多元素时;创建一个新的、更大的数组,并将所有数据复制到该数组中
  • ArrayList
    正如其他人所建议的,你应该使用,特别是,更具体地说是

    普通数组的长度是固定的。它不生长也不收缩。若要添加超出其容量的项,请创建一个新的更大数组,并复制现有项和新项,最后删除原始数组。
    ArrayList
    由数组支持,但可以增长。实际上,备份阵列实际上并没有增长,它处理我刚才代表您提到的细节:监视阵列以检测何时已满,然后创建一个新阵列,复制项目

    如果这是家庭作业,你的指导老师可能希望你了解这个琐事的细节,在这种情况下,我给你的答案是:创建一个新数组,复制项目,添加新项目,替换原始数组

    要使用
    集合
    (请参见),您需要继续使用实际对象。Java有原语来帮助程序员从C编程过渡,但类和对象才是Java真正的意义所在。相当于
    double
    原语的类为


    错误是什么?您可以使用
    ArrayList
    保存长度未知的数据。是的,您应该使用
    ArrayList
    List<Double> costs = new ArrayList<>();
    // … get your inputs from user and add each price-item to list …
    costs.add ( y );
    
    List<BigDecimal> costs = new ArrayList<>();
    …
    BigDecimal bd = new BigDecimal( userInputString ) ; // Input might be: 1.23
    costs.add( bd );