2014-09-27 95 views
0

我剛剛學習如何使用開關語句。我正在嘗試創建一個在雜貨店出售的物品的購物車。我必須創建一個程序,增加銷售物品的價值,然後打印最終價值。這是我到目前爲止,但是當我終止我的程序時,我得到一個錯誤,它不顯示最終值。開關語句和雙精度值

任何幫助非常感謝!

package Exercises; 

import java.util.Scanner; 

public class CalculatingSales { 

    public static void main(String[] args) 
    { 
     int total = 0; 
     int prod1Count = 0, prod2Count = 0, prod3Count = 0, prod4Count = 0, prod5Count = 0; 

     Scanner input = new Scanner(System.in); 

     System.out.printf("%s%n%s%n %s%n %s%n %s%n","Enter product number sold: " //prompt user to enter input 
       ,"NOTE: Product number must be between 1 & 5", 
       "To terminate input... ", 
       "On UNIX/Linus?mac OS X type <Ctrl> d then press Enter", 
       "On Windows type <Ctrl> z then press Enter"); 

     while(input.hasNext()) 
     { 
      int item = input.nextInt(); 
      total =+ item; 

      double product1; 
      double product2; 
      double product3; 
      double product4; 
      double product5; 

      switch (item + total) 
      { 
       case 1: 
        product1 = 2.98; 
        ++prod1Count; 
        break; 

       case 2: 
        product2 = 4.50; 
        ++prod2Count; 
        break; 

       case 3: 
        product3 = 9.98; 
        ++prod3Count; 
        break; 

       case 4: 
        product4 = 4.49; 
        ++prod4Count; 
        break; 

       case 5: 
        product5 = 6.87; 
        ++prod5Count; 
        break; 

       default: 
        System.out.println("ERROR. You did not enter a value between 1 & 5!"); 
        break; 

      }//end switch 

     }//end while 

     double shoppingCart = (double) total; 

     System.out.printf("%nTotal retail value of all products is: $%d", shoppingCart); 
    } 
} 
+1

它應該是'total + = item;'。 – herohuyongtao 2014-09-27 01:50:26

回答

2

的問題是在這裏:

System.out.printf("%nTotal retail value of all products is: $%d", shoppingCart); 

printf期待一個int但你傳遞一個double作爲參數。

試試這個:

System.out.printf("%nTotal retail value of all products is: $%.2f", shoppingCart); 

你也應該改變total =+ item;total += item;

0

有許多與代碼的問題。最後的錯誤是因爲您正在嘗試輸出double並指定要打印的整數。 $%d應該是$%f但是要使錢顯示到小數點後兩位,您可以使用$%.2f。有關格式化的更多信息,請參閱documentation

雖然您的循環中存在主要問題。 switch語句只應該通過你想要比較的項目編號,並做相應的事情。因此,交換機只需要switch (item)。有一個更簡單的方法來完成總數並執行切換。您可以通過向其添加通過循環每次選擇的產品的值來保持運行total。退出時,它應該是所選項目的總金額。如果你輸入一個超出範圍的項目,它實際上會增加0.

最後你真的應該關閉掃描儀來做適當的清理,所以input.close()也是一個好主意。

的代碼可能看起來是這樣的:

package Exercises; 

import java.util.Scanner; 

public class CalculatingSales { 

    public static void main(String[] args) 
    { 
     double total = 0.0; 

     Scanner input = new Scanner(System.in); 

     System.out.printf("%s%n%s%n %s%n %s%n %s%n","Enter product number sold: " //prompt user to enter input 
       ,"NOTE: Product number must be between 1 & 5", 
       "To terminate input... ", 
       "On UNIX/Linus?mac OS X type <Ctrl> d then press Enter", 
       "On Windows type <Ctrl> z then press Enter"); 

     while(input.hasNext()) 
     { 
      double prodvalue = 0.0; 

      int item = input.nextInt(); 

      switch (item) 
      { 
       case 1: 
        prodvalue = 2.98; 
        break; 

       case 2: 
        prodvalue = 4.50; 
        break; 

       case 3: 
        prodvalue = 9.98; 
        break; 

       case 4: 
        prodvalue = 4.49; 
        break; 

       case 5: 
        prodvalue = 6.87; 
        break; 

       default: 
        System.out.println("ERROR. You did not enter a value between 1 & 5!"); 
        break; 

      }//end switch 

      total += prodvalue; 

     }//end while 

     double shoppingCart = total; 

     System.out.printf("%nTotal retail value of all products is: $%.2f", shoppingCart); 
     input.close(); 
    } 
} 

有這樣做的更好的方式,但隨着時間的推移,你可能會學習這個程序是如何被簡化。我想要保持代碼的結構與你似乎處理事物的方式相似。

如果您需要每個單獨項目的計數,那麼您將不得不修改上面的代碼以將它們添加回來。我意識到此解決方案可能已經使您需要的過分簡化,但在基本級別上它保持總體正確。