2017-01-03 20 views
-2

私はreceiptというクラスがあり、属性の1つは配列item[] items;であり、方法はaddItem (string name , int quantity , double price)です。私の質問は、これらのパラメータをアレイitems[]にどのように追加できますか?そして、数量が0以上であるかどうかをどうやって確認するのですか?
コードは何ですか?私の質問は明確ですか?
ハーズは私のコードです:オブジェクトの配列に要素を追加する

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

'新しい項目(変数1、変数2、and_so_on)'マジックを行う可能性があります。 – SomeJavaGuy

+2

'' item''クラスの新しいインスタンスを作成し、それを割り当てを使って配列に追加する必要があると仮定します。これらの両方が欠けている。 – f1sh

+2

可能な複製[Javaで配列に可変要素を追加する](http://stackoverflow.com/questions/37239468/adding-a-variable-element-to-an-array-in-java) –

答えて

0

あなたはむしろ、個々の特性を送信するよりも、パラメータとしてアイテムオブジェクトを使用することができます。
配列を使用する場合、配列に追加された最後の要素のインデックスを格納する変数が必要です。ので、ここで、

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

変数 "MAX_SIZE"が100に初期化されています。 – jeedo

+0

addItem()では、この条件がtrueのときにカスタム例外をスローすることができます。 'lastIndexUsed == MAX_SIZE-1'。 – davidxxx

0

私が直接あなたの質問に答える、答えを見つけることができません。

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; 
     } 
    } 
} 

を使用する方法:

項目は、コンストラクタと必要なゲッターを持つことができます。
ArrayList<Item>は、電話できる方法が.add()であるため使用します。あなたがする必要がある場合は、後で簡単に.ToArray()(またはそのようなもの)で、配列に変換することができます

... 
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; 
    } 
} 

ないJava構文が正しいかどうか、あなたのIDEがお手伝いします確認してください。

0

それとも、あなたが最初にあなたがアイテムを持っていることを確認する必要がある2つのことを行う必要があり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

を使用することができます。 []は逆参照のためのものです(つまり、配列への参照ではなくメモリ位置へのアクセス)。追加するアイテムを作成する必要があります。次に必要なことは、スペースがあることを確認することです。配列によって予約されていないメモリにはアクセスできません。

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

テキストを書式設定してください。 – patrik

+0

私はstackoverflowに慣れていて、まだ学習しています。次回はベストを尽くします。 –

+0

編集ボタンを押して右にするのは難しくありません。申し訳ありませんが-1 – patrik

関連する問題