首页 > 解决方案 > 随机数不断变化

问题描述

所以我有一个超级简单的抛硬币游戏,但它是多人游戏,所以里面有很多代码。在游戏的翻转部分,我遇到了问题。

我想要它,这样每当硬币被翻转时,如果它落在正面,数字 1 就会存储到 Firebase 数据库中,如果它落在尾巴上,我希望存储数字 2。

这就是我现在的工作方式:

private void startGame() {
    flipCoin();
    games.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
            HomePage.getCurrentGameID(new HomePage.CallbackID() {
                @Override
                public void onSuccess(String currentGameID) {
                    games.child(currentGameID).child("horT").setValue(getCoinSide());
                }
            });
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

一旦两个玩家都加入游戏并点击“就绪”,则调用此方法。你可以看到它首先调用了 flipCoin() 方法,这就是:

private void flipCoin() {
    final Random r = new Random();
    coinSide = r.nextInt(2) + 1;
}

然后我在数据库中设置头部或尾部(1或2),getCoinSide()正如您在我已经发布的这一行中看到的那样

games.child(currentGameID).child("horT").setValue(getCoinSide());

而我的 getCoinSide() 就是这样:

private int getCoinSide() {
    return coinSide;
}

所以这有点工作。它获取一个数字并将其存储在数据库中,但问题是它不断地一遍又一遍地将其存储在数据库中。所以定义正面或反面的数字每半秒都会切换到 1 或 2。我怎样才能得到一个没有机会改变的静态数字?

标签: javaandroidfirebasefirebase-realtime-database

解决方案


你写了一个无限循环。您在数据库 ( ) 中的某个位置有一个侦听器,只要该位置或其下方的任何值发生更改games,就会调用该侦听器。在您的侦听器中,您有一些代码将值写入. 该写入值然后触发您在 处添加的侦听器,该侦听器在那里写入另一个值,依此类推。gamesgames

您将不得不想出一些其他方法来满足您的游戏要求,而无需编写像这样的自触发侦听器,也许是通过限制侦听器的范围,使其也不会侦听正在编写的值.


推荐阅读