我正在做一个轮盘赌游戏作为初学者而且我被卡住了。
我选择了 Bin - 对象
Bin(){
outcomes = new TreeSet<Outcome>();
}
我有投注 - 对象
public Bet(int amount, Outcome outcome){
this.outcome = outcome;
this.amountBet = amount;
}
包含结果 - 对象。
public Outcome(String name, int odds){
this.name = name;
this.odds = odds;
}
目标 - 迭代Bin中的所有结果,并将Bin中的Outcome.name与bets.outcome.name进行比较。如果我们有马赫,那就有胜利。如果没有,就会有损失。
所以,这是我的代码:
System.out.println(bin.toString());
System.out.println(table.bets.toString());
System.out.println(black.toString());
ListIterator<Bet> i = table.bets.listIterator();
Iterator<Outcome> b = bin.outcomes.iterator();
while(i.hasNext()) {
while(b.hasNext()){
if(i.next().outcome.equals(b.next())){
System.out.println("Win!");
}
else System.out.println("Win :/");
}
}
问题:即使输出显示:
[8 (35:1)]['7, 71' (17:1)]['8, 81' (17:1)][5, 53 (17:1)][8, 83 (17:1)][7 (11:1)][4, 41,
43, 44 (8:1)][5, 51, 53, 54 (17:1)][7, 71, 73, 74 (8:1)][8, 81, 83, 84 (17:1)][4, 5,6,
7, 8, 9 (5:1)][7, 8,9, 10, 11, 12 (5:1)][1 (2:1)][11 (2:1)][Low (1:1)][Even (1:1)]
[Black (1:1)]
[10 on [Black (35:1)]]
Black (35:1)
No :/
Exception in thread "main" java.util.NoSuchElementException
at java.util.LinkedList$ListItr.next(Unknown Source)
at Roulette.Game.main(Game.java:37)
似乎是
a)不迭代Bin中的所有结果 b)当找到匹配项时,它不会评估是否为真。
你能看出我做错了吗?
非常感谢你的帮助!!
如果文字太多或太少,我很抱歉。万一你需要看看其他课程中发生了什么,这里是:
游戏类https://gist.github.com/anonymous/5473187
表类https://gist.github.com/anonymous/5473188
投注班级https://gist.github.com/anonymous/5473189
结果班https://gist.github.com/anonymous/5473191
Bin Class https://gist.github.com/anonymous/5473192
BinBuilder班级https://gist.github.com/anonymous/5473197
轮班https://gist.github.com/anonymous/5473200
NonRandom class https://gist.github.com/anonymous/5473202
Passenger57 Class https://gist.github.com/anonymous/5473207
修改:删除了System.out.println()并更新了新结果。
答案 0 :(得分:3)
您每次致电i.next()
和b.next()
两次。 next()
转到下一个元素,因此如果您有序列1,2,3,4,则打印1,3,并比较2,4。
将结果复制到变量中以避免println()
语句中出现这种意外的副作用:
ListIterator<Bet> i = table.bets.listIterator();
Iterator<Outcome> b = bin.outcomes.iterator();
while(i.hasNext()) {
Bet bet = i.next();
System.out.println(bet.outcome.name.toString());
while(b.hasNext()){
Outcome o = b.next();
System.out.println(o.name.toString());
if(bet.outcome.equals(o)){
System.out.println("Win!");
} else {
System.out.println("Win :/");
}
}
P.S。:
最干净的解决方案可能是避免使用迭代器并在相应的迭代中使用for循环。
答案 1 :(得分:1)
试试这个:
while(b.hasNext()){
String str = b.next().name.toString()
System.out.println(str);
if(i.next().outcome.equals(str))
System.out.println("Win!");
else
System.out.println("Win :/");
}
而不是:
while(b.hasNext()){
System.out.println(b.next().name.toString());
if(i.next().outcome.equals(b.next())){
System.out.println("Win!");
}
else
System.out.println("Win :/");
}