2014-11-02 51 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