“ if”和“ else”与arraylist

时间:2018-08-22 06:42:45

标签: java android arrays if-statement arraylist

我正在Android Studio上开发游戏。

游戏为12个方块和12个符号(在这种情况下为“ 0”零)。 当您按下新游戏按钮时,将启动第一级。一共有12个级别。 (curLevel)。 几秒钟后,一个符号将随机显示在屏幕上,然后消失。 (根据每个级别,输入数量增加1,例如,必须猜测级别1:1符号,必须猜测级别2:2符号)直到级别12。

到现在为止,它都没有问题。

现在,我需要解决我的代码以接收用户的输入,检查是否与显示的正确块预览匹配。 如果是,则移至下一个级别(重复清除块的周期,显示随机符号,再次清除,等待用户输入),直到级别12。 如果未显示,则显示失败消息,然后再次显示新游戏按钮。

我创建了这个Arraylist,但是它不能正常工作,现在条件是它总是为负(即使按下了右边的块),“ Fail!再试一次!”它显示的消息。

我运行调试器并显示:List tempList = new ArrayList <>();

tempList:size 12
for (int i = 0; i < curLevel; i++) { curLevel size:13
tempList.add ( buttons.get ( i ) ); buttons size:12
if (tempList.contains ( v.getTag () )) { tempList size 12
Its not matching the condition. –

这里是值:

static int MAXLEVELS = 12;
        static String SUCCESS_SYMBOL = "0";
curLevel = 1;
        curGuess = 0;

有什么建议可以使其正常工作吗?甚至使这段代码更整洁?

private void buttonLogic(View v) {
        List<Button> tempList = new ArrayList<> ();
        for (int i = 0; i <= curLevel; i++) {
            if (i!= MAXLEVELS)
                tempList.add ( buttons.get ( i ) );
            else
                break;
        }
        if (tempList.contains ( v.getTag () )) {
            curGuess++;
            checkWin ();
        } else {
            lostGame ();
        }
    }

    private void lostGame () {
        Toast.makeText(this, "Fail! Try Again", Toast.LENGTH_SHORT).show();
        disableButtons();
        b_new.setVisibility(View.VISIBLE);
    }

        private void checkWin() {
            if (curGuess == curLevel) {
                disableButtons ();
                if (curLevel == 12) {
                    Toast.makeText ( this, "Congratulations! You Won", Toast.LENGTH_SHORT ).show ();
                    b_new.setVisibility ( View.VISIBLE );
                } else {
                    curGuess = 0;
                    curLevel++;
                    generateButtons ( curLevel );
                }
            }
        }

还有来自先前代码的图像。干杯。

Here is the image

2 个答案:

答案 0 :(得分:0)

请改用ArrayList<Button> tempList = new ArrayList<>();,因为否则您将缺少方法(尽管将变量从ArrayList转换为List不会引起任何抱怨)。

if条件可能是(i+1) < MAXLEVELS,因为i是基于0,而curLevel是基于1

最简单的方法可能是初始化curLevel = 0并仅将其显示为curLevel + 1……否则,您将始终不得不考虑+1 / -1抵消了业务逻辑,我认为这是“无用的复杂性” ...因此,游戏将在级别0开始,而级别1则显示在GUI。

答案 1 :(得分:0)

似乎您正在尝试在可用的buttons中找到已对其执行点击事件的按钮的任何匹配项。

为此,我建议您使用viewId查找完全匹配,您可以像下面那样更改方法。

private void buttonLogic(View v) {
    boolean hasAnyMatch = false;
    // Assumption is curLevel will always be less than MAXLEVELS
    for (int i = 0; i <= curLevel; i++) {
        if (v.getId() == buttons.get(i).getId()) {
            hasAnyMatch = true;
            break;
        }
    }
    if (hasAnyMatch) {
        curGuess++;
        checkWin ();
    } else {
        lostGame ();
    }
}