2016-10-26 2 views
-1

Ich versuche printMenu(cart, scnr).Java Arraylist und Klassen

Aber zum Beispiel ‚a‘> Die Code druckt
Geben Sie den Namen des Elements zu übergeben: die Artikelbeschreibung eingeben:

Vor Artikelnamen unter !!!!

Vielen Dank im Voraus.

Dies ist die Hauptklasse:

import java.util.Scanner; 

    public class ShoppingCartManager { 
     public static void main(String[] args) { 

      Scanner scnr = new Scanner(System.in); 

      String customerName = "none"; 
      String currentDate = "January 1, 2016"; 

      System.out.println("Enter Customer's Name: "); 
      customerName = scnr.nextLine(); 

      System.out.println("Enter Today's Date: "); 
      currentDate = scnr.nextLine(); 

      ShoppingCart cart = new ShoppingCart(customerName, currentDate); 

      System.out.println("Customer Name: " + cart.getCustomerName()); 
      System.out.println("Today's Date: " + cart.getDate()); 
      printMenu(cart, scnr); 

     } 

     public static void printMenu(ShoppingCart cart, Scanner scnr) { 
      ItemToPurchase cartItems = new ItemToPurchase(); 

      char userChoice = '?'; 
       System.out.println(""); 

       System.out.print("MENU" + "\na - Add item to cart" + "\nd - Remove item from cart" 
            + "\nc - Change item quantity" + "\ni - Output items' descriptions" 
            + "\no - Output shopping cart" + "\nq - Quit"); 

       System.out.println(""); 
       System.out.println(""); 
       System.out.println(""); 

       System.out.println("Choose an option: "); 

       userChoice = scnr.next().charAt(0); 


       boolean rePrintMenu = true; 

       do { 

       switch (userChoice) { 

       // Add item to cart. 
          case 'a': 

           System.out.println("ADD ITEM TO CART"); 

           System.out.println("Enter the item name: "); 
           cartItems.setName(scnr.nextLine()); 

          System.out.println("\n\nEnter the item description: "); 
           cartItems.setDescription(scnr.nextLine()); 

           System.out.println("\n\nEnter the item price: "); 
           cartItems.setPrice(scnr.nextInt()); 

           System.out.println("Enter the item quantity: "); 
           cartItems.setQuantity(scnr.nextInt()); 

           break; 


       // Remove item from cart     
          case 'd': 

           System.out.println("REMOVE ITEM FROM CART"); 
           System.out.println("Enter name of item to remove: "); 

           cart.removeItem(scnr.nextLine()); 

           break; 


       // Change item quantity   
          case 'c': 

           //ItemToPurchase newQuantity = new ItemToPurchase(); 

           System.out.println("CHANGE ITEM QUANTITY"); 
           System.out.println("Enter the item name: "); 
           // cart.modifyItem(scnr.nextLine()); 

           break; 


       // Output items' descriptions  
          case 'i': 

           System.out.println("OUTPUT ITEMS' DESCRIPTIONS"); 
           System.out.println(cart.getCustomerName() + "'s Shopping Cart - " + cart.getDate()); 

           System.out.println(""); 
           System.out.println(""); 


           System.out.println("Item Descriptions"); 

           System.out.println(cart.printDescriptions()); 

           System.out.println(); 

           break; 

          case 'o': 
           System.out.println("OUTPUT SHOPPING CART"); 
System.out.println(cart.getCustomerName() + "'s Shopping Cart - " + cart.getDate()); 
           System.out.println(cart.getNumItemsInCart()); 

           System.out.println(""); 
           System.out.println(""); 

           System.out.println(cart.printTotal()); 

           break; 

          case 'q': 
           rePrintMenu = false; 
           System.exit(0); 

           break; 

          } 
         } while (rePrintMenu);  
         return; 
      } 

    } 
enter code here 

Das ist mein ShoppingCart!

Aber ich weiß nicht, warum es nicht mit Haupt funktioniert. Wie entferne ich den Gegenstand mit seinem Namen?

habe ich versucht, diese Logik aber nicht funktioniert:

