1

我正在玩 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]);
            }
        }
    }
}
4

3 回答 3

4

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

matches[i] = true;

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

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

于 2013-10-09T00:15:15.137 回答
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() 会为您进行搜索。有很多选择可供探索。您可以将 Any() 替换为 First()、Last() 等。如果我是你,我肯定会探索 System.Linq 库以对集合进行此类操作。

(记住数组也是集合)

于 2016-08-18T08:57:00.273 回答
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。这样你就可以直接引用数组中的每个元素。

于 2016-08-11T14:08:02.603 回答