Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;如果;及;否则";与arraylist_Java_Android_Arrays_If Statement_Arraylist - Fatal编程技术网

Java &引用;如果;及;否则";与arraylist

Java &引用;如果;及;否则";与arraylist,java,android,arrays,if-statement,arraylist,Java,Android,Arrays,If Statement,Arraylist,我正在Android studio上开发一个游戏 游戏有12个方块和12个符号(在本例中为“0”零)。 当你按下新游戏按钮时,第一关开始。总共有12个级别。(柯里夫)。 几秒钟后,屏幕上将随机显示一个符号,然后消失。(根据每个级别,输入的数量增加1,例如,必须猜测级别1:1符号,必须猜测级别2:2符号)直到级别12 到目前为止,它的工作没有问题 现在我需要解决我的代码以接收用户的输入,检查是否与显示的正确块预览匹配。 如果是,则移动到下一级(重复清除块、显示随机符号、再次清除、等待用户输入的循环

我正在Android studio上开发一个游戏

游戏有12个方块和12个符号(在本例中为“0”零)。 当你按下新游戏按钮时,第一关开始。总共有12个级别。(柯里夫)。 几秒钟后,屏幕上将随机显示一个符号,然后消失。(根据每个级别,输入的数量增加1,例如,必须猜测级别1:1符号,必须猜测级别2:2符号)直到级别12

到目前为止,它的工作没有问题

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

我创建了这个Arraylist,但它不能正常工作,现在它的状态总是负值(即使按下了右侧的块)它显示的消息是“Fail!重试!”


我运行了调试器并显示:List templast=new ArrayList()

有什么建议可以让它发挥作用吗?或者甚至让代码更整洁

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 );
                }
            }
        }
private void按钮逻辑(视图五){
List templast=newarraylist();
对于(int i=0;i使用
ArrayList templast=new ArrayList();
,否则您将缺少方法(尽管将变量从
ArrayList
强制转换为
List
不会引起任何抱怨)

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


最简单的可能是init <代码> Currase= 0 ,只显示它为“代码> Curray+1 < /Cord>…否则您将必须考虑业务逻辑中的<代码> + 1 <代码> />代码> -1 < /Cord>偏移,这被认为是“无用的复杂性”。…这样游戏将从级别

0
开始,而级别
1
将显示在GUI上。

看起来您正在尝试在可用的
按钮中查找已执行单击事件的按钮的匹配项

要做到这一点,我建议您使用
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 ();
    }
}
private void按钮逻辑(视图五){
布尔hasAnyMatch=false;
//假设curLevel始终小于MaxLevel

对于(int i=0;我调试您的代码,在您尝试验证内容时检查tempList包含的内容,并在您在列表中输入该值时检查v.getTag()确切包含的内容很难说,特别是因为我们不知道
v.getTag()
将返回或
templast
实际包含的内容。如果这是您的实际代码,那么
templast.contains(v.getTag())
应该可以工作,如果数据设置正确(我们不知道)。最好使用调试器逐步检查代码,特别是检查
tempList
的内容以及从
v.getTag()
获得的内容,然后检查这两个对象的
equals()
方法正在做什么。我运行了调试器并显示:List templast=new ArrayList();templast:size 12------用于(inti=0;iif(templast.contains(v.getTag())
将此更改为
if(templast.contains(v))
请不要通过评论提供更多信息。请始终编辑并更新您的问题!我的印象是,通常在创建集合对象时,您希望使用相应集合接口类型的变量引用该对象。在这种情况下,请使用列表模板=new ArrayList();将使代码更灵活,更易于修改,如果以后确定LinkedList可能比ArrayList更适合实现。
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 );
                }
            }
        }
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 ();
    }
}