基本的にレストランのモデルである Java の割り当てが設定されています。最も難しい部分を除いて、ほとんど完了しました。基本的に配列とオブジェクトを扱っています。よくわからない部分がいくつかあります。ArrayList を実装するクラスと、Map/HashMap を使用する別のクラスを既に完成させています。
これは私がこれまでに持っているものです:
package restaurant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class ArrayOrder implements Order {
Product order[];
public ArrayOrder() {
this.order = new Product[1000];
}
public Iterator<Product> iterator() {
}
public void addItem(Product product, int quantity) {
/*for(int i = 0; i < quantity; i++)
{
this.order[i] = product; // WRONG CODE
}*/
}
public void removeItem(Product product) {
}
public int numberOfItems() {
int length = 0;
for(int i = 0; i < this.order.length; i++){
if(this.order[i] != null) {
length++;
}
}
return length;
}
public int totalCost() {
int resultcost = 0;
for(int i = 0; i < this.order.length; i++) {
if(this.order[i] != null) {
resultcost += this.order[i].getCost();
}
}
return resultcost;
}
public String toString() {
return Arrays.toString(this.order);
}
public int hashCode() {
}
public boolean equals() {
}
}
未定義の長さの配列を作成できないことを読みましたが、これをどのように処理するかわかりません。配列を特定の数値に初期化すると、エラーが発生する可能性があります。配列を [10] に初期化し、ユーザーが 20 個の製品を追加すると、エラーが発生します。
2 番目の問題は addItem 関数です。私がここに書いたロジックの問題は、製品が書き込まれている配列のインデックスが数量と同じ大きさになるだけであるため、数量の配列インデックスが製品が書き込まれている場所であることを知っています。「this.order」を検索せず、NULL 配列値を見つけて、数量パラメーターで指定された回数だけ積を書き込みます。これでどこに行くべきかわかりません。
次の問題は、addItem と同様のロジックを使用していると思われる removeItem 関数です。私の試みが間違っていて、addItem関数を最初に機能させることができなかったため、ここには何も書いていません。
最後の問題は toString メソッドです。toString メソッドは、定義された配列全体を取得します (this.order = new Product[10] と言います)。
例えば:
//int id, String name, String description, int cost, int serves
Starter s = new Starter(25, "Salad", "A traditional English salad", 750, 1);
Order o3 = new ArrayOrder();
o3.addItem(s, 2);
メソッドtoString
は以下を生成します。
[Salad - A traditional English salad (serves 1) $7.50, Salad - A traditional English salad (serves 1) $7.50, null, null, null, null, null, null, null, null]
null、null、nullなどの前に停止したいのですが、配列全体を取り込んでおり、そのうち8つはnull値です。これを修正する方法がわかりません。とにかく配列の周りにあり、その長さを定義しています; 上記の例では、2 つの項目しか追加していませんが、長さ [10] の配列を宣言しました。配列を定義する長さをどのように知ることができますか? 上記の例でユーザーが 20 個のスターターを追加すると、プログラムがクラッシュします...
numberOfItems & totalCost 関数は、メイン メソッドでテストしたときに機能します。
私を正しい方向に向けるためのガイダンスは大歓迎です。ありがとう、
編集:私は少し不明確だったと思います。要件は、UML ダイアグラムに基づいていくつかのクラスを作成することです。ここで、Order インターフェイスを実装する 3 つのクラスを作成する必要があります。3 つのクラスは (ListOrder、ArrayOrder、MapOrder) です。MapOrder と ListOrder を実行しましたが、ArrayOrder に固執しています。
これが私のArrayListクラスです:
package restaurant;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListOrder implements Order{
private List<Product> order;
public ListOrder() {
this.order = new ArrayList<Product>();
}
public Iterator<Product> iterator() {
return order.iterator();
}
public void addItem(Product product, int quantity) {
for(int i = 0; i < quantity; i++) {
this.order.add(product);
}
}
public void removeItem(Product product) {
this.order.remove(product);
}
public int numberOfItems() {
return this.order.size();
}
public int totalCost() {
int resultcost = 0;
for(Product p : order)
{
resultcost += p.getCost();
}
return resultcost;
}
public String toString() {
return this.order.toString();
}
}