我有一个方法需要用户输入与数组相关的char。我需要使用try catch异常语句来触发某种形式的异常,最好是IndexOutOfRangeException
。如果用户没有输入正确的字符,则需要提示他们再次输入字符。
private static double dataEntry(string location, int num, int month, Mural[] murals)
{
string entryString;
bool isValid;
int x;
char code;
double tot = 0;
Console.WriteLine("\n\nEntering {0} jobs:", location);
x = 0;
while (x < num)
{
tot += murals[x].Price;
Console.Write("Enter customer name >> ");
murals[x].Name = Console.ReadLine();
Console.WriteLine("Mural options are:");
for (int y = 0; y < Mural.muralCodes.Length; ++y)
Console.WriteLine(" {0} {1}", Mural.muralCodes[y], Mural.muralTypes[y]);
Console.Write(" Enter mural style code >> ");
entryString = Console.ReadLine();
isValid = false;
while (!isValid)
{
try
{
code = char.Parse(entryString);
}
catch (FormatException)
{
Console.WriteLine("Wrong format");
Console.Write(" Enter mural style code >> ");
entryString = Console.ReadLine();
}
catch (IndexOutOfRangeException)
{
Console.WriteLine("Wrong format");
Console.Write(" Enter mural style code >> ");
entryString = Console.ReadLine();
}
finally
{
if (!char.TryParse(entryString, out code))
{
Console.WriteLine("Wrong format");
Console.Write(" Enter mural style code >> ");
entryString = Console.ReadLine();
}
else
{
murals[x].Code = code;
isValid = true;
}
}
}
++x;
}
return tot;
}
答案 0 :(得分:1)
您应该使用此功能Char.TryParse
char output;
if (char.TryParse(whatUserEntered, output))
{
// Char is in output.
}
else
{
//Bad entry by user.
}
答案 1 :(得分:1)
如果我正确理解您的问题,您希望有条件地触发异常。使用此代码:
if(/* not valid or out of bounds */) {
throw new IndexOutOfRangeException();
}
答案 2 :(得分:0)
请参阅下面的msdn参考,重写您的代码并回发更多问题。
http://msdn.microsoft.com/en-us/library/ms173165(v=vs.110).aspx
答案 3 :(得分:0)
如果您真的必需使用try / catch,并且您想要重新启动用户,请尝试此操作。我将解释这一切,以便你了解发生了什么......因为它是家庭作业和所有。
你正在捕捉多个例外,但没有必要,因为你在每个例子中做同样的事情。抓住......什么也不做。在catch语句中实际上没有做,但至少你的程序没有终止。在现实世界中,您将通知用户,或记录错误或其他内容。
当char.Parse
失败并抛出异常时,您的逻辑将永远不会到达接下来的两行(murals[x]...
和isValid = true
),并且您的循环将重复,直到用户输入有效字符。此时,isValid为true并退出while
循环。
bool isValid = false;
while (!isValid)
{
Console.WriteLine("Wrong format");
Console.Write(" Enter mural style code >> ");
entryString = Console.ReadLine();
try
{
code = char.Parse(entryString);
murals[x].Code = code;
isValid = true;
}
catch
{
// Just ignore the error
// Bad practice, which is why others are suggesting Char.TryParse
}
}