2016-04-18 7 views
0

Sorry, dies kann eine einfache Lösung sein, aber ich habe Probleme beim Schreiben von Code für die Erstellung eines Objekts, das Parameter aus einer anderen Klasse Konstruktoren Argumente verwenden wird in Java. Im Wesentlichen habe ich dieses Inv-Objekt, das bestimmte Parameter hat, und ich versuche, ein Warehouse-Objekt zu erstellen, das nur bestimmte Parameter aus dem Inv-Objekt verwendet, die dann in einer Warehouse-Transaktion-Klasse verwandt werden. Könnte ich eine if-Anweisung im Konstruktor der Inv-Objekte machen? Anywho, ich werde dann später dieses Objekt auf einen Stapel schieben, aber ich konnte die Logik für die Erstellung dieses zweiten Objekts nicht entwickeln. Hilfe bitte, ich bin super neu dazu.Versuch zu einem Klassenkonstruktor, einige der Parameter von einem anderen Klassenkonstruktor zu verwenden

public class InvTrans 

{

private int InvTransIndex = 0; 
private Inv[] transactionArray; 

public InvTrans() 
{ 
    this.transactionArray = new Inv[100]; 
} 

public static void main(String args[]) 
{ 
    InvTrans widget = new InvTrans(); 



    Inv order1 = new Inv("March 5th, 2016", "Received", 20, 0001, 2.10, 2.20); 
    Inv order2 = new Inv("March 6th, 2016", "Received", 100, 0002, 2.10, 2.50); 
    Inv order3 = new Inv("March 7th, 2016", "Received", 100, 0003, 2.10, 2.50); 
    Inv order4 = new Inv("March 12th, 2016", "Sold", 140, 0004, 2.40, 2.60); 


    widget.addLine(order1); 
    widget.addLine(order2); 
    widget.addLine(order3); 
    widget.addLine(order4); 



    for (int counter = 0; counter < widget.transactionArray.length; counter++) 
    { 
     widget.transactionArray[counter].display(); 
    } 

} 

public void addLine(Inv a) 
{ 

    transactionArray[InvTransIndex] = a; 
    InvTransIndex = InvTransIndex + 1; 
} 
} 

class Inv 
{ 
String date, type; 
int units, referenceNumber; 
double costPerUnit, pricePerUnit; 

Inv(String d, String t, int u, int r, double c, double p) { 
    this.date = d; 
    this.type = t; 
    this.units = u; 
    this.referenceNumber = r; 
    this.costPerUnit = c; 
    this.pricePerUnit = p; 


    Warehouse warehouseTransaction = new Warehouse(this.date, this.type, this.units, this.costPerUnit); 

} 

public void display() 
{ 
    System.out.println(this.date + "\t" + this.type + "\t" + this.units + "\t\t\t\t\t" + this.referenceNumber + "\t\t\t\t\t" + this.costPerUnit + "\t\t\t" + this.pricePerUnit); 
} 
}  

public class Warehouse 
{ 
    String date, type = ""; 
    int units = 0; 
    double costPerUnit = 0; 
    Warehouse(String d, String t, int u, double c) 
    { 
     date = d; 
     type = t; 
     units = u; 
     costPerUnit = c; 
    } 
} 
+0

hilft Ich habe keine Ahnung, was Sie erreichen wollen. Normalerweise haben Sie ein Lager und Artikel, die im Lager gespeichert sind. –

+0

Wenn Sie das Warehouse-Objekt jedes Mal erstellen möchten, wenn Sie ein Inv erstellen, was ist das Problem mit Ihrer aktuellen Implementierung? Ich würde juste das Warehouse zu einer Klassenvariable machen, damit Sie später darauf zugreifen können. –

+0

@Toaster Ich habe versucht herauszufinden, wie jedes Mal, wenn ein Inv-Objekt erstellt wurde, ein Warehouse-Objekt erstellt wurde. Ich weiß nicht, wie ich das anstellen soll. –

Antwort

0

können Sie das Muster der Fabrik verwenden:

Erstellen Sie eine Klasse InvFactory genannt. Diese Klasse hat Zugriff auf das Warehouse (Übrigens, ein Warehouse ist ein Ort, an dem Sie all Ihre Gegenstände lagern ... Das Erstellen eines neuen Warehouse jedes Mal, wenn Sie ein Inv erstellen, ergibt für mich keinen Sinn. Rufen Sie stattdessen diese Objekte WarehouseItem auf). Wenn Sie eine Inv erstellen möchten, werden Sie die Fabrik rufen anstelle des Inv Konstruktor

public class InvFactory 
{ 
    private LinkedList<WarehouseItem> _warehouse = new LinkedList<WarehouseItem; 

    public CreateInv(String d, String t, int u, int r, double c, double p) 
    { 
     Inv inv = new Inv(d, t, u, r, c, p); 
     _warehouse.add(new WarehouseItem(d, t, u, c); 
     return inv; 
    } 

    public LinkedList<WarehouseItem> getWarehouse() 
    { 
     return _warehouse; 
    } 
} 

In Ihrem Haupt-Methode können Sie dann

Inv order1 = new Inv("March 5th, 2016", "Received", 20, 0001, 2.10, 2.20); 
Inv order2 = new Inv("March 6th, 2016", "Received", 100, 0002, 2.10, 2.50); 
Inv order3 = new Inv("March 7th, 2016", "Received", 100, 0003, 2.10, 2.50); 
Inv order4 = new Inv("March 12th, 2016", "Sold", 140, 0004, 2.40, 2.60); 

von

InvFactory factory = new InvFactory(); 

Inv order1 = factory.CreateInv("March 5th, 2016", "Received", 20, 0001, 2.10, 2.20); 
Inv order2 = factory.CreateInv("March 6th, 2016", "Received", 100, 0002, 2.10, 2.50); 
Inv order3 = factory.CreateInv("March 7th, 2016", "Received", 100, 0003, 2.10, 2.50); 
Inv order4 = factory.CreateInv("March 12th, 2016", "Sold", 140, 0004, 2.40, 2.60); 

ersetzen und An diesem Punkt können Sie alle Elemente in einer Liste durch Aufrufen anzeigen.

factory.getWarehouse(); 

Ich hoffe, das