【问题标题】:Comparing element of a List object比较 List 对象的元素
【发布时间】:2021-07-31 04:35:24
【问题描述】:

我有一个具有字符串类型电话号码的 AccountInfo 对象。 我需要比较列表中的每个电话号码,如果所有电话号码都相同,则返回 true,如果其中任何一个不同,则返回 false。

下面是代码 sn-p,问题是即使电话号码不同,我也总是得到真正的价值。我知道这是非常基本的,但我们将不胜感激。

import java.util.Objects;

public class AccountInfo {

    String accountName;
    String phoneNumber;

    public AccountInfo( String accountName, String phoneNumber) {
        this.accountName = accountName;
        this.phoneNumber = phoneNumber;
    }

    public String getAccountName() {
        return accountName;
    }

    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        AccountInfo that = (AccountInfo) o;
        return Objects.equals(accountName, that.accountName) && Objects.equals(phoneNumber, that.phoneNumber);
    }

    @Override
    public int hashCode() {
        return Objects.hash(accountName, phoneNumber);
    }

    @Override
    public String toString() {
        return "AccountInfo{" +
                "accountName='" + accountName + '\'' +
                ", phoneNumber='" + phoneNumber + '\'' +
                '}';
    }
}

这是我的主要课程

    import java.util.ArrayList;
import java.util.List;

public class TestMain {

    public static void main(String[]args){
     List<AccountInfo> accInfoList = new ArrayList<AccountInfo>();
        List<AccountInfo> accountInfoList =populateList(accInfoList);

        System.out.println(accountInfoList);
        boolean flag = isSamePhoneNumber(accInfoList);
        if(flag) {
            System.out.println("All Phone numbers are same");
        }
        else{
            System.out.println("Some of the phone numbers are different");
        }

    }

    public static List<AccountInfo> populateList(List<AccountInfo> accountInfoList){
        AccountInfo accountInfo1 = new AccountInfo("Rohit Sharma", "123456");
        AccountInfo accountInfo2 = new AccountInfo("Mayank Singh", "123456");
        AccountInfo accountInfo3 = new AccountInfo("Sam Singh", "12378456");
        AccountInfo accountInfo4 = new AccountInfo("Rahul Sharma", "123456");
        accountInfoList.add(accountInfo1);
        accountInfoList.add(accountInfo2);
        accountInfoList.add(accountInfo3);
        accountInfoList.add(accountInfo4);
        return accountInfoList;

    }

    public static boolean isSamePhoneNumber(List<AccountInfo> accountInfoList){
           boolean isSamePhoneNumberFlag = false;
        for (int i = 0; i < accountInfoList.size(); i++) {
            for (int j = i+1; j < accountInfoList.size(); j++) {
                // compare list.get(i) and list.get(j)
                System.out.println("i "+accountInfoList.get(i).getPhoneNumber()+" "+"i+1 "+accountInfoList.get(i+1).getPhoneNumber());
                if(accountInfoList.get(i).getPhoneNumber() == accountInfoList.get(i+1).getPhoneNumber()){
                    isSamePhoneNumberFlag = true;
                }
            }
        }
        return isSamePhoneNumberFlag;
    }

}

输出:

[AccountInfo{accountName='Rohit Sharma', phoneNumber='123456'}, AccountInfo{accountName='Mayank Singh', phoneNumber='123456'}, AccountInfo{accountName='sam Singh', phoneNumber='12378456'}, AccountInfo{accountName='Rahul Sharma', phoneNumber='123456'}]
i 123456 i+1 123456
i 123456 i+1 123456
i 123456 i+1 123456
i 123456 i+1 12378456
i 123456 i+1 12378456
i 12378456 i+1 123456
All Phone numbers are same

【问题讨论】:

  • 您的 isSamePhoneNumber 检查有问题。您得到的所有数字都相同,因为您在 for 循环内的所有检查中都覆盖了您的标志。

标签: java arrays list arraylist


【解决方案1】:

尝试这样的事情,阅读返回语句旁边的评论:

    public static boolean isSamePhoneNumber(List<AccountInfo> accountInfoList) {
    for (int i = 0; i < accountInfoList.size(); i++) {
        for (int j = i + 1; j < accountInfoList.size(); j++) {
            // compare list.get(i) and list.get(j)
            System.out.println("i " + accountInfoList.get(i).getPhoneNumber() + " " + "i+1 " + accountInfoList.get(i + 1).getPhoneNumber());
            if (accountInfoList.get(i).getPhoneNumber() != accountInfoList.get(i + 1).getPhoneNumber()) {
                return false; // just this line tells you that numbers are different. So no need to check further.
            }
        }
    }
    return true;
}

【讨论】:

    猜你喜欢
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2018-02-26
    相关资源
    最近更新 更多