【发布时间】: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