Für() { if()

else { }

Soll ich boolean Flag haben? oder zählen? Ich bin verloren.

import java.util.ArrayList; 

public class ShoppingCart { 

    private String customerName = "none"; 
    private String currentDate = "January 1, 2016"; 
    private ArrayList<ItemToPurchase> cartItems = new ArrayList<ItemToPurchase>(); 


    public ShoppingCart() { 

    } 


    public ShoppingCart(String userName, String userDate) { 
     customerName = userName; 
     currentDate = userDate; 
     return; 
    } 


    public String getCustomerName() { 
     return customerName; 
    } 


    public String getDate() { 
     return currentDate; 
    } 


    public void addItem(ItemToPurchase item) { 
     cartItems.add(item); 
     return; 
    } 

//fixMe  
    public void removeItem(String itemName) { 
     return; 
    } 
// fixMe 
     public void modifyItem(ItemToPurchase item) { 
      return; 
     } 

    public int getNumItemsInCart() { 
     int totalNumOfItem = 0; 
     for (int i = 0; i < cartItems.size(); ++i) { 

      totalNumOfItem += cartItems.get(i).getQuantity(); 
     } 
     return totalNumOfItem; 
    } 


    public int getCostOfCart() { 
     int cartCost = 0; 

     for (int i = 0; i < cartItems.size(); ++i) { 
      cartCost += cartItems.get(i).getQuantity(); 
      cartCost *= cartItems.get(i).getPrice(); 
     } 

     return cartCost; 
    } 


    public int printTotal() { 
     int total= 0; 

      for (int i = 0; i < cartItems.size(); ++i) { 
       if (cartItems.size()> 0) { 

       cartItems.get(i).printItemCost(); 

        total = (cartItems.get(i).getQuantity()) * (cartItems.get(i).getPrice()); 
       System.out.println("Total: $" + total); 
      } 


     else { 
      System.out.println("SHOPPING CART IS EMPTY"); 



    }} 
      return total; 
} 

    public String printDescriptions() { 
     String descriptions = ""; 
     for (int i = 0; i < cartItems.size(); ++i) { 
      descriptions = cartItems.get(i).printItemDescription(); 
     } 

      return descriptions; 
    } 

} 

Dies ist die ItemToPurchase-Klasse.

public class ItemToPurchase { 

    private String itemName = "none"; 
    private String itemDescription = "none"; 

    private int itemPrice=0; 
    private int itemQuantity=0; 


    public ItemToPurchase() { 

    } 


    public void setName(String userItemName) { 
     itemName = userItemName; 
     return; 
    } 


    public void setDescription(String userItemDescription) { 
     itemDescription = userItemDescription; 
     return; 
    } 


    public void setPrice(int userItemPrice) { 
     itemPrice = userItemPrice; 
     return; 
    } 


    public void setQuantity(int userItemQuantity) { 
     itemQuantity = userItemQuantity; 
     return; 
    } 


    public String getName() { 
     return itemName; 
    } 


    public String getDescription() { 
     return itemDescription; 
    } 


    public int getPrice() { 
     return itemPrice; 
    } 


    public int getQuantity() { 
     return itemQuantity; 
    } 


    public void printItemCost() { 
     System.out.print(itemName); 
     System.out.print(" " + itemQuantity + " @ $" + itemPrice); 
     System.out.println(" = $" + (itemQuantity * itemPrice)); 

     return ; 
    } 


    public String printItemDescription() { 
     String descriptionForItem = itemName + ": " + itemDescription; 
     System.out.println(descriptionForItem); 
     return descriptionForItem; 
    } 

} 
+0

versuchen, scanner.nextLine() nach der ersten Eingabe zu geben ... –

+0

Gleiches Problem. next dann nextLine. Ich habe jedoch versucht, zwei Scanner zu verwenden und es funktioniert, aber wie verhalten sich die beiden Scanner? – 12uedhdksh24

+0

überprüfen Sie diesen Link .. Sie werden verstehen: http://StackOverflow.com/Questions/23450524/java-scanner-doesnt-wait-for-user-input –

Antwort

0

Das Problem ist, dass nextInt() nicht den ‚\ n‘ verbrauchen, so dass der nächste Aufruf von nextline() verbraucht es und dann ist es warten, um den Eingang zu lesen.

Sie müssen '\ n' vor dem Aufruf von nextLine() konsumieren;

Für weitere Informationen:

Java Scanner doesn't wait for user input

0

Code:

userChoice = scnr.next().charAt(0); 

die nächste() Teil der Token alle nicht lesen. Wenn Sie den Code debuggen, werden Sie feststellen, dass die Eingabe des Elementnamens den leeren String "" - Teil von scnr.next() erhält.

stattdessen verwenden:

String userChoiceString = scnr.nextLine(); 
userChoice = userChoiceString.charAt(0); 

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#next() für mehr lesen.