日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了為什么ArrayList CONTAINS()方法不能處理對象?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在學習Java,遇到了一個問題。為什么ArrayList CONTAINS()方法不能處理對象?它似乎可以處理字符串和其他基本數據類型,但不能處理對象。我是否使用了錯誤的方法?

程序在第8-11行創建數據,并從命令行接收數據。來自命令行的數據為:

avacado 10 .50 broccoli 20 .75 cauliflower 30 1.00 banana 300 .55

命令行上的最后一個條目”banana 3000.55″與第11行上的數據相匹配,應該跳過,因為它已經存在,但CONTAINS()表示它不在那里。怎么會這樣?幫助。

以下是我的代碼:

package java21days;

import java.util.*;

public class FruitBasket3 {

    ArrayList<Fruit> cart;
    Fruit apple = new Fruit("apple", 100, .75F);
    Fruit orange = new Fruit("orange", 200, .90F);
    Fruit banana = new Fruit("banana", 300, .55F);
    Fruit kumkwat = new Fruit();

    public FruitBasket3(String[] userCodes) {
        cart = new ArrayList<>();
        int quantity;
        float price;

        addCode(apple);
        addCode(orange);
        addCode(banana);
        addCode(kumkwat);

        for (int j = 0; j < userCodes.length; j+=3) {
            quantity = Integer.parseInt(userCodes[j+1]);
            price = Float.parseFloat(userCodes[j+2]);
            addCode(new Fruit(userCodes[j],quantity,price));
        }

        // display all codes
        for (Fruit code : cart) {
            System.out.println("Fruit: " + code.getName() + " Price: " +
                    code.getQuantity() * code.getPrice());
        }
    }

    private void addCode(Fruit inFruit) {
        boolean match = false;
        System.out.println("Inside addCode with fruit: " + inFruit.getName() + 
                " Quantity: " + inFruit.getQuantity() + " Price: " + inFruit.getPrice());
        if (!cart.contains(inFruit)) {
            System.out.println("    Passed the contains test.");
            for (Fruit item : cart) {
                System.out.println("    Existing: " + item.getName() + 
                        " Quantity: " + item.getQuantity() + " Price: " + item.getPrice());
                System.out.println("    New:      " + inFruit.getName() + 
                        " Quantity: " + inFruit.getQuantity() + " Price: " + inFruit.getPrice());

                //if (inFruit.getName() == item.getName() &&
                //        inFruit.getQuantity() == item.getQuantity() &&
                //        inFruit.getPrice() == item.getPrice()){
                if (inFruit.getName().equals(item.getName()) &&
                        inFruit.getQuantity() == item.getQuantity() &&
                        inFruit.getPrice() == item.getPrice()){
                    match = true;
                    System.out.println("        Did not pass the individual element comparision test.");
                } else {
                    System.out.println("        Passed the individual element comparision test.");
                }
            }
            if (!match) {
                System.out.println("            >>>> adding.");
                cart.add(inFruit);
            } else {
                System.out.println("            >>>> did not add.");
            }
        } else {
            System.out.println("    Fruit: " + inFruit.getName() + " already on file ... bypassing.");
        }
    }

    public static void main(String[] arguments) {
        if (arguments.length % 3 != 0) {
            System.out.println("Error!!! Incorrect number of arguments.");
        } else {
            FruitBasket3 keeper = new FruitBasket3(arguments);
        }
    }

}

public class Fruit {
    private String name;
    private int quantity;
    private float price;

    public Fruit() {
        name = "";
        quantity = 0;
        price = 0.0F;
    }

    public Fruit(String inName, int inQuantity, float inPrice) {
        name = inName;
        quantity = inQuantity;
        price = inPrice;
    }

    public String getName(){
        return name;
    }

    public int getQuantity(){
        return quantity;
    }

    public float getPrice(){
        return price;
    }
}

輸出為:

run:
Inside addCode with fruit: apple Quantity: 100 Price: 0.75
    Passed the contains test.
            >>>> adding.
Inside addCode with fruit: orange Quantity: 200 Price: 0.9
    Passed the contains test.
    Existing: apple Quantity: 100 Price: 0.75
    New:      orange Quantity: 200 Price: 0.9
        Passed the individual element comparision test.
            >>>> adding.
Inside addCode with fruit: banana Quantity: 300 Price: 0.55
    Passed the contains test.
    Existing: apple Quantity: 100 Price: 0.75
    New:      banana Quantity: 300 Price: 0.55
        Passed the individual element comparision test.
    Existing: orange Quantity: 200 Price: 0.9
    New:      banana Quantity: 300 Price: 0.55
        Passed the individual element comparision test.
            >>>> adding.
Inside addCode with fruit:  Quantity: 0 Price: 0.0
    Passed the contains test.
    Existing: apple Quantity: 100 Price: 0.75
    New:       Quantity: 0 Price: 0.0
        Passed the individual element comparision test.
    Existing: orange Quantity: 200 Price: 0.9
    New:       Quantity: 0 Price: 0.0
        Passed the individual element comparision test.
    Existing: banana Quantity: 300 Price: 0.55
    New:       Quantity: 0 Price: 0.0
        Passed the individual element comparision test.
            >>>> adding.
