- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我的应用程序有一个 super 简单的多人游戏。当玩家玩的游戏结束时, boolean 值 gameFinished
变为 true。游戏中发生的大多数事情首先检查以确保 gameFinished
等于 false,这就是我的问题所在。游戏结束后,我的 boolean 值显然设置为 true ,日志返回 false
因此游戏不断循环。
所以这里是获取游戏结果的方法
private void getResults() {
HomePage.getCurrentGameID(new HomePage.CallbackID() {
@Override
public void onSuccess(final String currentGameID) {
games.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
HomePage.getUserPosition(new HomePage.CallbackPosition() {
@Override
public void onSuccess(int position) {
if (dataSnapshot.child(currentGameID).child("gameFinished").getValue().equals(false)) {
if (position == 1) {
if (youWin()) {
getWinner(FirebaseAuth.getInstance().getUid(), wager);
Log.i("FlipCoin", dataSnapshot.child(currentGameID).child("gameFinished").getValue().toString());
} else {
getLoser(FirebaseAuth.getInstance().getUid(), wager);
}
}
endGame();
}
}
});
}
抱歉,该方法中有很多草率的代码。
但我有那条线,if (dataSnapshot.child(currentGameID).child("gameFinished").getValue().equals(false)) {
检查游戏是否完成,如果未完成,则将在游戏结束时找到获胜者或失败者。
但是,一旦游戏结束,并且使用此方法找到胜者和败者,该方法就会循环并继续一遍又一遍地运行,因为它认为 gameFinished
等于 假
。
我有一个 endGame()
方法,发生在这个 getResults()
方法的末尾
private void endGame() { HomePage.getCurrentGameID(new HomePage.CallbackID() {
@Override
public void onSuccess(final String currentGameID) {
games.child(currentGameID).child("gameFinished").setValue(true);
games.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Log.i("FlipCoin", dataSnapshot.child(currentGameID).child("gameFinished").getValue().toString());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
});
}
在该方法中,我使用这一行明确将 gameFinished
设置为 truegames.child(currentGameID).child("gameFinished").setValue(true);
它反射(reflect)在我的实时数据库中,如下所示
从视觉上看,这是真的。我的 endgame() 方法中还有一条返回 true
的日志语句,因此根据日志语句, boolean 值应该为 true
但是我的 getResults()
方法中也有日志语句,并且该日志返回 false,即使 boolean 值显然是 true
谁能帮我解决这个奇怪的问题吗?
这显示了 logcat 如何一遍又一遍地从 false 切换到 true,这没有任何意义
最佳答案
您正在将真值与假值进行比较。所以它返回 false。像这样:
true.equals(false)
返回 false。
将您的代码更改为这行代码:
if(dataSnapshot.child(currentGameID).child("gameFinished").getValue().equals(false))
对此:
if((Boolean)dataSnapshot.child(currentGameID).child("gameFinished").getValue())
关于java - 当 boolean 值明显为 true 时,Boolean 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53643866/
通常当我请求线程转储时,系统性能不佳的症状很容易解释;也就是说,通常我会看到许多线程显然正在等待一个已被获取但未被另一个释放的监视器。 在这种情况下,我有很多线程在等待监视器 (0x965ad100)
C:\Users\shagy\Desktop\3RD YEAR 2ND SEMESTER\SPM\Newfolder\SPM-SMS>npm start npm ERR! path C:\Users\
我是一名优秀的程序员,十分优秀!