结果似乎错了

时间:2012-10-29 07:48:55

标签: 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;

}

3 个答案:

答案 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 ......符号||(逻辑“或”)是您需要的

干杯,