如何在我的代码中进行异常处理

时间:2015-11-09 00:41:15

标签: c# parsing matrix exception-handling try-catch

我刚学会了异常处理。所以,我仍然习惯它。我知道如何进行基本的异常处理,例如输入正确的除法值,如果输入的值不正确,则抛出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;
}

我如何尝试并抓住工作?这是一个基本的通用捕获,但我如何使它也符合我的以下要求。现在它没有输出我的信息。

1 个答案:

答案 0 :(得分:1)

您误解Exceptions,您希望使用Exceptions作为数据结构的规则。相反,Exceptions是在方法中出现错误时,因为您在数学运算中除以0。这是一个严重的错误,代码不知道该怎么做。

对于这个具体的例子,你应该做if个陈述。因为您想要应用规则并强制执行它并且Exceptions不适合这些用例,如果您在哪里实现它,您需要if语句来检查您是否要应用规则的字符串to,在你的标准之后很好地形成并且之后抛出Exception。如果你正在创建一个库,那么这是有意义的。

我的代码应该是什么样的解决方案。

String text = "A = [8 5 3 4; 2 6 5 3; 8 5 2 3]";

var startIndex = text.IndexOf('[') + 1;
var length = text.IndexOf(']') - startIndex;
text = text.Substring(startIndex, length);

if(!text.Contains(";"))
{
    Console.WriteLine("malformed seperator");

    return;
}

var test = text.Split(';').Select((k, i) => new {Key = i, Value = k.Replace(" ", "").Length});


if(!test.All(x => x.Value == test.First().Value))
{
    Console.WriteLine("unbalanced array");
    return;
}

但是我觉得你的工作比你应该更加努力,你的设计意味着在字符串创建中有很多东西正确,并且使用已经构建的矩阵库会在这里节省大量的工作。

修改

更新了解决方案,但我仍然认为字符串矩阵的设计会迫使代码处于许多方向,这是不可靠的。