2014-12-29 65 views
0

我想修改我的倉庫類中的toString方法,這樣它會從我的主類返回如何修改一個ArrayList的toString方法

Bin B0: 
Dress Shoe - Loafer (size 10-1/2), SKU 1234-13: 5 
Boot - Riding (size 8), SKU 1234-5: 5 
Bin B1: 
Bin B2: 
Dress Shoe - Wing-tip (size 10), SKU 1234-3: 10 
Bin B3: 
Casual Shoe - Sandal (size 9-1/2), SKU 1234-0: 8 
Bin B4: 

public static void main(String[] args) 
{ 
    Warehouse w = new Warehouse(10); 
    Footwear d0 = new DressShoe("Loafer", 10.5, "1234-13"); 
    Footwear b = new Boot("Riding", 8, "1234-5"); 
    Footwear c = new CasualShoe("Sandal", 9.5, "1234-0"); 
    Footwear d1 = new DressShoe("Wing-tip", 10, "1234-3"); 
    w.stockWarehouse(d0, 5, "B0"); 
    w.stockWarehouse(b, 5, "B0"); 
    w.stockWarehouse(c, 8, "B3"); 
    w.stockWarehouse(d1, 10, "B2"); 
    System.out.println(w.toString()); 
} 

的stockWarehouse方法是「隱藏」而沒有給出。 DressShoe,Boot,CasualShoe和DressShoe是鞋類的擴展類。

鞋類是一種採用String風格,雙倍大小和String SKU的類。它的toString方法返回鞋信息,如:

Dress Shoe - Loafer (size 10-1/2), SKU 1234-13 

斌是一類是發生在字符串名稱和創建內容的ArrayList,它的toString方法返回斌數量和內容,如:

[SKU 1234-13: 5, SKU 1234-13: 5] 

這是我的倉庫類。

public class Warehouse { 
    private int myBinMax; 
    private ArrayList<Footwear> myCatalog; 
    private ArrayList<Bin> myBins; 

    public Warehouse (int binMax) 
    { 
     myBinMax = binMax; 
     myCatalog = new ArrayList<Footwear>(); 
     myBins = new ArrayList<Bin>(5); 
     for(int i=0; i<5; i++) 
     { 
      addBin(); 
     } 
    } 

    public void addBin() 
    { 
     myBins.add(new Bin("B" + myBins.size())); 
    } 

    @override 
    public String toString() 
    { 
     String b0 = myBins.get(0).getName() + "\n" + 
     myCatalog.get(0).toString() + ", " + myBins.get(0).getContents().get(1) + "\n"; 

    int b0size = myBins.get(0).getContents().size(); 

    return b0size + b0; 
    }  
} 

編輯加入鞋類類

public class Footwear 

{ 

private String myStyle; 
private double mySize; 
private String mySKU; 

public Footwear (String style, double size, String SKU) 

{ 
    myStyle = style; 
    mySize = size; 
    mySKU = SKU; 
} 


public String getStyle() 

{ 
    return myStyle; 
} 


public double getSize() 

{ 
    return mySize; 
} 


public String getSKU() 

{ 
    return mySKU; 
} 


public String getType() 

{ 
    return "Unspecified"; 
} 

public String printSize() 

{ 
    int x = (int)(getSize()); 
    if (getSize() % x == 0.5) 
    return getStyle() + " (size " + x + "-1/2)"; 

    else 
    return getStyle() + " (size " + x + ")"; 

} 

public String toString() 

{ 
     int x = (int)(getSize()); 
     String ShoeInfo = ""; 
     if (getSize() % x == 0.5) 
     ShoeInfo = getStyle() + " (size " + x + "\u00bd" + ")"; 
     else 
     ShoeInfo= getStyle() + " (size " + x + ")";  

    if (!(getType().equals("Unspecified"))) 
    return getType() + " - " + ShoeInfo; 

    else 
    return ShoeInfo; 

} 

} 
+0

可以顯示Bin類的代碼嗎? – Eran

+5

對於toString,可以按照需要的順序添加所需的位。沒有什麼魔法可以做到這一點。 –

+0

@Eran,我確定我已經添加了Bin類。 – Oninez

回答

0

這裏是您的解決方案 新倉庫toString方法

@Override 
    public String toString() 
    { 
     String output = ""; 
     for(Bin b : myBins) 
     { 
      System.out.print(b.toString()); 
      if(!b.getContents().isEmpty()) 
      { 
      for(BinItem bi : b.getContents()) 
      { 
       System.out.println(findSKU(bi.getSKU()) + ", " + bi.toString()); 
      } 
      } 
     } 
     return " "; 
    } 
    private String findSKU(String SKU) 
    { 
     for(Footwear f : myCatalog) 
     { 
      if(SKU.equals(f.getSKU())) 
       return f.toString(); 
     } 
     return ""; 
    } 

新賓toString方法

@Override 
public String toString() 
{ 
    String s = "Bin " + myName + ":\n"; 
    return s;  
}   

要完成這一點,你需要另一個變量添加到一個名爲字符串shoeType製鞋類和具有鞋類的子類將它設置爲相應的類型,即着裝鞋,休閒鞋

新鞋toString方法

@Override 
    public String toString() 
    { 
     int x = (int)(getSize()); 
     String ShoeInfo = ""; 
     if (getSize() % x == 0.5) 
      ShoeInfo = shoeType + " - " + myStyle + " (size " + x + "\u00bd" + ")"; 
     else 
      ShoeInfo= shoeType + " - " + myStyle + " (size " + x + ")";  
     if (!(getType().equals("Unspecified"))) 
      return getType() + " - " + ShoeInfo; 
     else 
      return ShoeInfo; 
    } 

具有上述變化的示例輸出。

Bin B0: 
Dress Shoe - Loafer (size 10½), SKU 1234-13: 5 
Boot - Riding (size 8), SKU 1234-5: 5 
Bin B1: 
Bin B2: 
Dress Shoe - Wing-tip (size 10), SKU 1234-3: 10 
Bin B3: 
Casual Shoe - Sandal (size 9½), SKU 1234-0: 8 
Bin B4: 
Bin B5: 
Bin B6: 
Bin B7: 
Bin B8: 
Bin B9: 
+0

我在底部添加了鞋類。我試過這個,並給了我一個錯誤「java.lang.IndexOutOfBoundsException:Index:4,Size:4」 – Oninez

+0

你的bin數組列表更小..但是你的鞋子可能是導致問題的原因之一。這是一個有趣的難題。 –

+0

這太棒了,非常感謝你!我一直在爲這個小項目工作好幾天,而且我今天真的放棄了......只是檢查一下,看到你已經更新了它! 我想添加的一件事是我無法覆蓋我的Bin和Footwear方法,只能編輯倉庫類。我將bin名稱打印輸出修改爲'System.out.print(b.getName()+「:」+「\ n」); ' 再一次,非常感謝! – Oninez

0

我會在你的倉庫類使用StringBuilder類解決這個問題。這個類允許字符串操作,例如追加,插入和刪除。

這裏是僞代碼,應該讓你在正確的軌道

StringBuilder output = new StringBuilder(); 
output.append(myBins.get(x).toString()); 
ouput.replace(0, output.length, "/n"); 
int colon = output.charAt(':'); 
output.insert(colon, "/n"); 
output.insert(colon +1, catOut); 

您可能需要tweek它,但是這應該給你的想法