我的代码将显示我这不是一个可接受的输入.如果我插入负数.然后继续提示输入.但它继续计算.这是我的代码中包含错误的一部分.但我没有看到.
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;
}
Run Code Online (Sandbox Code Playgroud)
你应该写
if (oct < 0 || oct > 99999999 )
代替
if (oct < 0 && oct > 99999999 )
||代表或代表&&和.
实际上,我怀疑它显示的是什么.看看条件:
if (oct < 0 && oct > 99999999 )
Run Code Online (Sandbox Code Playgroud)
一个数字怎么可能是负面的并且在很大程度上是积极的?你想要一个"或"条件.
接下来,看看如果你正在做的那样满足以下条件:
{
b = false;
System.out.println("That is not an acceptable input.");
}
Run Code Online (Sandbox Code Playgroud)
你只是继续前进 - 它将返回正确的结果(错误)但它毫无意义.你已经知道了结果,为什么不回来呢?
你要:
if (oct < 0 || oct > 99999999 )
{
System.out.println("That is not an acceptable input.");
return false;
}
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,更早地执行验证(在调用方法之前) - 如果输入无效则抛出异常.目前你给出的"无效输入"和"有效但非八进制输入"的结果相同,这对我来说听起来不是一个好主意.
请注意,"一旦你知道了值就返回"的方法也是我对方法的其余部分采取的方法 - 我根本不打算使用b变量.我会把你的循环改成这样的东西:
int value = oct;
while (value > 0)
{
int digit = value % 10;
if (digit >= 8)
{
return false;
}
value = value / 10;
}
return true;
Run Code Online (Sandbox Code Playgroud)
你不必担心digit被否定,因为你已经检查过你是否以非负值开始.
此外,这个方法没有oct作为参数似乎很奇怪.这将使它更加独立.
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |