2016-10-19 20 views
1

我創建了一個包裝在一段時間的開關,用於作業分配。一切正常,除了增加了totalPrice雙,我一直在使用在switch語句中添加到一個double

totalPrice += priceA;totalPrice = totalPrice + priceA;

這裏是我的轉儲試過,我知道它的東西超級簡單,但我的谷歌搜索和文檔止跌回升爲零。

import java.util.Scanner; 

public class Coffee { 
    public static double priceA = 1.99; 
    public static double priceE = 2.99; 
    public static double priceL = 3.99; 
    public static double totalPrice = 0; 
    public static int custChoice; 
    public static int counter =1; 
    public static void main(String[] args) { 
     menu(); 
     while (counter <3 && custChoice !=0) { 
      menu(); 
      switch (custChoice) { 
       case '1': 
        totalPrice = totalPrice +priceA; 
        return; 
       case '2': 
        totalPrice = totalPrice +priceE; 
        return; 
       case '3': 
        totalPrice = totalPrice +priceL; 
        return; 
       case '0': 
        break; 
       default: 
        System.out.println("Your total is $" + totalPrice); 
      } 
      counter++; 
     } 
    } 

    public static void menu() { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Counter: " + counter); 
     System.out.println("Total Price: $" + totalPrice); 

     System.out.println("-----------------------------"); 
     System.out.println(" (1) American 1.99  "); 
     System.out.println(" (2) Espresso 2.99  "); 
     System.out.println(" (3) Latte  3.99  "); 
     System.out.println("-----------------------------"); 
     System.out.println(""); 
     System.out.println(" Please make a selection \n\t or enter 0 to total and quit."); 
     custChoice = input.nextInt(); 
    } 
} 

幫助我的StackOverflow!你是我唯一的希望。

+1

您預期會發生什麼?_actually_正在發生什麼?除0之外,您的所有情況都有返回語句。這意味着如果用戶選擇除0以外的任何內容,程序將終止。 – rmlan

+0

「請選擇\ n \ t或輸入0以完成並退出。」 有一個計數器,如果您選擇0或任何其他[將打印總數],並且計數器=> 3,則會退出。另一方面,你嘗試比較整數字符在開關情況下... –

+0

你怎麼知道?你從'main'返回'...終止程序。 –

回答

1

,你可以使用默認情況下的一些基本的輸入錯誤處理後退出,因爲它包含的代碼會被執行時既不其他病例(0,1,2,3)被檢測到。

所以,正如其他人已經提到的那樣,將總價的總和移到0的情況下,並用一個返回語句結束該情況,該語句將結束程序的執行。

更多在默認情況下爲用戶插入一些警告文本,並告訴輸入錯誤。 爲了防止邏輯問題,你應該減一計數器,因爲在這種迭代的while循環的用戶沒有買東西,它會通過一個在循環

編輯結束遞增: 我認爲DánielKis的答案已經非常好,但沒有默認情況下的內容。 我把他的解決方案,並擴大它:

public class Coffee { 
public static double priceA = 1.99d; 
public static double priceE = 2.99d; 
public static double priceL = 3.99d; 
public static double totalPrice = 0d; 
public static int custChoice; 
public static int counter =1; 
public static void main(String[] args) { 
    menu(); 
    while (counter <3) { 
     switch (custChoice) { 
      case 1: 
       totalPrice = totalPrice +priceA; 
       break; 
      case 2: 
       totalPrice = totalPrice +priceE; 
       break; 
      case 3: 
       totalPrice = totalPrice +priceL; 
       break; 
      case 0: 
       System.out.println("Your total is $" + totalPrice); 
       return; 
      default: 
       System.out.println("This Option is not available, please try again!"); 
       counter--; 
       break; 
     } 
     counter++; 
     menu(); 
    } 
} 

public static void menu() { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Counter: " + counter); 
    System.out.println("Total Price: $" + totalPrice); 

    System.out.println("-----------------------------"); 
    System.out.println(" (1) American 1.99  "); 
    System.out.println(" (2) Espresso 2.99  "); 
    System.out.println(" (3) Latte  3.99  "); 
    System.out.println("-----------------------------"); 
    System.out.println(""); 
    System.out.println(" Please make a selection \n\t or enter 0 to total and quit."); 
    custChoice = input.nextInt(); 
} 

}

1

除去你正在檢查的數字周圍的單引號,否則switch語句正在尋找字符。另外,它似乎也許你想要使用break而不是return

  switch (custChoice) { 
      case 1: 
       totalPrice = totalPrice +priceA; 
       break; 
      case 2: 
       totalPrice = totalPrice +priceE; 
       break; 
      case 3: 
       totalPrice = totalPrice +priceL; 
       break; 
      case 0: 
       break; 
      default: 
       System.out.println("Your total is $" + totalPrice); 
     } 
+0

'return' - >'break' – saka1029

+0

如果您選擇0,它將不會打印總數! –

1

CustChoice是字符串還是int?或者這是相關的?它看起來像在while條件中檢查它是一個int,在交換機中作爲一個字符串,如果它是一個int,交換機應該默認。無法測試它,但值得一看。

1

這應該爲你工作:

public class Coffee { 
     public static double priceA = 1.99; 
     public static double priceE = 2.99; 
     public static double priceL = 3.99; 
     public static double totalPrice = 0; 
     public static int custChoice; 
     public static int counter = 1; 

