结果似乎错了

Bol*_* Ch 3 java

我的代码将显示我这不是一个可接受的输入.如果我插入负数.然后继续提示输入.但它继续计算.这是我的代码中包含错误的一部分.但我没有看到.

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)

one*_*ach 6

你应该写

if (oct < 0 || oct > 99999999 )

代替

if (oct < 0 && oct > 99999999 )

||代表或代表&&和.

  • @QuadroQ:我不同意 - 虽然额外的括号可能有用*有时*,它们也可能会分散注意力 - 在这种情况下,我肯定认为它们更有害而不是有用. (3认同)

Jon*_*eet 5

实际上,我怀疑它显示的是什么.看看条件:

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作为参数似乎很奇怪.这将使它更加独立.