Inside addCode with fruit: avacado Quantity: 10 Price: 0.5
    Passed the contains test.
    Existing: apple Quantity: 100 Price: 0.75
    New:      avacado Quantity: 10 Price: 0.5
        Passed the individual element comparision test.
    Existing: orange Quantity: 200 Price: 0.9
    New:      avacado Quantity: 10 Price: 0.5
        Passed the individual element comparision test.
    Existing: banana Quantity: 300 Price: 0.55
    New:      avacado Quantity: 10 Price: 0.5
        Passed the individual element comparision test.
    Existing:  Quantity: 0 Price: 0.0
    New:      avacado Quantity: 10 Price: 0.5
        Passed the individual element comparision test.
            >>>> adding.
Inside addCode with fruit: broccoli Quantity: 20 Price: 0.75
    Passed the contains test.
    Existing: apple Quantity: 100 Price: 0.75
    New:      broccoli Quantity: 20 Price: 0.75
        Passed the individual element comparision test.
    Existing: orange Quantity: 200 Price: 0.9
    New:      broccoli Quantity: 20 Price: 0.75
        Passed the individual element comparision test.
    Existing: banana Quantity: 300 Price: 0.55
    New:      broccoli Quantity: 20 Price: 0.75
        Passed the individual element comparision test.
    Existing:  Quantity: 0 Price: 0.0
    New:      broccoli Quantity: 20 Price: 0.75
        Passed the individual element comparision test.
    Existing: avacado Quantity: 10 Price: 0.5
    New:      broccoli Quantity: 20 Price: 0.75
        Passed the individual element comparision test.
            >>>> adding.
Inside addCode with fruit: cauliflower Quantity: 30 Price: 1.0
    Passed the contains test.
    Existing: apple Quantity: 100 Price: 0.75
    New:      cauliflower Quantity: 30 Price: 1.0
        Passed the individual element comparision test.
    Existing: orange Quantity: 200 Price: 0.9
    New:      cauliflower Quantity: 30 Price: 1.0
        Passed the individual element comparision test.
    Existing: banana Quantity: 300 Price: 0.55
    New:      cauliflower Quantity: 30 Price: 1.0
        Passed the individual element comparision test.
    Existing:  Quantity: 0 Price: 0.0
    New:      cauliflower Quantity: 30 Price: 1.0
        Passed the individual element comparision test.
    Existing: avacado Quantity: 10 Price: 0.5
    New:      cauliflower Quantity: 30 Price: 1.0
        Passed the individual element comparision test.
    Existing: broccoli Quantity: 20 Price: 0.75
    New:      cauliflower Quantity: 30 Price: 1.0
        Passed the individual element comparision test.
            >>>> adding.
Inside addCode with fruit: banana Quantity: 300 Price: 0.55
    Passed the contains test.
    Existing: apple Quantity: 100 Price: 0.75
    New:      banana Quantity: 300 Price: 0.55
        Passed the individual element comparision test.
    Existing: orange Quantity: 200 Price: 0.9
    New:      banana Quantity: 300 Price: 0.55
        Passed the individual element comparision test.
    Existing: banana Quantity: 300 Price: 0.55
    New:      banana Quantity: 300 Price: 0.55
        Did not pass the individual element comparision test.
    Existing:  Quantity: 0 Price: 0.0
    New:      banana Quantity: 300 Price: 0.55
        Passed the individual element comparision test.
    Existing: avacado Quantity: 10 Price: 0.5
    New:      banana Quantity: 300 Price: 0.55
        Passed the individual element comparision test.
    Existing: broccoli Quantity: 20 Price: 0.75
    New:      banana Quantity: 300 Price: 0.55
        Passed the individual element comparision test.
    Existing: cauliflower Quantity: 30 Price: 1.0
    New:      banana Quantity: 300 Price: 0.55
        Passed the individual element comparision test.
            >>>> did not add.***
Fruit: apple Price: 75.0
Fruit: orange Price: 180.0
Fruit: banana Price: 165.0
Fruit:  Price: 0.0
Fruit: avacado Price: 5.0
Fruit: broccoli Price: 15.0
Fruit: cauliflower Price: 30.0
BUILD SUCCESSFUL (total time: 0 seconds)

推薦答案

它不適用于您的類,因為它沒有有效的public boolean equals(...)方法重寫。給它一個,一個使用關鍵字字段來測試功能相等性并包含工作的字段。

根據contains method section of the ArrayList API:

如果此列表包含指定元素,則返回TRUE。更正式地說,當且僅當此列表包含至少一個元素e且(o==NULL?)時,才返回TRUE。E==空:o.equals(E))。

僅將名稱字段用于相等測試,并使其成為final字段,因為您不希望使用可能更改的字段。還應為其提供hashCode重寫,該重寫也使用在equals方法中測試的相同字段。

類似:

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Fruit other = (Fruit) obj;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    return true;
}

可以工作

這篇關于為什么ArrayList CONTAINS()方法不能處理對象?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:ArrayList 對象 方法
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定