     public static void main(String[] args) { 
      while (counter<=3) { 
       menu(); 
       switch (custChoice) { 
        case 1: 
         totalPrice += priceA; 
         break; 
        case 2: 
         totalPrice += priceE; 
         break; 
        case 3: 
         totalPrice += priceL; 
         break; 
        case 0: 
         System.out.println("Your total is $" + totalPrice); 
         return; 
        default: 
         System.out.println("Unrecognised command"); 
       } 
       counter++; 
      } 
     } 

     public static void menu() { 
      Scanner input = new Scanner(System.in); 
      System.out.println("Counter: " + counter); 
      System.out.println("Total Price: $" + totalPrice); 

      System.out.println("-----------------------------"); 
      System.out.println(" (1) American 1.99  "); 
      System.out.println(" (2) Espresso 2.99  "); 
      System.out.println(" (3) Latte  3.99  "); 
      System.out.println("-----------------------------"); 
      System.out.println(""); 
      System.out.println(" Please make a selection \n\t or enter 0 to total and quit."); 
      custChoice = input.nextInt(); 
     } 
    } 

首先,你要調用菜單(),然後你調用菜單()後再次。您只需要調用一次,因爲while循環將始終執行,因爲計數器的起始位置爲1.

確保您檢查的是整數而不是字符,並確保跳出switch語句而不是像你一樣回報。

希望這會有所幫助!

+0

如果你選擇的不是0-3,它會打印總數 –

1

你的問題是,你檢查你的交換機中的字符。用正確的數值替換那些。也可以使用break來突破循環而不是return一個簡單的解決方法是給while循環一個標籤,並在需要時使用它來打破標籤。

theBank: while (counter <3 && custChoice !=0) { 
       menu(); 
       switch (custChoice) { 
        case 1: 
         totalPrice += priceA; 
         break; 
        case 2: 
         totalPrice += priceE; 
         break; 
        case 3: 
         totalPrice += priceL; 
         break; 
        case 0: 
         break theBank; 
        default: 
         System.out.println("You did not enter correct output"); 
       } 
       counter++; 
      } 
System.out.println("Your total is $" + totalPrice); 

希望這會有所幫助。乾杯:)

2

試試這個,你會選擇3

public class Coffee { 
    public static double priceA = 1.99d; 
    public static double priceE = 2.99d; 
    public static double priceL = 3.99d; 
    public static double totalPrice = 0d; 
    public static int custChoice; 
    public static int counter =1; 
    public static void main(String[] args) { 
     menu(); 
     while (counter <3) { 
      switch (custChoice) { 
       case 1: 
        totalPrice = totalPrice +priceA; 
        break; 
       case 2: 
        totalPrice = totalPrice +priceE; 
        break; 
       case 3: 
        totalPrice = totalPrice +priceL; 
        break; 
       case 0: 
        System.out.println("Your total is $" + totalPrice); 
        return; 
       default: 
        break; 
      } 
      counter++; 
      menu(); 
     } 
    } 

    public static void menu() { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Counter: " + counter); 
     System.out.println("Total Price: $" + totalPrice); 

     System.out.println("-----------------------------"); 
     System.out.println(" (1) American 1.99  "); 
     System.out.println(" (2) Espresso 2.99  "); 
     System.out.println(" (3) Latte  3.99  "); 
     System.out.println("-----------------------------"); 
     System.out.println(""); 
     System.out.println(" Please make a selection \n\t or enter 0 to total and quit."); 
     custChoice = input.nextInt(); 
    } 
} 
+0

作爲一個小解釋可能會有所幫助:switch中的'returns'退出'main'方法並結束程序,而'break'該程序停留在循環中。 –

1

事實上,你的情況下,在您的switch語句必須檢查相同的數據類型在您指定switch語句中的變量。你已經告訴切換到檢查custChoice,你已經定義爲一個整數,所以你的case語句也必須是整數。從case語句中的值中刪除引號將使它們成爲整數而不是字符串。

另外那個額外的menu()在你的switch語句之前和之內調用也是搞砸了。

我添加了一些額外的打印語句來顯示total,並且您使用的default情況只會在其他情況都不匹配時才顯示,因此我將其更改爲處理異常情況。這些只是當然的建議。

希望這會有所幫助。

import java.util.Scanner; 

public class Coffee { 
    public static double priceA = 1.99; 
    public static double priceE = 2.99; 
    public static double priceL = 3.99; 
    public static double totalPrice = 0.0; 
    public static int custChoice; 
    public static int counter =1; 
    public static void main(String[] args) { 
     while (counter <= 3) { 
      menu(); 
      switch (custChoice) { 
       case 1: 
        totalPrice += priceA; 
        show_total(); 
        break; 
       case 2: 
        totalPrice += priceE; 
        show_total(); 
        break; 
       case 3: 
        totalPrice += priceL; 
        show_total(); 
        break; 
       case 0: 
        show_total(); 
        System.exit(0); 
       default: 
        System.out.println("Please try again"); 
      } 
      counter++; 
     } 
    } 

    public static void show_total(){ 
     System.out.println("Your total is $" + totalPrice); 
    } 

    public static void menu() { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Counter: " + counter); 
     System.out.println("Total Price: $" + totalPrice); 

     System.out.println("-----------------------------"); 
     System.out.println(" (1) American 1.99  "); 
     System.out.println(" (2) Espresso 2.99  "); 
     System.out.println(" (3) Latte  3.99  "); 
     System.out.println("-----------------------------"); 
     System.out.println(""); 
     System.out.println(" Please make a selection \n\t or enter 0 to total and quit."); 
     custChoice = input.nextInt(); 
    } 
}