2014-02-05 188 views
0

我被困在試圖爲我的程序創建一個switch語句。爲了充分披露,這是明天將要完成的家庭作業。我應該使用switch語句來指定CD銷售總費用的折扣率。非會員可獲得15%的黃金,10%的白銀,5%的青銅和0%的青銅。Java Switch Statement,折扣折扣

這是我的程序到目前爲止。我還沒有得到輸出,但只要我不能通過這個開關,這應該不成問題。

public static void main(String[] args) { 
    //Variables 
    String firstName = null; 
    String lastName = null; 
    int songs; 
    double cost; 
    int membership; 
    double serviceCharge; 
    double productCharge; 
    double baseCharge; 
    //Keyboard input 
    Scanner keyboard = new Scanner(System.in); 

    //Gathering information from the user 
    System.out.println("Enter your first name:"); 
    firstName = keyboard.nextLine(); 
    System.out.println("Enter your last name:"); 
    lastName = keyboard.nextLine();  
    System.out.println("Enter the number of songs downloaded:"); 
    songs = keyboard.nextInt(); 
    System.out.println("enter the cost per song:"); 
    cost = keyboard.nextDouble(); 
    System.out.println("Enter the status of membership:" 
      + "3 represents a gold member" 
      + "2 represents a silver member" 
      + "1 represeents a bronze member:" 
      + "0 represents a nonmember"); 
    membership = keyboard.nextInt(); 

    //Here is where the math starts 
    baseCharge = cost * songs; 

    serviceCharge = baseCharge; 
    if (songs <= 8) 
     serviceCharge = .07 * baseCharge; 
    else if (songs > 8 && songs <= 15) 
     serviceCharge = .04 * baseCharge; 
    else if (songs > 15 && songs < 20) 
     serviceCharge = .02 * baseCharge; 
    else if (songs <= 20) 
     serviceCharge = 0; 

    productCharge = baseCharge + serviceCharge; 

    switch (membership) 
    { 
     case 3: productCharge * .15;    
      break; 
     case 2: 
      break; 
     case 1: 
      break; 
     case 0: 
      break; 
     default: 
      break; 
    } 

很明顯,你不能在switch語句中使用double,但我迷路了。我應該如何分配折扣率而不使用雙重摺扣?你需要小數來正確地做數學運算。或者我看着這完全錯誤?

一旦我完成了程序的其餘部分,這就是輸出結果的樣子。

輸入你的名字: 約翰 輸入您的姓氏: 母鹿 進入下載的歌曲數量:每首歌曲輸入的成本: 0.99 輸入會員的狀態: 3代表黃金會員 2代表銀會員 1代表青銅會員; 0代表非會員:全名:李四 下載的歌曲數量:$ 0.99 服務費:$ 0.32 小計:$ 7.60 稅額:$ 0.36 總費用:$ 7.58

對不起,每首歌曲的8 價格文本的牆。非常感謝您提供任何幫助。

回答

2

你可以通過switch/case保存在double變量的優惠信息:

double discount = 0.0;//some default value 

    switch (membership) 
    { 
     case 3: 
      discount = .15;    
      break; 
     case 2: 
      discount = .05 
      break; 
     //etc. 
     default: 
      discount = 0.0;//some default value 
      break; 
    } 
    //now do the calculation using the discount variable 
    double finalProductCharge = productCharge * (1.0 - discount); 
+0

非常感謝,這對我的項目非常有幫助。現在我要完成剩下的工作了! – Akmar275

+0

@ Akmar275沒問題!如果您發現此答案是正確的,請按照以下步驟標記它:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

0

如果會員金爲3,銀爲2,青銅爲1,無爲0,則可以根據此值計算百分比,而不使用switch,因爲它是每個會員級別的5%。

final double discountPerMemberLevel = 0.05; 

productCharge = baseCharge + serviceCharge; 

double discount = membership * discountPerMemberLevel; 
productCharge *= 1 - discount; 
+0

這適用於本例中的功課作業,但作爲一般的編碼練習,我建議使用開關。如果用戶輸入或折扣金額改變了,那麼數學不起作用,其意圖不是很清楚。 –

+0

@StevenMastandrea更好的解決方案是將數據存儲在某個地方,比如數組或數據庫,然後使用它們進行計算,以便代碼保持乾淨。 'switch'語句真的很雜亂。 –

+0

偉大的建議,我相信這是奇妙的作品,但我不認爲這是我的教授正在尋找的東西。穆罕默德擊中了頭部。不管怎麼說,還是要謝謝你! – Akmar275

0

productCharge * .15不是一個聲明,這是什麼switch預計在那裏,所以編譯器給你一個消息,說盡可能多。下一步將是檢查switch語句的語法。無論如何,評估這個表達式還沒有實現。