2016-10-26 5 views
-1

私はprintMenu(cart, scnr).のJavaのArrayListやクラス

を渡そうと。しかし、例えばてる「」>コードが印刷さ
アイテム名を入力します。項目名を服用する前に

: アイテムの説明を入力し!!!!

ありがとうございます。

これはメインクラスです:

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 

これは私のShoppingCartです!

しかし、なぜそれがメインで動作しないのかわかりません。また、名前で商品を削除するにはどうすればよいですか?

私はこのロジックを試みたが、うまくいきませんでした:

(){ 場合は()

{}

については、私は、ブールフラグを持っているべきですか?またはカウント?道に迷いました。

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; 
    } 

} 

これはItemToPurchaseクラスです。

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

最初の入力後にscanner.nextLine()を実行してみてください... –

+0

同じ問題。 next nextLineしかし、私は2つのスキャナを使用してみましたが、それは動作しますが、2つのスキャナはどのように動作しますか? – 12uedhdksh24

+0

このリンクを確認してください..あなたは理解します:http://stackoverflow.com/questions/23450524/java-scanner-doesnt-wait-for-user-input –

答えて

0

問題はnextInt()は「\ n」を消費しないということですので、nextLineの次の呼び出しは()、それを消費し、入力を読み取るために待機しています。

nextLine()を呼び出す前に '\ n'を使用する必要があります。詳細について

Java Scanner doesn't wait for user input

0

コード:

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

次()の部分はすべてのトークンを読み取りません。コードをデバッグすると、項目名を入力すると空の文字列 ""が得られることがわかります。これはscnr.next()の一部です。

代わりにこれを使用する:

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

は、より多くのためにhttps://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#next()をお読みください。