Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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 类型不匹配异常_Java_If Statement_Int_Boolean_Type Mismatch - Fatal编程技术网

Java 类型不匹配异常

Java 类型不匹配异常,java,if-statement,int,boolean,type-mismatch,Java,If Statement,Int,Boolean,Type Mismatch,我正在开发游戏,最初我使用布尔值,而使用贴花数组,后一个结果显示,我应该使用int来存储游戏状态,而不是使用boolean,当我用int替换boolean时,我的if语句显示类型不匹配异常,并且未为参数类型boolean定义运算符&&,int。这是我的if语句代码 int [][] dots protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawPaint

我正在开发游戏,最初我使用布尔值,而使用贴花数组,后一个结果显示,我应该使用int来存储游戏状态,而不是使用boolean,当我用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);
        }
    }
int[][]点
受保护的void onDraw(画布)
{
super.onDraw(帆布);
帆布、拉丝漆(pBack);
对于(int y=0;y0&&dots[x-1][y];
布尔向上=y>0&&dots[x][y-1];
如果(左)
{
画布绘制线(xCoords[x],yCoords[y],xCoords[x-1],yCoords[y],pLine);
}
如果(向上)
{
画布.抽绳(xCoords[x],yCoords[y],xCoords[x],yCoords[y-1],pLine);
}
if(左、上、点[x-1][y-1])
{
画布画圈(xCoords[x]-xStep/2,yCoords[y]-yStep/2,10,pLine);
}
}
}
}
对于(int y=0;y
这是因为不能将AND
&&
AND或
|
运算符与整数一起使用,因此可能需要重新定义条件:

if (left && up && dots[x - 1][y - 1])
                  ------------------
                  this is an integer
我不能给你一个“真正的”解决方案,因为这取决于你想做什么。您可以尝试此操作,但可能无法按预期工作:

if (left && up)

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

if (left && up && dots[x - 1][y - 1])
由于left&&up的结果将是一个整数,然后在int和boolean变量之间执行逻辑and,因此它将给出类型不匹配异常

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

if (((left && up).equals(intValue) && dots[x - 1][y - 1])
其中intValue在您的情况下是有效的out值,现在(左上)&.equals(intValue)将给出一个布尔值,可以轻松地与其他布尔值点[x-1][y-1]一起使用

请参阅int变量的逻辑运算-

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

您试图在条件语句中使用int类型,该语句将计算布尔表达式,从而导致类型不匹配。与其他语言不同,Java中的
0
也不对应
false
boolean
类型的变量只能是
true
false
,而不能是
0
1
)。您必须在语句中设置一个表达式,该表达式将给出布尔结果

例如,您可以执行以下操作:

if(dots[x][y] == 0){....}
而不是:

if(dots[x][y]){....}
现在,如果您在dots数组中使用了一个不需要检查的特定数字,则可以使用该数字而不是
0


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

int
不是
boolean
。你不能像使用布尔值那样使用整数值。我看不到
int
s,这是你的旧代码还是新代码?@TimCastelijns我猜,dots变量(或者它是字段?)以前是
boolean[][]
,现在是
int[][]
。当然,这是行不通的。他所描述的错误最有可能出现在以下行中,在这些行中,声明并初始化了left和up布尔变量。当然,我们可以猜测。但我们不知道,这就是我问的原因:-)那么我建议,现在,你要彻底摆脱
,把重点放在侧面和盒子上,以及你想如何跟踪它们的状态。此外,您需要更改
onTouchEvent()
方法来查找最近的边,而不是最近的点,但这是一个简单的修改。如果双方由一名玩家“拥有”,那么您将希望以类似于方框的方式跟踪这些方,即使用
int
s.@UmarFarooq什么是
?我的意思是,它在程序中代表什么?点是一个数组。int[][]dotsIt在“圆”上存储drawcalls。您能举一个它的内容示例吗?我已经看到了这一点,但我无法实现它。不能将所有布尔值转换为整数。关键是做相反的事情,因为条件语句(if、while等)使用布尔。我给出的答案是如何使用int得到布尔结果。反之亦然。