有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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;
    }

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


共 (3) 个答案

  1. # 1 楼答案

    ArrayList

    正如其他人所建议的,应该使用^{},特别是^{},更具体地说是^{}

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

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

    要使用Collection(请参见Tutorial),您需要在只使用primitives的情况下继续使用实际对象。Java有原语来帮助程序员从C编程过渡,但类和对象才是Java真正的意义所在。相当于double原语的类是^{}

    List<Double> costs = new ArrayList<>();
    // … get your inputs from user and add each price-item to list …
    costs.add ( y );
    

    简化你的逻辑

    此外,您的逻辑是复杂的,例如定义l,但从不使用它。我试着重写你的代码,但放弃了。我建议你试着小一点,一次只做一件事,开发出你想要的应用程序。让数据输入为单个价格项目工作,然后在工作之后尝试支持多个价格项目。这就是真正的编程工作是如何完成的,一次一小块

    提示:在变量上使用描述性名称。这将有助于澄清你的想法

    BigDecimal

    而且,在现实世界中,你永远不会用doubleDouble来表示价格或任何与金钱有关的东西。这两种数据类型都使用floating-point technology,它以精度换取执行速度。因此,结果是近似的,而不是精确的,并且在小数点的最右边经常有额外的数字

    对于金钱和其他精确性很重要的领域,使用^{}对象。FeedBigDecimal一个字符串,而不是一个双精度值,因为您可能已经引入了可怕的外来数字。这是学习使用对象而不是原语的另一个原因

    List<BigDecimal> costs = new ArrayList<>();
    …
    BigDecimal bd = new BigDecimal( userInputString ) ; // Input might be: 1.23
    costs.add( bd );
    
  2. # 2 楼答案

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

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

    然后通过执行list.get(1)或任何您想要的元素来获取元素

    这样做可以避免在声明数组时需要确切地知道需要多少元素

  3. # 3 楼答案

    没有所谓的未知长度数组。在Java中,任何数组(任何类型)都有一个字段长度

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

    有两个答案:

    1. 正如BlackHatSamurei所建议的那样,在添加额外元素时,使用List<Double> numbers = new ArrayList<>()-动态增长的现有类,[始终使用List,并且仅在实例化具体对象时使用特定的ArrayList实现]
    2. 如果这是关于学习:你实现你自己的版本的列表。意思是:你创建了一个使用数组来存储数据的类,每当你想添加数组可以容纳的更多元素时;创建一个新的、更大的数组,并将所有数据复制到该数组中