我正在做一个钱包,已经从基本的开始。我将penny对象添加到存储钱的哈希集中。我将容量初始化为5,然后从一个满钱包开始。
当尝试花费一分钱时,返回null(如预期的那样),但是当调用moneycheck()方法时,仍然有5个硬币。
我不知道该怎么做,因为我正在尝试使用.remove()方法删除一分钱,并且该对象没有从hashset中删除。
任何指示都将不胜感激。谢谢您
import java.util.HashSet;
public class Wallet{
private HashSet<Penny> walletPenny;
public Wallet(){
int walletCapacity = 5;
walletPenny = new HashSet<>();
int counter = 0;
while (counter < pocketCapacity){
pocketPenny.add(new Penny());
counter++;
}
}
public Penny removePenny(){
Penny spentPenny = null;
if (walletPenny.isEmpty()){
System.out.print("No more pennies!\n");
return spentPenny;
}
else {
pocketPenny.remove(spentPenny);
System.out.println(("Spent penny!"));
}
return spentPenny;
}
}
public int moneyCheck(){
System.out.print("Money remaining: " + walletPenny.size() + "\n");
return walletPenny.size();
}
2条答案
按热度按时间xmd2e60i1#
当你试着把硬币拿出来的时候
pocketPenny.remove(spentPenny)
,java试图找到要删除的便士。为了做到这一点,它使用equals
并迭代HashSet
直到它找到一分钱,这是相等的(身份智慧)你的spentPenny
. 更多关于如何remove()
作品。因为你提供了null作为spentPenny
,它将不匹配任何内容(您的5个便士已初始化,因此它们不为空)。如果您检查.remove()
方法-它将是false
.要解决此问题,您需要:
在调用
remove()
方法默许
equals()
在你的Penny
班跟踪您创建的硬币,以便以后删除它们
完整示例:
然后创造你的硬币:
现在你有5个硬币,从0到4。您可以删除一个,例如#3:
sr4lhrrt2#
找到了答案,我想我会更新这个,以防其他人有同样的问题。
为了删除penny,我用迭代器初始化了penny对象,以查找hashset中的下一个可用对象。然后我返回该值以在程序的其他地方使用。