【发布时间】:2015-11-09 00:41:15
【问题描述】:
我刚刚学习了异常处理。所以,我还是习惯了。我知道如何进行基本的异常处理,例如输入正确的除法值并在输入错误值时抛出 DividebyZeroException。
但我需要一些帮助来执行以下操作:
创建一个异常处理以抛出错误
1) 每行的整数个数不相等 例如:Matrix = [ 3 4; 9 8 1] 应该是: matrix = [ 3 4 2; 9 8 1]
2) 分号“;”我用作分隔符的替换为无效字符,例如:matrix = [ 3 4 2 # 9 8 1]
这是我的代码:
这是我创建字符串的主要内容。
string text = "A = [8 5 5 4; 2 6 5 3; 8 5 2 6]";
这是我的课
public string[,] Matrix(string text)
{
try
{
char[] splitOne = { '[', ']' };
char[] splitTwo = { ';' };
char[] splitThree = { ' ' };
words = text.Split(splitOne)[1]
.Split(splitTwo, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Split(splitThree, StringSplitOptions.RemoveEmptyEntries))
.ToArray();
}
catch
{
Console.WriteLine("Try entering a correct string");
}
string[,] matrix = new string[words.Length, words[0].Length];
for (int i = 0; i < words.Length; ++i)
{
for (int j = 0; j < words[i].Length; ++j)
{
matrix[i, j] = words[i][j];
}
}
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
Console.Write("{0} ", matrix[i, j]);
}
Console.WriteLine();
}
return matrix;
}
如何使 try and catch 起作用?这是一个基本的通用问题,但我如何使它也能满足我的以下要求。现在它没有输出我的消息。
【问题讨论】:
-
目前您在
try内没有做任何可能失败的事情。将此添加到 tryint x = int.Parse("Designed To Fail");然后它应该会崩溃(因为您无法将该字符串解析为 int)并在 catch 中输出您的代码。编辑: Try catch 只会捕获系统异常,而不是不会导致系统异常的逻辑错误。如果您throw exception例如if(words.Length < 2){ throw new Exception("too few values here"); },则例外情况 -
我认为如果我将矩阵字符串更改为:matrix = [ 3 4 2 # 9 8 1] 它会使尝试部分失败,但事实并非如此。
-
没错,它只是试图在 ;没有看到;并继续前进。没有实际的失败,这就像当你没有任何 x 时尝试做
String.replace('x', 'y')它运行,什么也不做,但不会失败。你的代码是一样的。它运行,没有做你想做的事,但它也没有失败,这是因为这是你的逻辑错误,而不是系统异常,你可以做的是if(text.IndexOf('#') > 0){ throw new Execption("# found, please use ;"); -
哦。我现在明白了。这为我清除了那部分。但是那部分代码会进入 try-catch 吗?
-
是的,你可以把它放在 try catch 中。它将做什么,如果它在字符串中找到一个#,那么它将抛出错误并强制发生捕获。请注意,它将继续,它不会再次尝试,这意味着如果它确实捕获,代码中 try/catch 下方的所有内容仍将尝试执行,并可能在空/空数组上崩溃您的程序. (越界错误)
标签: c# parsing matrix exception-handling try-catch