Java Break语句不存储数据,只返回最后一个输入值

Java Break语句不存储数据,只返回最后一个输入值,java,class,loops,break,Java,Class,Loops,Break,我下面的中断声明运行得非常好。没有错误。但是,当我为多个产品输入多个值时,它只返回上次输入的产品的数据。例如,如果我输入productNum=1和numSold=5,那么productNum=2,然后numSold=5;它将只计算productNum=2的totalSales,并且只跟踪返回值numSold=5。它将“忘记”productNum=1及其numSold的数据 我希望它存储numSold1到numSold5的数据,并继续为totalSales添加值。有人能指出正确的方向吗 这是我的销

我下面的中断声明运行得非常好。没有错误。但是,当我为多个产品输入多个值时,它只返回上次输入的产品的数据。例如,如果我输入productNum=1和numSold=5,那么productNum=2,然后numSold=5;它将只计算productNum=2的totalSales,并且只跟踪返回值numSold=5。它将“忘记”productNum=1及其numSold的数据

我希望它存储numSold1到numSold5的数据,并继续为totalSales添加值。有人能指出正确的方向吗

这是我的销售计算器:

public class SalesCalculator {

    private int productNum, numSold, numSold1, numSold2, numSold3, numSold4, numSold5;

    private double price1 = 2.98, price2 = 4.50, price3 = 9.98, price4 = 4.49, price5 = 6.87, totalSales = 0.00;

    public int setProductNum(int productNum) {

        this.productNum = productNum;
        return productNum;
    }

    public int setNumSold(int numSold) {

        this.numSold = numSold;
        return numSold;
    }

    public double calculateSales() {

            switch (productNum) {

                case 1:
                    totalSales += (price1 * numSold); // multiplies how much of this product was sold by its price and adds to overall sales
                    numSold1 += numSold; // tracks how much of this product was sold of this product
                    break;

                case 2:
                    totalSales += (price2 * numSold);
                    numSold2 += numSold;
                    break;

                case 3:
                    totalSales += (price3 * numSold);
                    numSold3 += numSold;
                    break;

                case 4:
                    totalSales += (price4 * numSold);
                    numSold4 += numSold;
                    break;

                case 5:
                    totalSales += (price5 * numSold);
                    numSold5 += numSold;
                    break;

                // default just breaks out of loop in case invalid product number entered
                default:
                    break;
            }

        return totalSales;
    }

public double getTotalSales() { return totalSales; }

public int getNumSold1() { return numSold1; }
public int getNumSold2() { return numSold2; }
public int getNumSold3() { return numSold3; }
public int getNumSold4() { return numSold4; }
public int getNumSold5() { return numSold5; }

// get prices, included because i wasn't sure if assignment required them or not
public double getPrice1() { return price1; }
public double getPrice2() { return price2; }
public double getPrice3() { return price3; }
public double getPrice4() { return price4; }
public double getPrice5() { return price5; }
}
以下是需要输入的内容:

public class SalesCalculatorTest {

public static void main(String[] args){

    SalesCalculator salesCalculator1 = new SalesCalculator();

    Scanner input = new Scanner(System.in);
    int calcSales;

    do {

        System.out.printf("\nPlease enter the product number, then press ENTER.\n");
        int productNum = input.nextInt();
        salesCalculator1.setProductNum(productNum);

        System.out.printf("\nPlease enter the quantity sold, then press ENTER.\n");
        int numSold = input.nextInt();
        salesCalculator1.setNumSold(numSold);

        System.out.printf("\nType -1 to calculate sales. Press ENTER to input more data.\n");
        calcSales = input.nextInt();
        } while (calcSales != -1);

    if (calcSales == -1) {

        salesCalculator1.calculateSales();
    }

    double totalSales = salesCalculator1.getTotalSales();
    System.out.printf("\nTotal sales for products sold was $%.2f", totalSales);

    int numSold1 = salesCalculator1.getNumSold1();
    double price1 = salesCalculator1.getPrice1();
    System.out.printf("\n\nProduct 1 sold %d units at $%.2f each", numSold1, price1);

    int numSold2 = salesCalculator1.getNumSold2();
    double price2 = salesCalculator1.getPrice2();
    System.out.printf("\nProduct 2 sold %d units at $%.2f each", numSold2, price2);

    int numSold3 = salesCalculator1.getNumSold3();
    double price3 = salesCalculator1.getPrice3();
    System.out.printf("\nProduct 3 sold %d units at $%.2f each", numSold3, price3);

    int numSold4 = salesCalculator1.getNumSold4();
    double price4 = salesCalculator1.getPrice4();
    System.out.printf("\nProduct 4 sold %d units at $%.2f each", numSold4, price4);

    int numSold5 = salesCalculator1.getNumSold5();
    double price5 = salesCalculator1.getPrice5();
    System.out.printf("\nProduct 5 sold %d units at $%.2f each\n", numSold5, price5);
}
}

根据您设计程序的方式,您需要在对
setProductNum()
setNumSold()
的每对调用之后调用
calculateSales()

因此,以下行需要在您的
do。。。而
循环:

salesCalculator1.calculateSales();

原因是
productNum
numSold
在对
setProductNum()
setNumSold()
的每对调用中都被过度写入。因此,您需要在这些值为当前值时使用它们。否则,正如您所注意到的,您的所有计算都将使用最后设置的值,即较早的值被“遗忘”。

根据您设计程序的方式,您需要在对
setProductNum()
setNumSold()的每对调用之后调用
calculateSales()

因此,以下行需要在您的
do。。。而
循环:

salesCalculator1.calculateSales();

原因是
productNum
numSold
在对
setProductNum()
setNumSold()
的每对调用中都被过度写入。因此,您需要在这些值为当前值时使用它们。否则,正如您所注意到的,您的所有计算都将使用最后设置的值,即较早的值将被“遗忘”。

calculateSales()
使用字段
productNum
来确定执行的是哪种情况,而
productNum
将是上一次输入的产品编号,因为这是通过
setProductNum(int)
设置的
calculateSales()
使用字段
productNum
来确定执行的
案例,而
productNum
将是上次输入的产品编号,因为这是通过
setProductNum(int)
设置的。这几乎就是我所做的。实际上,我最终将productNum和NumOld直接传递到calculateSale()中,并删除了setProductNum()和SetNumOld()。非常感谢你和d.j.布朗的提示!!如果我认识你们,我会请你们吃饭IRL@JakeDoe很乐意帮忙,你的新设计听起来是一个很大的改进。如果你觉得有帮助的话,请随意投票和/或选择这个答案:)这几乎就是我所做的。实际上,我最终将productNum和NumOld直接传递到calculateSale()中,并删除了setProductNum()和SetNumOld()。非常感谢你和d.j.布朗的提示!!如果我认识你们,我会请你们吃饭IRL@JakeDoe很乐意帮忙,你的新设计听起来是一个很大的改进。如果您觉得有帮助,请随意投票和/或选择此答案:)