java布尔值在明显为true时返回false
所以我的应用程序有一个超级简单的多人游戏。当玩家玩的游戏结束时,布尔值gameFinished
变为真。游戏中发生的大多数事情首先检查gameFinished
是否等于false,这就是我的问题所在。游戏结束后,我的布尔值明显设置为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
等于false
我有一个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
设置为true
games.child(currentGameID).child("gameFinished").setValue(true);
它反映在我的实时数据库中,看起来像这样
所以从视觉上看,这是真的。我的endgame()方法中还有一个log语句,返回true
,因此根据log语句,布尔值应该为true
但是我的getResults()
方法中也有log语句,该log返回false,即使布尔值显然是true
有人能帮我解决这个奇怪的问题吗
这显示了logcat是如何一次又一次地从false切换到true的,这没有任何意义
# 1 楼答案
出现此问题的原因是布尔值“gameFinished”默认初始化为false 在“gameFinished”设置为true后,需要检查getResults()方法
# 2 楼答案
您正在比较真值和假值。所以它返回false。像这样:
返回false
将代码更改为以下代码行:
为此: