【问题标题】:Adding together values from a object in an array将数组中对象的值相加
【发布时间】:2019-02-09 15:30:46
【问题描述】:

我正在尝试在我的方法 getTotalCost 中将所有成本值和数量值相加,并将它们从我的数组对象 list[i] 相乘(如代码所示):

public class GroceryList {
    private int i;

    GroceryItemOrder list[] = new GroceryItemOrder[10];

    public void addItem(String name, double cost, int quantity) {
        try {
            for (i = 0; i < list.length; i++) {
                list[i] = new GroceryItemOrder(name, cost, quantity);

                if (list[i] == list[9] && list[i] != null) {
                    System.out.format("%6s %-15S %10gKR. %4d stk.%n", "",
                            list[i].getName_Food(),
                            list[i].getCost_Food(),
                            list[i].getQuantity_Food()
                    );
                }
            }
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("You put too many groceries in your cart!");
            System.exit(0);
        }
    }

    public void getTotalCost(){
        System.out.println();

        try {
            double totalAmount;
            totalAmount = list[i].getCost_Food() * list[i].getQuantity_Food();
            System.out.println("The Total Amount is: " + totalAmount);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Something went wrong");
        }
    }
}

this below is my main class:    

package com.company;

public class Main {

public static void main(String[] args) {

    GroceryList gL = new GroceryList();

    receipt();

    gL.addItem("Bananer",10,6);
    gL.addItem("Toiletpapir",40,2);
    gL.addItem("Svinekød",30,1);
    gL.addItem("Papir",25,1);
    gL.addItem("Sødmælk",10,3);
    gL.addItem("Færdigret",15,5);

    //=130
    /*
    gL.addItem("Kylling",10,2);
    gL.addItem("Kaffe",10,2);
    gL.addItem("Bønner",10,2);
    gL.addItem("Kage",10,2);
    //*/

    gL.getTotalCost();


}

public static void receipt(){
    System.out.println("");
    System.out.printf("%9S %1S%n","","\"~discount supermarket receipt~\"");
    System.out.printf("%15S %15S %15S%n","Grocery:","Cost:","Quantity:");
    System.out.println("");
}

}

这是我现在在删除 try/catch 时遇到的输出错误:

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 10 在 com.company.GroceryList.getTotalCost(GroceryList.java:33) 在 com.company.Main.main(Main.java:26)

我想得到:

总金额为:xxx

【问题讨论】:

  • 不要捕获异常,而是让它冒泡并打印堆栈跟踪 - 这样您就可以确切地看到出了什么问题(即暂时删除try ... catch
  • 你能发布这个类是如何使用的吗?我的意思是在你的主要方法中?
  • 仔细查看您的 i 变量。使用您的调试器来观察该变量...您可能会对正在发生的事情感到惊讶。
  • 我把主类放了。

标签: java arrays object return-value add


【解决方案1】:

您必须跟踪添加到数组中的项目数。
所以在类级别声明这个变量,而不是i

private int counter = 0;

您的 addItem() 方法包含一个 for 循环。为什么?
这个方法应该给list增加1项,所以改成这样:

public void addItem(String name, double cost, int quantity) {
    if (counter == list.length) {
        System.out.println("Your cart is full! No more items can be added.");
        return;
    }
    list[counter] = new GroceryItemOrder(name, cost, quantity);
    counter++;
}

现在在getTotalCost() 中,您确实需要一个for 循环来遍历列表中的所有项目并获得您需要的总数:

public void getTotalCost(){
    double totalAmount = 0.0;
    System.out.println();
    for (int i = 0; i < counter; i++) {
        totalAmount += list[i].getCost_Food() * list[i].getQuantity_Food();
        System.out.format("%6s %-15S %10gKR. %4d stk.%n", "",
                        list[i].getName_Food(),
                        list[i].getCost_Food(),
                        list[i].getQuantity_Food()
        );
    }
    System.out.println("The Total Amount is: " + totalAmount);
}

【讨论】:

  • 为什么需要counter 而不是一直循环到list.length
  • 因为购物车列表可能包含少于 10 件商品。
  • 我在getTotalCost() 中添加了它。请参阅我编辑的答案。
猜你喜欢
  • 1970-01-01
  • 2012-01-02
  • 2016-12-08
  • 2022-06-10
  • 2018-04-15
  • 2016-06-17
  • 2019-01-27
  • 1970-01-01
相关资源
最近更新 更多