数组搜索C#抛出错误

时间:2013-10-09 00:10:39

标签: c# .net csc

我正在玩C#试图让基础知识轻拍,但我对这个奇怪的错误感到难过。我正在尝试搜索一系列名称,然后返回任何匹配的位置。目前我只是打印这个名字,但我能够得到这个位置。

出于某种原因,当我输入要搜索的名称并按Enter键时,程序崩溃说“ArraySearch.exe已停止工作”。任何想法都错了吗?

原谅这些愚蠢的问题,我仍然是这种语言/范式的新手:p

谢谢! :)

using System;

public class Test
{
    public static void Main()
    {   
        string[] stringArray = {"Nathan", "Bob", "Tom"};
        bool [] matches = new bool[stringArray.Length];
        string  searchTerm = Console.ReadLine();
        for(int i = 1;i<=stringArray.Length;i++){
            if (searchTerm == stringArray[i - 1]){
                matches[i] = true;
            }
        }
        for(int i = 1;i<=stringArray.Length;i++){
            if (matches[i]){
                Console.WriteLine("We found another " + stringArray[i - 1]);
            }
        }
    }
}

3 个答案:

答案 0 :(得分:4)

i将达到3,这将在此处给出超出范围的例外:

matches[i] = true;

使用调试很容易发现。 (尝试学习使用它。非常有用)

matches有3个元素,因此索引的范围是0到2。

答案 1 :(得分:0)

using System;

public class Test
{
    public static void Main()
    {
        string[] stringArray = { "Nathan", "Bob", "Tom" };
        bool[] matches = new bool[stringArray.Length];
        string searchTerm = "Bob";
        for (int i = 1; i <= stringArray.Length; i++)
        {
            if (searchTerm == stringArray[i - 1])
            {
                matches[i - 1] = true;
            }
        }
        for (int i = 1; i <= stringArray.Length; i++)
        {
            if (matches[i - 1])
            {
                Console.WriteLine("We found another " + stringArray[i - 1]);
            }
        }
    }
}

请参阅上面的修复程序。它失败了,因为bool数组在索引3处没有项目.3比最后一个索引多1个索引,即2.

其指数为0,1,2。反过来,你可以根据需要存储3个元素。

循环遍历数组时,最好习惯使用实际索引。 所以我建议从0循环到array.length - 1.这样你就可以直接引用数组中的每个元素。

答案 2 :(得分:0)

我强烈建议使用lambda进行此类处理。 线条少得多,易于理解。

例如:

using System;
using System.Linq;

namespace ConsoleApplication5
{
    public class Test
    {
            public static void Main()
            {
                string[] stringArray = { "Nathan", "Bob", "Tom" };
                bool exists = stringArray.Any(x => x.Equals("Nathan"));
                Console.WriteLine(exists);
            }
     }
}

上面的方法调用Any()会搜索你。有很多选择可供探索。您可以用First(),Last()等替换Any()。如果我是你,我肯定会在集合上探索System.Linq库以进行这些操作。

(请记住,数组也是一个集合)