2015-10-15 50 views
-1

我需要做些什么来获取System.out.println(part2);显示ID,名称,库存等级,单位价格,part0库存水平和part1库存水平?我只能起床,直到零件0和1物品,他们的库存量都不会打印出来。如何打印多个对象值

主类

public class TestAssembledPart {  
    public static void main(String args[]) { 
     // Constructing two Part objects (the base parts) 
     Part part0 = new Part("p101", "Crank", 218, 12.20);   
     Part part1 = new Part("p102", "Pedal", 320, 14.30);   

     // Constructing AssembledPart object assembled from p101 & p102   
     AssembledPart part2 = new AssembledPart("p183", "Crank & Pedal",80,3.50,part0,part1);   

     System.out.println(part2); //<--------HERE 

     // replenishing stock by 100 items   
     part2.replenish(100); 

     // Supplying the maximum possible assembled parts - combination   
     // of existing parts and base parts available for assembly   
     System.out.println("Supplying max number of (assembled) part");   

     int totalAvail = part2.getStockLevel() + part2.getAvailForAssembly(); 
     double cost = part2.supply(totalAvail);  

     if (cost > 0)   
      System.out.println(part2.getID() + " Total cost for " 
         + totalAvail + " items = " + cost);   
     else    
      System.out.println(part2.getID() + " Insufficient parts to supply " + totalAvail); 

     // printing the stock level for assembled and base parts   
     System.out.println(part0.getID() + " (base part) Available qty=" + part0.getStockLevel());   
     System.out.println(part1.getID() + " (base part) Available qty=" + part1.getStockLevel());  
     System.out.println(part2.getID() + " (assembled) Available qty=" + part2.getStockLevel()); 
     // Attempting to supply another 10 items (bound to fail)   
     System.out.println("Trying to supply another 10 parts"); 

     int qty = 10;   
     cost = part2.supply(qty);   

     if (cost > 0)   
      System.out.println(part2.getID() + " Total cost for " + qty + " items = " + cost);   
     else  System.out.println(part2.getID() + " Insufficient parts to supply " + qty); 
    } 
} 

AssembledPart

public class AssembledPart extends Part { 

    private Part basica; 
    private Part basicb; 
    private int assembledstocklevel; 

    public AssembledPart(String id, String name, int stocklevel, double unitprice, 
    Part part0, Part part1) { 

     super(id, name, stocklevel, unitprice); 

     this.basica = part0; 
     this.basicb = part1; 
    } 

    public void replenish(int qty){ 
     super.replenish(qty); 
     //super.stocklevel = super.stocklevel + qty; 
    } 

    public void setAvailForAssembly(int Part){ 
     assembledstocklevel = assembledstocklevel; 
    } 

    public int getAvailForAssembly(){ 
     return assembledstocklevel; 
    } 

    public String toAssembledString() { 
     return super.toString() + " | " + basica.getName() + " | " + basicb.getName(); 
    } 

    public static String toAssembledString(Collection<AssembledPart> aparts { 
     String s = ""; 
     for (AssembledPart apart: aparts){ 
      s += apart.toAssembledString() + "\n"; 
     } 
     return s; 
    } 
} 

部分

public class Part { 

    private String id; 
    private String name; 
    protected int stocklevel; 
    private double unitprice; 
    private int qty = 6000; 

    public Part(String id, String name, int stocklevel, double unitprice){ 
     this.id = id; 
     this.name = name; 
     this.stocklevel = stocklevel; 
     this.unitprice = unitprice; 
    } 


    String partsAvailable() 
    { 
     //String newLine = System.getProperty("line.separator"); 
     return (id + "\t" + name + "\t " + stocklevel + "\t\t " + unitprice); 
    } 


    public String getID() { 
     return id; 
    } 

    public void setID(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getStockLevel(){ 
     return stocklevel - qty; 
    } 

    public void setStockLevel(int stocklevel){ 
     this.stocklevel = stocklevel; 
    } 

    public double getUnitPrice(){ 
     return unitprice; 
    } 

    public void setUnitPrice(double unitprice){ 
     this.unitprice = unitprice; 
    } 

    public void replenish(int qty){ 
     this.stocklevel = stocklevel + qty; 
    } 

    public double supply(int qty){ 
     return unitprice * qty; 
    } 

    public String toString() { 
     return id + " | " + name + " | " + stocklevel + " | " + unitprice; 
    } 

    public static String toString(Collection<Part> parts){ 
     String s = ""; 
     for (Part part: parts){ 
      s += part + "\n"; 
     } 
     return s; 
    } 
} 

object names not appearing

+0

你的调试器在说什么? –

+0

一跑了,什么也没有 – danielb

回答

1

如果你打电话System.out.println(Object),它通过调用String.valueOf(Object)它到底会叫Object#toString或任何类的覆盖版本的String toString()推移。

所以,你将不得不为了得到结果做的是覆盖方法在AssembledPart这样

@Override 
public String toString() { 
    return super.toString() + " | " + basicb.getStockLevel() + " | " + basica.getStockLevel(); 
} 
+0

噢,我得到你,谢谢你 – danielb

0

AssembledPart不执行toString方法,所以使用Part.toString()方法:
id + " | " + name + " | " + stocklevel + " | " + unitprice
而这正是你的输出;-)。