亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將數組字段重構為 ArrayList

如何將數組字段重構為 ArrayList

翻過高山走不出你 2023-11-10 17:13:48
這是一個允許用戶向系統添加數據的程序。這具體是程序的庫存類,我們的任務是將對象庫存轉換為數組列表的對象...我是數組列表的新手,我需要一些幫助來解決這個問題。我已經嘗試了幾次,但到目前為止還沒有運氣,任何幫助!public class Inventory {    /**     * List of FoodItems that represents our inventory     */    private FoodItem[] inventory;    /**     * Number of items that a user has entered     */    private int numItems;    /**     * Default Constructor     */    public Inventory() {        inventory = new FoodItem[20];    }    /**     * Reads from the Scanner object passed in and fills the data member fields of the class with valid data.     * @param scanner - Scanner to use for input     * @return <code>true</code> if all data members were successfully populated, <code>false</code> otherwise     */    public boolean addItem(Scanner scanner) {        if(numItems == 20)        {            System.out.println("Inventory full");            return false;        }        boolean valid = false;        FoodItem item = null;        while(!valid)        {            System.out.print("Do you wish to add a fruit(f), vegetable(v) or a preserve(p)? ");            if(scanner.hasNext(Pattern.compile("[fFvVpP]")))            {                String choice = scanner.next();                switch(choice.toLowerCase())                {                case "f":                    item = new Fruit();                    break;                case "v":                    item = new Vegetable();                    break;                case "p":                    item = new Preserve();                    break;                default: // Should not get here.                    item = new FoodItem();                    break;                }                valid = true;            }            else            {                System.out.println("Invalid entry");                scanner.next();                valid = false;            }        }
查看完整描述

1 回答

?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

我可能誤解了這個問題,但我猜你想將 Inventory 轉換為使用ArrayList,而不是將其轉換ArrayList。那是對的嗎?

如果我正確理解了這個問題,那么您要做的第一件事就是將字段的聲明更改inventory為 ArrayList:

private List<FoodItem> inventory;

請注意,我已將其聲明為 List 接口,而不是具體的 ArrayList 實現。除非您需要的 ArrayList 實現的特定功能在通用接口中不可用,否則通常最好在通用接口級別進行操作,以便為自己提供最大的靈活性。

但是,在構造函數中,您實際上將實例化具體的 ArrayList:

public Inventory() {
    inventory = new ArrayList<>(20);
}

通過從裸數組切換到 ArrayList,您將發現使用 Collection 的第一個優點,因為您將不再需要該方法alreadyExists()。List 及其超級接口 Collection 支持該contains()方法。

這:

if(alreadyExists(item)<0)

變成:

if (!inventory.contains(item))

...并且您可以刪除該alreadyExists()方法。

第二個優點是您不再需要將庫存中的商品數量作為單獨的字段進行跟蹤。List 已經為您提供了這一點。

這:

if(numItems == 20)

變成:

if (inventory.size() == 20)

..并且您可以numItems從班級中刪除該字段。

第三個優點是列表/集合支持toString()與上面的實現非常相似的。

這:

  @Override

    public String toString() {

        String returnString = "Inventory:\n";

        for(int i=0;i<numItems;i++)

            returnString += inventory[i].toString() + "\n";

        return returnString;

    }

變成:


   @Override

    public String toString() {

        return "Inventory:\n" + inventory.toString();

    }

toString() 和 List 提供的 toString() 之間的主要區別在于每個項目之間有換行符,而 List 只是在每個項目之間放置逗號。如果你想保留新行,那么列表/集合上的循環比數組稍微麻煩一點:


   @Override

    public String toString() {

        String returnString = "Inventory:\n";

        for(FoodItem item : inventory) {

            returnString += item.toString() + "\n";

        }

        return returnString;

    }


查看完整回答
反對 回復 2023-11-10
  • 1 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號