我希望我的代码的这一部分用于我的计算器,因为我用变量替换x我需要确保像2x这样的东西是2 * x。当前面有+时,为什么这段代码会添加'*'? 如果pLine =“1 + x”;
为什么还会添加“*”?
for (int j = 0; j < pLine.length(); j++)
{
if (pLine.charAt(j) == 'X' || pLine.charAt(j) == 'x' )
{
if(pLine.charAt(j-1) != '+' || pLine.charAt(j-1) != '-' || pLine.charAt(j-1) != '/' || pLine.charAt(j-1) != '*')
{
pLine = pLine.substring(0, j) + "*" + pLine.substring(j, pLine.length());
System.out.println(pLine.substring(0, j));
break;
}
else
{
}
}
}
答案 0 :(得分:5)
此行中的布尔逻辑不正确
if (pLine.charAt(j-1) != '+' || pLine.charAt(j-1) != '-' || pLine.charAt(j-1) != '/' || pLine.charAt(j-1) != '*')
此陈述将永远为真,因为无论该字符是什么,它都不等于'+'
或者它不等于'-'
。
应该是这样的:
char c = pLine.charAt(j-1);
if (!(c == '+' || c == '-' || c == '/' || c == '*'))
或者这个:
if (c != '+' && c != '-' && c != '/' && c != '*')
阅读De Morgan's Laws,了解有关这两个表达式相同的原因的更多解释。
答案 1 :(得分:0)
在以下行中:
if(pLine.charAt(j-1) != '+' || pLine.charAt(j-1) != '-' || pLine.charAt(j-1) != '/' || pLine.charAt(j-1) != '*')
您应该&&
而不是||
。