gpt4 book ai didi

java - 当 boolean 值明显为 true 时,Boolean 返回 false

转载 作者:行者123 更新时间:2023-12-02 10:30:31 25 4
gpt4 key购买 nike

所以我的应用程序有一个 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)在我的实时数据库中,如下所示

enter image description here

从视觉上看,这是真的。我的 endgame() 方法中还有一条返回 true 的日志语句,因此根据日志语句, boolean 值应该为 true

但是我的 getResults() 方法中也有日志语句,并且该日志返回 false,即使 boolean 值显然是 true

谁能帮我解决这个奇怪的问题吗?

这显示了 logcat 如何一遍又一遍地从 false 切换到 true,这没有任何意义

enter image description here

最佳答案

您正在将真值与假值进行比较。所以它返回 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com