输入不匹配异常

时间:2014-04-10 06:13:17

标签: java if-statement int boolean type-mismatch

我正在开发游戏,最初我在使用布尔值同时对十进制数组进行处理,后来它发现我应该使用 int 而不是使用 int 来存储游戏状态,当我用int替换boolean时, if 语句显示类型不匹配异常运算符&&未定义参数类型boolean,int 。这是我的if语句代码。

int [][] dots

    protected void onDraw(Canvas canvas) 
    {
        super.onDraw(canvas);
        canvas.drawPaint(pBack);

        for (int y = 0; y < numRows; y++)
        {
            canvas.drawLine(xStep, yCoords[y], numColumns * xStep, yCoords[y], pDot);

            for (int x = 0; x < numColumns; x++)
            {
                if (y == 0)
                {
                    canvas.drawLine(xCoords[x], yStep, xCoords[x], numRows * yStep, pDot);
                }

                if (dots[x][y])
                {
                    boolean left = x > 0 && dots[x - 1][y];
                    boolean up = y > 0 && dots[x][y - 1];

                    if (left)
                    {
                        canvas.drawLine(xCoords[x], yCoords[y], xCoords[x - 1], yCoords[y], pLine);
                    }

                    if (up)
                    {
                        canvas.drawLine(xCoords[x], yCoords[y], xCoords[x], yCoords[y - 1], pLine);
                    }

                    if (left && up && dots[x - 1][y - 1])
                    {
                        canvas.drawCircle(xCoords[x] - xStep / 2, yCoords[y] - yStep / 2, 10, pLine);
                    }
                }
            }
        }
       for (int y = 0; y < numRows; y++)
        {
            for (int x = 0; x < numColumns; x++)
            {
                canvas.drawCircle(xCoords[x], yCoords[y], 20, pDot);                    
                if (dots[x][y])
                {
                    canvas.drawCircle(xCoords[x], yCoords[y], 15, pLine);                       
                }                                       
            }
        }
        if (firstDotX != -1)
        {
            canvas.drawCircle(xCoords[firstDotX], yCoords[firstDotY], 25, pSelect);
        }
    }

3 个答案:

答案 0 :(得分:0)

那是因为你不能使用带有整数的AND &&和OR ||运算符,所以你可能想要重新定义条件:

if (left && up && dots[x - 1][y - 1])
                  ------------------
                  this is an integer

我无法给你一个&#34; 真正的&#34;修复,因为它取决于你想要做什么。您可以试试这个,但可能无法按预期工作:

if (left && up)

答案 1 :(得分:0)

是的,当left和up用作int变量时,如果条件将给出类型不匹配异常

if (left && up && dots[x - 1][y - 1])

由于左右&amp;&amp; up将是一个整数,然后你在int和boolean变量之间执行逻辑AND,因此它将给出类型不匹配异常。

您应该按照以下方式使用它 -

if (((left && up).equals(intValue) && dots[x - 1][y - 1])

其中intValue在你的情况下是有效的值,现在(左和右).equals(intValue)将给出一个布尔值,可以很容易地与其他布尔值点[x - 1] [y - 1一起使用]

参见int变量的逻辑运算 -

2 | 1 = 3 and 4 | 1 = 5. 

答案 2 :(得分:0)

您正在尝试在条件语句中使用int类型来评估boolean表达式,从而导致类型不匹配。与其他语言不同,Java 0也不对应falseboolean类型的变量只能是truefalse,而不是{{1} }或0)。您必须在语句中设置一个表达式,该表达式将给出一个布尔结果。

例如,你可以这样做:

1

而不是:

if(dots[x][y] == 0){....}

现在,如果您使用点数组中的特定数字来检查不需要的情况,请使用该数字而不是if(dots[x][y]){....} 进行检查。

如果条件语句中有多个表达式与0和/或&&运算符相结合,则会出现相同的规则。