我的代码将显示我这不是一个可接受的输入。如果我插入负数。然后继续提示输入。但它继续计算。这是我的代码中包含错误的一部分。但我没有看到。
public static boolean checkOctal()
{
boolean b = true;
if (oct < 0 && oct > 99999999 )
{
b = false;
System.out.println("That is not an acceptable input.");
}
int tmp;
int tmp1 = oct;
while (tmp1 > 0)
{
tmp = tmp1 % 10;
tmp1 = tmp1 / 10;
if (tmp >= 0 && tmp < 8)
{
continue;
} else
{
b = false;
break;
}
}
return b;
}
答案 0 :(得分:6)
你应该写
if (oct < 0 || oct > 99999999 )
而不是
if (oct < 0 && oct > 99999999 )
||
代表或,而&&
代表和。
答案 1 :(得分:5)
实际上,我怀疑它显示的是什么。看看条件:
if (oct < 0 && oct > 99999999 )
一个数字如何能够同时消极和大致为正?你想要一个“或”条件。
接下来,看看如果 符合条件,你正在做什么:
{
b = false;
System.out.println("That is not an acceptable input.");
}
你只是继续前进 - 它会返回正确的结果(错误)但是没有意义。你已经知道了结果,为什么不回来呢?
你想:
if (oct < 0 || oct > 99999999 )
{
System.out.println("That is not an acceptable input.");
return false;
}
或者,更好的是,之前(在调用方法之前)执行验证 - 如果输入无效则抛出异常。目前你给出的“无效输入”和“有效但非八进制输入”的结果相同,这听起来对我来说不是一个好主意。
请注意,“一旦你知道了值就返回”的方法也是我对方法的其余部分采取的方法 - 我根本不打算使用b
变量。我会把你的循环改成这样的东西:
int value = oct;
while (value > 0)
{
int digit = value % 10;
if (digit >= 8)
{
return false;
}
value = value / 10;
}
return true;
您无需担心digit
是否定为负数,因为您已经检查过您是否以非负值开始。
此外,这个方法没有oct
作为参数似乎很奇怪。这将使它更加独立。
答案 2 :(得分:2)
你应该检查你的布尔逻辑:
if (oct < 0 && oct > 99999999 )
永远不会是真的 - 同时没有数字小于零和大于999999 ......符号||
(逻辑“或”)是您需要的
干杯,