如何检查所有数组值是否相同?

时间:2018-02-12 18:37:07

标签: java android arrays

我目前有以下数组:

int[] gameState = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2};

我将2设置为"未播放"在开始时以及当用户执行某些操作时,它会调用方法并将该数组值更改为1,如下所示:

int tappedCounter = Integer.parseInt(counter.getTag().toString());

    if (gameState[tappedCounter] == 2) {

        gameState[tappedCounter] = 1;

现在我要做的是检查用户操作后如果数组只有一个和一个不同的成员并执行某些操作(例如输出文本)。

所以如果数组是:

int[] gameState = {1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1};

并且用户执行上述操作,因此其中一个更改为一个,并且数组变为如下所示:

int[] gameState = {1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};

应该显示输出。 我在Android Studio中这样做很重要。

3 个答案:

答案 0 :(得分:1)

蛮力方法将迭代整个阵列并计算2的出现次数(只有在找到第二个2时它才会短路。)

更好的方法(特别是如果数组的长度很大)将维持2的计数器(初始化为数组的长度),并在每次将数组的元素从2更改为1时递减。这样,您只需检查计数器是否等于1。

答案 1 :(得分:0)

我能想到的最简单的方法是保持一个静态计数器,用一个等于数组大小的值初始化它,并在每次游戏状态改变时递减它。一旦静态计数器达到1,就可以触发所需的输出。

是否有理由在您的方案中不起作用?

答案 2 :(得分:0)

我会改变你的做法。最好先检测一个变化,而不是在发生状态变化之后尝试确定。

当前代码:

*
!/folder

代码:

int tappedCounter = Integer.parseInt(counter.getTag().toString());
if (gameState[tappedCounter] == 2) {
    gameState[tappedCounter] = 1;

// Now you must check for state change and react if state has changed

使用辅助方法setGameState:

int tappedCounter = Integer.parseInt(counter.getTag().toString());
setGameState(tappedCounter);