可能是一个非常新的问题,但我们走了。
我对此很陌生,现在我已经达到了我的第一个逻辑问题。
我已经创建了一个类+方法,该方法应该返回一个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 "
有什么想法吗?也许不是做这种事情的最佳方式。
答案 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())。