2014-11-02 48 views
0

我正在嘗試製作一個虛擬商店程序。簡介是,如果用戶在任何時候輸入'q',程序應該退出。讓Java識別用戶輸入

一旦用戶輸入'c',要求用戶輸入2個字符的狀態,如CA,NV,WA。如果一個代碼其他

比這三個輸入,它屬於「其他」。然後根據折扣顯示他們購物車中的物品和計算得出的總價格,幷包含稅款。

問題是程序會詢問用戶物品和數量一次,然後進入結帳模式。每當我把'q',它會進入下一行。

下面是代碼:

import java.util.Scanner; 
import java.text.DecimalFormat; 
import java.text.NumberFormat; 
import java.util.Random; 
import java.io.*; 


public class virtualStore { 


    public static void main(String [] args) throws IOException{ 

     /* If the user enters an item number, the program should ask the user to enter how many of that item 
     they want, and then print the menu again. If at any time the user enters 'q', the program should quit. 
     Once the user enters 'c', ask the user to enter a 2-character state such as CA, NV, WA. If a code other 
     than these three is entered, it falls under "other". Then display what is in their cart and the calculated 
     total price based on discounts and include the tax. You should use the Math.round() and 
     System.out.printf methods to round numbers and to display to 2 decimal places. */ 

     Scanner keyboard = new Scanner (System.in); 
     String input; 
     char c = ' '; 
     char q = ' '; 

     //tax rates 
     double CAtaxRate = .09; 
     double NVtaxRate = .07; 
     double WAtaxRate = .065; 
     double other = .06; 
     double tax = 0; 

     //checkout 
     double checkout = 0; 
     double total; 
     double cash = 0; 
     double change = 0; 
     //items 
     double mushrooms = 0.3; 
     double onions = 0.6; 
     double watermelon = 2.5; 
     double cookies = 1; 
     int item = 0; 

     //number of items 
     int numMushrooms = 0; 
     int numOnions = 0; 
     int numWatermelon = 0; 
     int numCookies = 0; 



     DecimalFormat dollar = new DecimalFormat("#,##0.00"); 
     Scanner scanner = new Scanner(System.in); 

     System.out.println("Welcome to Alex's Store." 
       + " Here is the menu. " 
       + "\nEnter the item number to add it to your cart," 
       + " enter \'c\' to checkout or \'q\' to quit. "); 

     while(true) 
     //while(c != 'c' && c != 'q') 

     { 

      for (item = 1; item < 4; item ++){ 
      System.out.println("Item\t\t\tPrice\t\t\tQuantity"); 
      System.out.println("---------------------------------------------------------"); 
      System.out.println("1. Mushrooms\t\t($0.30/$0.25)\t\t" + numMushrooms); 
      System.out.println("2. Onions\t\t($0.60/$0.50)\t\t" + numOnions); 
      System.out.println("3. Watermelon\t\t($2.50/$2.00)\t\t" + numWatermelon); 
      System.out.println("4. Cookies\t\t($1.00/$0.75)\t\t" + numCookies); 
      System.out.println("---------------------------------------------------------"); 


      System.out.println("Enter item number between 1 through 4"); 
      System.out.println("or enter 'c' for checkout or 'q' for quit."); 
      input = keyboard.nextLine(); 
      item = Integer.parseInt(input); 




      if (input.equals("1")) 
      { 
       System.out.println("Enter how many items you want."); 
       String m = keyboard.nextLine(); 
       numMushrooms = Integer.parseInt(m); 

      } 
      else if (input.equals("2")) 
      { 
       System.out.println("Enter how many items you want."); 
       String o = keyboard.nextLine(); 
       numOnions = Integer.parseInt(o); 

      } 
      else if (input.equals("3")) 
      { 
       System.out.println("Enter how many items you want."); 
       String w = keyboard.nextLine(); 
       numWatermelon = Integer.parseInt(w);     

      } 
      else if(input.equals("4")) 
      { 
       System.out.println("Enter how many items you want."); 
       String co = keyboard.nextLine(); 
       numCookies = Integer.parseInt(co); 

      } 

      } 





     if (numMushrooms > 10) 
     { 
      mushrooms = 0.25; 
     } 

     else if (numOnions > 10) 
     { 
      onions = 0.5; 
     } 
     else if (numWatermelon > 10) 
     { 
      watermelon = 2; 
     } 
     else if (numCookies > 10) 
     { 
      cookies = .75; 
     } 

     // quit option 
     String quit = scanner.nextLine(); 
     q = quit.charAt(0); 

     if (quit.equalsIgnoreCase("q")) 
     { 
      System.out.println("Goodbye"); 
      scanner.close(); 
      System.exit(0); 
     } 

     // checkout option 
     String ch = scanner.nextLine(); 
     c = ch.charAt(0); 

     if (ch.equalsIgnoreCase("c")) 
     { 


      //checkout 
      checkout = numMushrooms * mushrooms + numOnions * onions + numWatermelon * watermelon + numCookies * cookies; 


      //tax 
      total = tax * checkout + checkout; 


      System.out.print("Enter state abbreviations: "); 
      input = keyboard.nextLine(); 


      PrintWriter outputfile = new PrintWriter("receipt.txt"); 
      outputfile.println("Your cart: "); 
      outputfile.println("Sub total:$ " + dollar.format(checkout)); 

      if (input.equalsIgnoreCase("CA")) 
      { 
       total = CAtaxRate * checkout + checkout; 
       outputfile.println("Tax Rate: " + CAtaxRate); 
       outputfile.println("Tax: $" + dollar.format(CAtaxRate * checkout)); 
       outputfile.println("Total is: $" + dollar.format(total)); 
      } 

      else if (input.equalsIgnoreCase("NV")) 
      { 
       total = NVtaxRate * checkout + checkout; 
       outputfile.println("Tax Rate: " + NVtaxRate); 
       outputfile.println("Tax: $" + dollar.format(NVtaxRate * checkout)); 
       outputfile.println("Total is: $" + dollar.format(total)); 

      } 

      else if (input.equalsIgnoreCase("WA")) 
      { 
       total = WAtaxRate * checkout + checkout; 
       outputfile.println("Tax Rate: " + WAtaxRate); 
       outputfile.println("Tax: $" + dollar.format(WAtaxRate * checkout)); 
       outputfile.println("Total is: $" + dollar.format(total)); 

      } 

      else if (input.equalsIgnoreCase(input)) 
      { 
       total = other * checkout + checkout; 
       outputfile.println("Tax Rate: " + other); 
       outputfile.println("Tax: $" + dollar.format(other * checkout)); 
       outputfile.println("Total is: $" + dollar.format(total)); 
      } 

      outputfile.println("-----------------------------------------------------"); 
      input = keyboard.nextLine(); 
      cash = Integer.parseInt(input); 
      outputfile.println("Enter amount of cash: $" + dollar.format(cash)); 

      change = cash - total; 
      outputfile.println("Change due: $" + dollar.format(change)); 


      outputfile.println("Thank you for shopping at Alex's store!"); 

      outputfile.close(); 

     FileWriter fw = new FileWriter("receipt.text", true); 
     PrintWriter pw = new PrintWriter(fw); 
     pw.println("C:\\Desktop\\Receipt.txt "); 
     pw.close(); 
     } 







    } 

} 

} 

回答

0

您使用了錯誤的模型來獲取用戶輸入。

嘗試做的事情是這樣的:

while(true) { 

    // Print the menu messages 
    String input = scanner.readLine(); 
    if(input.equals("c")) { 

     // Read in and handle state abbreviation 

    } else if(input.equals("q")) { 
     System.exit(0); 
    } else { 
     int itemNumber = Integer.parseInt(input); 

     // Parse and handle item number 
    } 
} 
+0

在「輸入項目編號」一節,該程序不要求數量。 – souroreo 2014-11-03 01:02:25

+0

您需要將該代碼放在代碼所說的「//分析和處理行號」的位置。 – APerson 2014-11-03 01:09:35

+0

在輸入項目下,它不存儲用戶輸入。此外,輸入沒有更新菜單。 – souroreo 2014-11-03 02:12:18