我正在开发游戏,最初我在使用布尔值同时对十进制数组进行处理,后来它发现我应该使用 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);
}
}
答案 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
也不对应false
(boolean
类型的变量只能是true
或false
,而不是{{1} }或0
)。您必须在语句中设置一个表达式,该表达式将给出一个布尔结果。
例如,你可以这样做:
1
而不是:
if(dots[x][y] == 0){....}
现在,如果您使用点数组中的特定数字来检查不需要的情况,请使用该数字而不是if(dots[x][y]){....}
进行检查。
如果条件语句中有多个表达式与0
和/或&&
运算符相结合,则会出现相同的规则。