我正在玩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]);
}
}
}
}
答案 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库以进行这些操作。
(请记住,数组也是一个集合)