2016-01-15 25 views
1

我正在編寫一個程序來模擬咖啡店中的一個系統,其中接受客戶訂單的人員爲每個客戶提供一個令牌編號並進入系統令牌編號的顧客以及他/她已經訂購的物品。 recordOrder函數執行此操作,該操作允許輸入訂單詳細信息,訂單由票證ID,tID和表示訂單中項目的字符串的arrayList表示。java:在構造函數中增加ID以顯示在主

這是我迄今所做的:

import java.util.ArrayList; 
import java.util.LinkedList; 
import java.util.List; 
import java.util.Queue; 
import java.util.Scanner; 

public class Ques4 { 

private static class Order{ 
    private static int tID=0; 
    private int orderId; 
    private String itemName; 

    public Order(String itemName){ 
     tID++; 
     this.orderId=tID; 
     this.itemName=itemName; 

    } 

    public int getOrderId(){ 
     return orderId; 
    } 

    public void setOrderId(int orderId){ 
     this.orderId=orderId; 
    } 

    public int gettID() { 
     return tID; 
    } 

    public void settID(int tID) { 
     this.tID = tID; 
    } 

    public String getItemName() { 
     return itemName; 
    } 

    public void setItemName(String itemName) { 
     this.itemName = itemName; 
    } 

    /*public String toString(){ 
     return "Token num: "+gettID()+ " Item name: "+getItemName(); 
    }*/ 

} 

public static void main(String[] args) { 
    ArrayList<Order> listOfItems= new ArrayList<Order>(); 
    recordOrder(listOfItems); 

} 

    private static void recordOrder(ArrayList<Order> listOfItems){ 

     int n, num_Orders; 
     String item = null; 
     Scanner sc= new Scanner(System.in); 
     System.out.println("Enter the number of orders."); 
     num_Orders= sc.nextInt(); 

    for(int j=0; j<num_Orders;j++){ 
     System.out.println("Enter the number of items for token number "+(j+1)); 
     n=sc.nextInt(); 
     sc.nextLine(); 

    System.out.println("Enter the items: "); 

    for(int i=0; i<n;i++){ 
     item=sc.nextLine(); 
    } 
    listOfItems.add(new Order(item)); 
    } 

for(Order list: listOfItems){ 
    System.out.println("Token num: "+list.gettID()+ " Item name: "+list.getItemName());} 
     } 
} 

在我的訂單班,我有自動遞增的令牌數量,使得第一順序將有1令牌數,二階數字2等等。問題在於令牌數量增加到訂單數量並且訂單數量作爲令牌數字被打印出來。這是假設我輸入訂單,NUM_ORDERS的數量,3,我得到 令牌NUM的輸出:3項目名稱:乳酪蛋糕

令牌編號:3產品名稱:薯條

令牌民:3商品名稱:漢堡

正如我在上面的輸出中所顯示的,只有我爲特定訂單輸入的一個和最後一個項目正在打印輸出。

編輯:

我想輸出是假設我輸入2作爲訂單數量,我將被提示輸入項目數爲令牌數1爲第一順序和數量對於令牌號碼2的項目是第二順序。我將進一步提示分別爲標記號碼1和2輸入項目名稱。這是我想要顯示的內容:

輸入訂單數量。

輸入項令牌數的數目:1

輸入項:

薯條

乳酪蛋糕

輸入的數令牌號碼的項目:2

輸入項目:

漢堡

玉米餅

令牌人數:1項目名稱:薯條芝士

令牌編號:2項目名稱:漢堡包玉米餅

我是新來的數據結構,我會大大感謝任何幫助,建議和建議。 謝謝。

回答

5
public Order(String itemName){ 
    tID++; 
    this.tID=tID; 
    this.itemName=itemName; 
} 

從這個構造函數看起來你打算有兩個成員在Order類,一個靜態計數器和一個實例變量作爲標識符,但你使用相同的靜態變量兩種。

你需要兩個變量:

private static int tID=0; 
private int ID; 

然後在構造函數中:

public Order(String itemName){ 
    tID++; 
    this.ID=tID; 
    this.itemName=itemName; 
} 

當然,你必須改變getter和setter太(他們應該使用ID,不tID)。

編輯:

人們似乎在這個代碼中的另一個問題:根據您的問題的描述

for(int i=0; i<n;i++){ 
    item=sc.nextLine(); 
} 
listOfItems.add(new Order(item)); 

,想要將項目添加到循環內的列表:

for(int i=0; i<n;i++){ 
    item=sc.nextLine(); 
    listOfItems.add(new Order(item)); 
} 
+0

謝謝..我編輯了我的帖子..你能檢查嗎? – Tia

+0

@Diksha當你打印輸出時,你仍然在使用'list.gettID()'。你應該使用'list.getOrderId()'。事實上,我不確定你甚至需要靜態計數器的getter和setter。 – Eran

+0

好吧,我將它改爲'list.getOrderId()',它工作正常,但爲什麼只輸入最後一個項目被打印出來? – Tia