[英]How to call instance method in predefined class from another class in android
[英]How can OOP be implemented to call an instance method from one class to be stored in an array in another instance method in a different class?
為了進一步理解我的問題:
我在Java教科書中正在處理一個問題,它要求我編寫一個名為GroceryList的類,該類表示從市場上購買的商品的列表,還有另一個名為GroceryItemOrder的類,該類表示購買特定商品的請求以給定的數量(例如: 四個橙子 )。 根據進一步的指導,我將開發一個客戶端,以測試並打印所有已實現方法的結果。
免責聲明:我不是要任何人為我做這個問題。 我只是想請一位指導者闡明如何根據客戶GroceryListClient的指令將我的GroceryItemOrder類的實例方法實現到GroceryList類中。
我的GroceryList類的代碼:
public class GroceryList_test {
public GroceryList_test() {
GroceryItemOrder_test[] GroceryList = new GroceryItemOrder_test[10];
}
public void add(GroceryItemOrder_test item) {
GroceryItemOrder_test[] GroceryList = new GroceryItemOrder_test[10];
GroceryList[1] = item;
System.out.println(GroceryList[1]);
}
/*public double getTotalCost(GroceryItemOrder_test item) {
}*/
}
在實例方法下add(GroceryItemOrder_test item) :
我希望此方法每次在GroceryListClient客戶端中指示每次從GroceryItemOrder_test(字符串名稱,整數數量,雙倍priceperunit)將項目訂單動態加載到數組時,稍后將訪問該字段以計算總成本。下面的TotalCost()實例方法。
我的GroceryItemOrder類的代碼:
public class GroceryItemOrder_test {
String itemID;
int NumberofItems;
double priceperunit;
public GroceryItemOrder_test(String name, int quantity, double pricePerUnit) {
this.itemID = name;
System.out.println("Item: " + itemID);
this.NumberofItems = quantity;
System.out.println("Quantity: " + NumberofItems);
this.priceperunit = pricePerUnit;
System.out.println("Price per unit: $" + priceperunit);
}
public double getCost() {
return ((NumberofItems * priceperunit) * 100.0) / 100.0;
}
public void setQuantity(int quantity) {
}
}
在公共類public GroceryItemOrder_test(字符串名稱,整數數量,雙倍pricePerUnit)下 :
我希望將此方法從GroceryList類的實例方法add(GroceryItemOrder_test item)中加載到數組中。
來自我的GroceryListClient客戶端的代碼:
public class GroceryListClient {
public static void main(String[] args) {
GroceryList_test addorder = new GroceryList_test();
GroceryItemOrder(addorder);
}
public static void GroceryItemOrder(GroceryList_test addorder) {
GroceryItemOrder_test Oranges = new GroceryItemOrder_test("oranges", 3, 2.46);
System.out.println("Total cost of " + Oranges.itemID + " = $" + Oranges.getCost());
addorder.add(Oranges);
System.out.println();
GroceryItemOrder_test Grapes = new GroceryItemOrder_test("grapes", 15, 0.55);
System.out.println("Total cost of " + Grapes.itemID + " = $" + Grapes.getCost());
addorder.add(Grapes);
}
}
在GroceryItemOrder(GroceryList_test addorder)方法下:
GroceryItemOrder_test Oranges = new GroceryItemOrder_test("oranges", 3, 2.46);
System.out.println("Total cost of " + Oranges.itemID + " = $" + Oranges.getCost());
addorder.add(Oranges);
特別是語句addorder.add(Oranges); :
這應該將項目作為“項目”指定的“對象” 添加到add(GroceryItemOrder_test item)方法下的數組中。
這些是我無法弄清楚如何執行的條件。 請盡可能提供任何幫助。
不要建議使用ArrayList,因為我還沒有這樣做,並且經過進一步的研究,我認為它不能輕松地用於此目的。
如果我理解您的意思,則希望GroceryList
存儲不同的GroceryItemOrder
對象。
您即將在代碼中包含解決方案。 不過請看這里:
public void add(GroceryItemOrder_test item) {
GroceryItemOrder_test[] GroceryList = new GroceryItemOrder_test[10];
GroceryList[1] = item;
System.out.println(GroceryList[1]);
}
如果跟蹤其工作方式,則每次輸入add()
方法時,都會創建一個包含十個空元素的新數組。 當方法退出時,您將立即失去對此的所有引用,因為它將超出范圍並最終被垃圾回收。
為了解決這個問題,您需要使用一個范圍內的變量。 我為您的GroceryList
類推薦一個實例變量,如下所示:
public class GroceryList {
private GroceryItemOrder[] list = null;
public GroceryList() {
list = new GroceryItemOrder[10];
}
public void add(GroceryItemOrder item) {
for(int i=0; i<list.length; i++) {
if(list[i] == null) {
list[i] = item;
System.out.println(item);
break;
}
}
}
}
現在,在此add()
方法中,我們僅查看已經存在且持久存在的list
變量,而不是創建一個新的list
變量。 我們遍歷它以找到可用的插槽(如果有),然后執行其余的處理。 break
語句是必需的,這樣列表中的每個項目都不會設置為要添加的一項。
然后,您的GroceryClient
類可以根據需要創建GroceryItemOrder
對象,並使用GroceryList
的add()
方法(因為它是public
)。
請注意,使用ArrayList
確實會容易得多,這與您在文章結尾的評論中所說的相反。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.