我已經設置了一個基本上是餐廳模型的Java任務。除了最困難的部分之外,我大多完成了它。它基本上是處理數組和對象;有幾個部分我不確定。我已經完成了實現ArrayList的類和使用Map/HashMap的類。Java數組 - 不確定方法
這是我到目前爲止有:
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個產品,那麼就會出錯。
第二個問題是addItem函數;我知道我在這裏編寫的邏輯的問題是,產品正在寫入的數組的索引只會與數量一樣大,因此數組的索引是產品寫入的位置;不搜索'this.order'並找到一個NULL數組值並將該產品寫入數量限制器指定的次數。我不確定該去哪裏。
下一個問題是我想象中的removeItem函數對addItem使用類似的邏輯。我沒有在這裏寫任何東西,因爲我的嘗試是錯誤的,我無法獲得addItem函數來開始工作,所以我離開了這個。
最後一個問題是toString方法。 toString方法獲得整個數組的定義(SAY 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等。但它正在整個陣列和8他們是空值;我不確定如何解決這個問題。無論如何圍繞陣列並定義其長度;在我上面的例子中,我只添加了2個項目,但是我聲明瞭一個長度數組[10];我如何知道定義Array的長度?如果用戶在我上面的示例中添加了20個啓動器,程序將崩潰...
numberOfItems & totalCost功能在我用主方法測試它們時起作用。
任何指導指向我在正確的方向將不勝感激。 謝謝,
編輯: 我覺得我有點不清楚;要求是我要根據UML圖創建幾個類。在這我必須創建3個類都實現一個Order界面。這三個類是(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();
}
}
我不明白爲什麼你不能在內部使用'ArrayList'。它是否明確禁止?你正試圖用一個靜態數組來模擬一個動態數組,這正是'ArrayList'所做的。 – Jack
['ArrayList'](http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html)是一個「動態數組」,它爲您提供了一個自動調整大小的「數組「,其中還包括添加/插入和刪除內置方法。 – MadProgrammer
我根本沒有看到你使用ArrayList。使用ArrayList是一種在您不知道其大小時創建集合的方法。 – jahroy