2017-10-18 68 views
1

下面我的break语句完美无缺。没有错误。但是,当我为多个产品输入多个值时,它只会返回最后输入的产品的数据。例如,如果我输入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); 
} 
} 
+0

'calculateSales()'采用现场'productNum'以确定哪个'case'被执行,和'productNum'将是任何的最后一个产品号输入是因为这是通过'setProductNum(int)的设置'。 –

回答

0

根据你设计你的程序的方式,你需要每对电话后打电话calculateSales()setProductNum()setNumSold()

因此下面的行需要是你的do ... while循环中:

salesCalculator1.calculateSales(); 

这样做的原因是,productNumnumSold超过编写的每对呼叫到setProductNum()setNumSold()。因此,您需要在当前使用这些值。否则,正如你注意到的,所有的计算都将使用最后的设定值,即。早先的值被“忘记”了。

+0

这几乎就是我所做的。其实,我结束了直接传递productNum和numSold到calculateSale(),并与setProductNum()和setNumSold()废除。非常感谢你和d.j.brown的提示!如果我知道你在IRL –

+0

@JakeDoe快乐帮和新的设计听起来像一个很大的进步我就买你们的晚餐。随意给予好评和/或选择这个答案,如果你有帮助:) – dave