2017-01-03 5 views
-2

Ich habe eine Klasse namens receipt und eines der Attribute ist ein Array item[] items; und ich habe eine Methode addItem (string name , int quantity , double price). Meine Frage ist, wie kann ich diese Parameter zum Array items[] hinzufügen? Und wie überprüfe ich, ob die Menge mehr als 0 ist?
Was ist der Code? Ist meine Frage klar?
Hers ist mein Code:Hinzufügen eines Elements zu einem Array von Objekt

public boolean addItem(String name, int quantity,double price){ 
if(quantity <= 0){ 
    System.out.println("Item wasnt added"); 
    return false;} 
    else{ 
     item [nItem++];//here is the problem 
    } 
    } 
+0

'neue Posten (variable1, variable2, and_so_on)' könnte die Magie tun. – SomeJavaGuy

+2

Ich nehme an, dass Sie eine neue Instanz Ihrer '' item'' Klasse erstellen müssen, und fügen Sie sie dann dem Array mithilfe einer Zuweisung hinzu. Beide Dinge fehlen. – f1sh

+2

Mögliches Duplikat von [Hinzufügen eines variablen Elements zu einem Array in Java] (http://stackoverflow.com/questions/37239468/adding-a-variable-Element-to-an-array-in-java) –

Antwort

0

Sie könnten ein Element-Objekt als Parameter verwenden, anstatt jedes einzelne Eigenschaften zu übertragen.
Wenn Sie ein Array verwenden, sollten Sie eine Variable haben, die den Index des letzten im Array hinzugefügten Elements speichert.

Artikel konnte einen Konstruktor und erforderlich Getter haben:

public class Item{ 

    private String name; 
    private int quantity; 
    private double price; 

public Item(String name, int quantity, double price){ 
    this.name=name; 
    this.quantity=quantity; 
    this.price=price; 
} 

    // required getters 
} 

public class Receipt{ 
    ... 
    private int lastIndexUsed; // init to zero here 
    ... 
    private Item[] items = ... 
    ... 
    public boolean addItem(Item item){ 
     if(item.getQuantity() <= 0){ 
     System.out.println("Item wasnt added"); 
     return false; 
     } 
     else{ 
      items[lastIndexUsed++] = item; 
     } 
    } 
} 

Wie zu verwenden:

Receipt receipt = new Receipt(); 
receipt.addItem(new Item("itemOne", 10, 50)); 
receipt.addItem(new Item("itemTwo", 20, 80)); 
+0

Ich habe die Variable "MAX_SIZE" auf 100 initialisiert. – jeedo

+0

In addItem() können Sie eine benutzerdefinierte Ausnahme auslösen, wenn diese Bedingung erfüllt ist 'lastIndexUsed == MAX_SIZE-1'. – davidxxx

0

Ich kann keine Antwort finden, die direkt Ihre Frage beantwortet, so hier.
Ich würde ein ArrayList<Item> verwenden, weil es die .add() Methode hat, die Sie aufrufen können. Sie können es später einfach umwandeln in ein Array, wenn es nötig ist, mit .ToArray() (oder so ähnlich):

... 
import java.util.ArrayList; 
... 

ArrayList<Item> items = new ArrayList<>(); 
... 

public boolean addItem(String name, int quantity, double price){ 
    if(quantity <= 0) { 
     System.out.println("Item wasnt added"); 
     return false; 
    } 
    else { 
     //System.out.println("Item was added"); //if you want 
     items.add(new Item(name, quantity, price)); //Create new Item with your parameters... 
     return true; 
    } 
} 

Nicht sicher, ob Java-Syntax korrekt ist, wird die IDE Ihnen helfen.

0

Oder Sie könnten eine Arraylist

public class Item{ 

    private String name; 
    private int quantity; 
    private double price; 

    public Item(String name, int quantity, double price){ 
    this.name=name; 
    this.quantity=quantity; 
    this.price=price; 
    } 
} 

public class Receipt{ 
    private ArrayList<Item> items = new ArrayList<Item>(); 

    public boolean addItem(Item item){ 
     if(item.getQuantity() <= 0){ 
     ... 
     return false; 
     } 
     else{ 
      items.add(item); 
     } 
    } 
} 
0

Sie müssen zwei Dinge tun, verwenden Sie zuerst müssen Sie sicherstellen, dass Sie ein Element haben. Die [] dient nur zum Dereferenzieren (sozusagen Zugriff auf den Speicherort und nicht auf den Verweis auf das Array). Sie müssen ein Objekt zum Hinzufügen erstellen. Das zweite, was Sie tun müssen, ist sicherzustellen, dass Platz vorhanden ist. Sie dürfen nicht auf den Speicher zugreifen, der nicht vom Array reserviert wurde.

public class Receipt { 
    private int nItems; 
    private Item[] items; 

    Receipt() { 
     nItems = 0; 
     items = new Item[10]; // Set initial size 
    } 

    /** 
     Set initial size of array 
    */ 
    Receipt(int initSize) { 
     if (initSize <= 0) { 
      throw new IllegalArgumentException("initSize must be larger than 0"); 
     } 
     nItems = 0; 
     items = new Item[initSize]; // Set initial size 
    } 

    public void addItem(Item item) { 
     reserve(); 
     items[nItems] = item; 
     nItems++; // Bad experiences of incrementing while dereferencing 
    } 

    /** 
     Make sure there is enough space in items to add an ingredient 
    */ 
    private void reserve() { 
     if (items.length == nItems) { 
      Item [] tmp = new Item[nItems*2]; // Double size if array is full. 
      for (int i=0; i<nItems; i++) { // Copy the old elements to new array 
       tmp[i] = items[i]; 
      } 
      items = tmp; // Replace the old array with the new array. 
     } 
    } 
} 
0
public boolean addItem(String name, int quantity,double price) 
{ 
    if(quantity <= 0) 
    { 
    System.out.println("Item wasnt added"); 
    return false; 
    }else{ 
     //you would have to create new object before adding it to array. 
     item tempItem=new item(name,quantity,price); 
     items[nItem++]=tempItem; 
      } 
} 
+0

Bitte formatieren Sie den Text. – patrik

+0

Ich bin neu zu stackoverflow und lerne immer noch.Ich werde das nächste Mal mein Bestes geben. –

+0

Es ist nicht so schwer, die Edit-Taste zu drücken und es richtig zu machen. Entschuldigung, aber -1 – patrik

Verwandte Themen