Java 类型不匹配异常
我正在开发游戏,最初我使用布尔值,而使用贴花数组,后一个结果显示,我应该使用int来存储游戏状态,而不是使用boolean,当我用int替换boolean时,我的if语句显示类型不匹配异常,并且未为参数类型boolean定义运算符&&,int。这是我的if语句代码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 [][] 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得到布尔结果。反之亦然。