2012-02-26 128 views
0

我有一個任務,我必須創建三個類,一個執行所有I/O的客戶端類,一個維護catalogItem對象列表的catalog類和一個定義單個項目的catalogItem類商店的目錄。一個java數組對象

我試着從一開始就簡單地開始創建數組,並確保它在接受數據之前,我轉到其餘任務。我能夠毫無問題地編譯它,但是當我嘗試顯示數組時,我什麼都沒有。

import java.util.Scanner; 

public class lab3 
{ 
    public static void main(String args[]) 
    { 
     Scanner in = new Scanner(System.in); 

     Catalog catalog = new Catalog(); 

     boolean endCatalog = false; 
     while (!endCatalog) 
     { 
      System.out.println("Please choose and option: \n" 
      + "1 - Display all items of the catalog\n" 
      + "2 - Display an item by keyword\n" 
      + "3 - Add an item to the catalog\n" 
      + "4 - Remove an item from the catalog\n" 
      + "5 - Change the cost of one item in the catalog\n" 
      + "6 - Change the cost of all items in catalog by percent\n" 
      + "7 - Exit"); 

      int choice = in.nextInt(); 

      switch (choice) { 
      case 1: System.out.println(catalog.displayAll()); break; 
      case 2: System.out.println("Display keyword"); break; 
      case 3: System.out.println("Add item:\nEnter ID: "); 
         int newId=in.nextInt(); 
         System.out.println("Enter description: "); 
         String newDesc=in.next(); 
         System.out.println("Enter cost: "); 
         double newCost=in.nextDouble(); 
         catalog.add(newId, newDesc, newCost); break; 
      case 4: System.out.println("Remove item"); break; 
      case 5: System.out.println("Change cost of one item"); break; 
      case 6: System.out.println("Change cost by %"); break; 
      case 7: endCatalog=true; break; } 

     } 
    } 
} 


class Catalog 
{ 
    final static int MAX = 100; 
    private CatalogItem[] catalogItems; 
    int inUse; 

    public Catalog() 
    { 
     catalogItems=new CatalogItem[MAX]; 
    } 
    public void add(CatalogItem newItem) 
    { 
     inUse = 0; 
     if(inUse<MAX) { 
      catalogItems[inUse] = newItem; 
      inUse++; } 
    } 
    public void add(int newId, String newDesc, double newCost) 
    { 
     CatalogItem newItem = new CatalogItem(newId, newDesc, newCost); 

    } 
    /*public void remove(int id) 
    { 

    } 
    public String find(String keyword) 
    { 

    } 
    public void changeCost(int id, double percent) 
    { 

    } 
    public void increaseCost(double percent) 
    { 

    } 
    public String toString() 
    { 
    } 
    public boolean equals(Catalog obj) 
    { 

    }*/ 

    public String displayAll() 
    { 
     String str = ""; 

     for (int i=0; i<inUse; i++) { 
      str = str + "\n" + catalogItems[i]; } 

     return str; 
    } 
} 



class CatalogItem 
{ 
    private int itemID; 
    private String description; 
    private double cost; 

    public CatalogItem() 
    { 
     itemID = 1; 
     description = " "; 
     cost = 0.0; 
    } 

    public CatalogItem(int newID, String newDesc, double newCost) 
    { 
     itemID = newID; 
     description = newDesc; 
     cost = newCost; 
    } 

    public int getItemID() 
    { 
     return itemID; 
    } 

    public void setItemID(int newID) 
    { 
     itemID=newID; 
    } 

    public String getDescription() 
    { 
     return description; 
    } 

    public void setDescription(String newDesc) 
    { 
     description=newDesc; 
    } 

    public double getCost() 
    { 
     return cost; 
    } 

    public void setCost(double newCost) 
    { 
     cost=newCost; 
    } 

    public String toString() 
    { 
     return itemID + ", " + description + ", " + cost; 
    } 

    public boolean equals(CatalogItem obj) 
    { 
     return false; 
    } 
} 
+0

您是否添加項目? – m0skit0 2012-02-26 19:37:41

回答

3

這裏的問題:

public void add(int newId, String newDesc, double newCost) 
{ 
    CatalogItem newItem = new CatalogItem(newId, newDesc, newCost); 

} 

在創建後會發生什麼newItem

+1

這是留給讀者的練習嗎? :) – Paul 2012-02-26 19:45:47

+0

是的,我真的很困惑與陣列,所以我切換到使用ArrayList。現在我有... public catalog() { ArrayList catalogItems = new ArrayList (MAX); (newId,String newDesc,double newCost) } \t \t public void add(int newId,String newDesc,double newCost) {ItemItem newItem = new CatalogItem(newId,newDesc,newCost); \t \t } public void add(CatalogItem newItem) { catalogItems.add(newItem); } 所以newItem被添加到數組中。 我仍然有點困惑與訪問ArrayList的元素。如果我這樣做,我將如何操作這些物品? – user1234267 2012-02-26 22:07:03

+0

使用'ArrayList'而不是原始數組很好的調用。但是仍然存在一個問題:在你的'add(int,String double)'方法中,你實例化一個新的'CatalogItem',但你實際上沒有做任何事情。首先考慮僞代碼:1)創建一個新項目2)將它添加到列表中。現在確保你的代碼做到了。 – 2012-02-26 22:20:11

1

沒有以往任何時候都加入到項目:

private CatalogItem[] catalogItems; 

之所以如此,是因爲只調用此方法:

public void add(int newId, String newDesc, double newCost) 
{ 
    CatalogItem newItem = new CatalogItem(newId, newDesc, newCost); 

} 

這一個永遠不會調用實際上是嘗試添加一些方法到數組:

public void add(CatalogItem newItem) 
    { 
     inUse = 0; 
     if(inUse<MAX) { 
      catalogItems[inUse] = newItem; 
      inUse++; } 
    } 

從長遠來看這種方法也是不行的,因爲項目常是增補到索引0就是這樣,因爲首先你總是設置:INUSE = 0

1

調用此方法來添加目錄項:

public void add(int newId, String newDesc, double newCost) 
{ 
    CatalogItem newItem = new CatalogItem(newId, newDesc, newCost); 

} 

但是,正如我們所看到的,這實際上不會對它創建的對象做任何事情。你的意思是讓這個超載的add()叫另一個?這將是一個很好的設計。

而且,在add()其他版本的,你這樣做:既然你每天add()被調用時重置inUse

inUse = 0; 

,你的陣列將永遠不會包含多個項目。你明白這是爲什麼嗎?你應該把這條線出去。

相關問題