以下是我的课程:
HouseDetails:
private String forename;
private String surname;
private double houseName;
private int numberofHouses;
public CreditCardDetails(String forename, String surname, double houseName, int numberofHouses) {
this.forename = forename;
this.surname = surname;
this.houseName = houseName;
this.numberofHouses = numberofHouses;
}
HousePurchase:
HashMap <String, HouseDetails> houses = new HashMap<String, HouseDetails>();
这只是一个例子。 我正在尝试查看houseNumber是否首先存在,然后检查houseNumber是否与numberOfHouses相关联。
这是我到目前为止所尝试的:
public void checkIfHouseMatches(String number ,int numberofHouses){
for (HouseDetails det : houses.values())
if (houses.containsKey(number) && det.getNumberofHouses() == numberOfHouses) {
System.out.println("True");
}
else {
}
但是,如果numberofHouses与HashMap中的任何实体匹配,而不是我输入的特定门牌号,则返回true。
我该如何解决这个问题?
答案 0 :(得分:2)
你的支票错了。
您现在正在执行的操作将检查地图是否包含该号码,如果您传递了HouseDetails
numberOfHouses
,则会返回true
假设你有3个房子的详细信息
HouseDetail1 (number = 1, noOfHouses = 5)
HouseDetail2 (number = 2, noOfHouses = 6)
HouseDetail3 (number = 3, noOfHouses = 5)
你搜索了1号和noOfHouses = 6
第一次迭代将是假的,因为houses.containsKey(number)
是true
但det.getNumberofHouses() == numberOfHouses
是false
第二次迭代都是true
- 但这是错误的。将其更改为:
if(houses.containsKey(number)){
if(houses.get(number).getNumberofHouses() == numberOfHouses){
System.out.println("True");
}else{
}
}
答案 1 :(得分:0)
如果要从HashMap中的特定条目访问详细信息,请使用get(Object key)
方法。在您的情况下,checkIfHouseMatches可以实现为:
return houses.containsKey(number) ? houses.get(number).getNumberofHouses() == numberofHouses : false;
无需迭代地图的值。