2015-10-15 5 views
-1

Что мне нужно сделать, чтобы получить System.out.println (part2); для отображения идентификатора, имени, уровня фонда, единицы цены, уровня запаса части и уровня 1 партии? Я только встаю до части 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

a запустил его и ничего – 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.
И это именно ваш выход ;-).

Смежные вопросы