【问题标题】:Adding a list of user-inputted doubles to an Array将用户输入的双精度列表添加到数组
【发布时间】:2011-04-29 02:42:00
【问题描述】:

所以我的程序在实例化时询问用户他们想要多少“项目”。然后我的程序创建了两个数组,一个用于“商品名称”,一个用于“商品价格”。我使用循环让用户在各自的数组中输入每个项目名称和项目价格,但是我迷失了项目价格数组。要使用我的循环,我需要使用“itemprice.length”元素,但当我不使用字符串时,我不能这样做。

用户输入每个项目的“价格”后,我需要对每个数组项目应用乘数并输出。因此,例如,我想在数组中有 3 个项目:1.20、1.30、1.40,然后我希望程序询问我可以输入 0.08 的“销售税”,然后将每个项目乘以 0.08项目并输出总计。

有没有一种方法可以让我的程序正常工作,让用户输入,比如说 5 件商品及其价格,我是否以正确的方式进行操作?有什么方法可以更轻松地做到这一点?谢谢!

public class Input
{
private Scanner keybd;
private String item;
private double cost;
private String[] costArray;
private String[] itemArray;

/**
 * Constructor for objects of class Scanner
 */
public Input(int anyAmountofItems)
{
    keybd = new Scanner(System.in);
    costArray = new String[anyAmountofItems];
    itemArray = new String[anyAmountofItems];
}
 /**
 * Mutator method to set the item names and costs
 */
public void setArray(){
    for(int index=0; index < itemArray.length; index++){ 
    System.out.println("Enter the item name: ");
    itemArray[index] = keybd.next();}
    for(int indexa=0; indexa < itemArray.length; indexa++){
        System.out.println(itemArray[indexa]);
    }
    for(int indexb=0; indexb < costArray.length; indexb++){ 
    System.out.println("Enter the item cost: ");
    costArray[indexb] = keybd.next();}
    for(int indexc=0; indexc < costArray.length; indexc++){
        System.out.println(costArray[indexc]);
    }
}
    /**
     * Accessor method to return the items cost with tax
     */
    public double getTax(){
        return costArray.length;
    }

【问题讨论】:

  • 没有特殊原因你不要使用 indexa/b/c 作为名称,如果你需要更多的 i 和 j,k,l,但是在这里,它们存在于不同的范围内,所以你可以再次使用 i 进行第二次交互。然后,代码不是 OOP。如果 itemArray.length 必须相同,对于成本和项目,您可以创建一个具有属性(价格、总计)的复合类 Item,并在项目上创建一个数组,然后您将自动获得每个项目的总计和净价格.如果可能的话(不是主题“数组”的作业),你最好使用 ArrayList 而不是数组。

标签: java


【解决方案1】:

使用Float[]Float.parseFloat(String str) 将字符串转换为浮点数。

顺便说一句,在处理金钱时,浮点是一个坏主意,因为总是存在精度问题。最好使用具有适当最低货币单位的整数/多头(即美国的美分等)

【讨论】:

    【解决方案2】:

    你可以试试:

    System.out.println("Enter the sales tax: ");
    double salesTax = keybd.next();
    
    double totalTax =0.0;
    double total = 0.0;
    
    for(int indexc=0; indexc < costArray.length; indexc++){
    System.out.println("Enter the item cost: ");
    double cost = Double.valueOf(keybd.next()).doubleValue();
    totalTax = totalTax + (cost * salesTax);
    total = total + cost;
    }
    
    System.out.println("Total: " + (total-totalTax));
    

    编辑:在插入成本期间计算总数。

    【讨论】:

    • 那么我会摆脱所有 indexb 的东西吗?
    • indexb 的东西会在那里一一获取所有项目的成本。在获得每个项目的成本后,获得销售税并将其应用于所有项目。在接受成本的同时,您也可以这样做。我会在几秒钟内给你代码。
    • 我还需要了解如何将总税值添加到所有相加的项目中?这只给了我税收总额。谢谢!
    • 你需要让 keybd.next() keybd.nextDouble() ha.
    • 在此之后,无需计算总税额。因为总额是在对每个项目单独征税后计算的。所以它是含税的总成本。
    【解决方案3】:

    我不清楚你的问题是什么。您对项目成本数据有疑问吗?你只是在读一个字符串。你应该读入一个双精度数组。

    costArray = new double[anyAmountOfItems];
    // Then when reading use the appropriate Scanner method
    costArray[indexb] = keybd.nextDouble();
    

    几个风格说明:

    1. 您可能需要考虑使用列表而不是数组。这样您就不必担心固定数组的大小。
    2. 不需要在每个 for 循环中使用新的变量名。它只会增加混乱。使用 i 代替 indexa、indexb 等。
    3. 更好的是,在不需要索引的情况下使用增强的 for 循环:

      for(String item : itemArray) { System.out.println(item); }

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      相关资源
      最近更新 更多