类/方法未返回正确的值

时间:2014-09-03 17:03:09

标签: c# console console-application windows-console

可能是一个非常新的问题,但我们走了。

我对此很陌生,现在我已经达到了我的第一个逻辑问题。

我已经创建了一个类+方法,该方法应该返回一个Int32值,它返回的内容至少在我看来是无法访问的。我也不想要返回这个值。

以下是代码:

    public static Int32 SetInterval(ConsoleKeyInfo cki)
    {
        if (cki.Key == ConsoleKey.D1 || cki.Key == ConsoleKey.D2 || cki.Key == ConsoleKey.D3 || cki.Key == ConsoleKey.D4 || cki.Key == ConsoleKey.D5 || cki.Key == ConsoleKey.D6)
        {
            if (cki.Key == ConsoleKey.D1)
            {
                return 10000;
            }
            else if (cki.Key == ConsoleKey.D2)
            {
                return 20000;
            }
            else if (cki.Key == ConsoleKey.D3)
            {
                return 30000;
            }
            else if (cki.Key == ConsoleKey.D4)
            {
                return 45000;
            }
            else if (cki.Key == ConsoleKey.D5)
            {
                return 60000;
            }
            else if (cki.Key == ConsoleKey.D6)
            {
                return 120000;
            }
        }
        else
        {
            SetInterval(Console.ReadKey());
        }
        return 50;
    }

以下是我在主班中执行的方式:

        static int interval;

        interval = DefineInterval.SetInterval(Console.ReadKey());
        Console.WriteLine("");
        Console.WriteLine(interval.ToString());

现在发生的事情是:

如果我在没有按任何其他键的情况下正确按下6个数字中的一个,那就好了。输出是正常的,因为它应该是。

然后,当我按下时,例如" a6"在我的键盘上,我得到的是:

" A6 50 "

有什么想法吗?也许不是做这种事情的最佳方式。

4 个答案:

答案 0 :(得分:2)

SetInterval块中对else的递归调用对返回值没有任何作用。你想要的是这个:

public static Int32 SetInterval(ConsoleKeyInfo cki)
{
    if (cki.Key == ConsoleKey.D1)
    {
        return 10000;
    }
    else if (cki.Key == ConsoleKey.D2)
    {
        return 20000;
    }
    else if (cki.Key == ConsoleKey.D3)
    {
        return 30000;
    }
    else if (cki.Key == ConsoleKey.D4)
    {
        return 45000;
    }
    else if (cki.Key == ConsoleKey.D5)
    {
        return 60000;
    }
    else if (cki.Key == ConsoleKey.D6)
    {
        return 120000;
    }
    else
    {
        return SetInterval(Console.ReadKey());
    }
}

请注意,我还移动了围绕第一个if if chain的不必要的if语句。

答案 1 :(得分:0)

public static Int32 SetInterval(ConsoleKeyInfo cki)
{
    if (cki.Key == ConsoleKey.D1 || cki.Key == ConsoleKey.D2 || cki.Key == ConsoleKey.D3 || cki.Key == ConsoleKey.D4 || cki.Key == ConsoleKey.D5 || cki.Key == ConsoleKey.D6)
    {
        if (cki.Key == ConsoleKey.D1)
        {
            return 10000;
        }
        else if (cki.Key == ConsoleKey.D2)
        {
            return 20000;
        }
        else if (cki.Key == ConsoleKey.D3)
        {
            return 30000;
        }
        else if (cki.Key == ConsoleKey.D4)
        {
            return 45000;
        }
        else if (cki.Key == ConsoleKey.D5)
        {
            return 60000;
        }
        else if (cki.Key == ConsoleKey.D6)
        {
            return 120000;
        }
    }
    else
    {
        return SetInterval(Console.ReadKey());
    }
}

答案 2 :(得分:0)

您正在递归调用您的方法。当你提供正确的输入时,它会很好。

其他它会获得正确的输入,在正确的输入之后,它会从方法的第一次调用中返回默认值。

<强>解决方案:

只需删除return 50并设置:

即可
else
{
    return SetInterval(Console.ReadKey());
}

答案 3 :(得分:-1)

快速提问 - 为什么要按&#34; a6&#34; ?这是错误的,你希望你的程序只读6,继续前进或背后有不同的原因吗?如果这是原因,那么你需要删除返回50并在else中放置返回SetInterval(Console.ReadKey())。