1

私はしばらくこれについて頭を悩ませてきました。このコードを実行すると、Index out of Bounds が発生し続けます。

基本的に、私はテキストボックスを取り、それを配列に分割し、配列の各インデックスを使用して、文字列でいっぱいの配列と比較しました。関連するコードを貼り付けました。私が間違っていたことがわかりますか?

エラー点の近くにエラーを置くように設定しました。( <----- )

public partial class MainWindow : Window
{

    string[] kbsubject = new string[4000];
    string[] kbbody = new string[4000];
    string[] wordsplit = new string[4000];
    int[] hits = new int[4000];
     StreamWriter WriteBody = new StreamWriter("kbsubjecttest.txt");
    StreamReader readSubject = new StreamReader("kbsubject.txt");
    StreamReader readBody = new StreamReader("kbbody.txt");
    int IndexHolder = 0, counter = 0, counterSearch = 0, WordsIndex = 0, counterWord=0, ArrayIndex = 0;
    string compareBody, compareSubject;


    public MainWindow()
    {
        InitializeComponent();




    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        wordsplit = SearchBox.Text.Split(' ');
        diagWindow.Items.Add(wordsplit.Length);
        diagWindow.Items.Add("Preforming search by split");
        WordsIndex = 1;
        counterWord = 1;
        while (counterSearch != wordsplit.Length)
        {
            if (kbbody[counterWord].Contains(wordsplit[WordsIndex]))   <--------
            {
                hits[ArrayIndex] = counterWord;
                ArrayIndex++;
                counterWord++;
                WordsIndex++;




            }
            else
            {
                ArrayIndex++;
                counterWord++;
                WordsIndex++;
            }

        }



        }
4

3 に答える 3

0

いくつかのこと:

この行はあなたのバグです:
WordsIndex = 1; // 問題は静かで単純だと思います。なぜ 1 から始まるのですか? ゼロにする必要があります

counterWord も 0 から開始する必要があり、次の場合は反復を停止する必要があります
counterSearch < wordsplit.Length counterSearch != wordsplit.Length

このコードが両方で書かれておりifelse両方のスコープの後に移動する必要がある場合:

ArrayIndex++;
counterWord++;
WordsIndex++;

固定コード:

public partial class MainWindow : Window
{

    string[] kbsubject = new string[4000];
    string[] kbbody = new string[4000];
    string[] wordsplit = new string[4000];
    int[] hits = new int[4000];
     StreamWriter WriteBody = new StreamWriter("kbsubjecttest.txt");
    StreamReader readSubject = new StreamReader("kbsubject.txt");
    StreamReader readBody = new StreamReader("kbbody.txt");
    int IndexHolder = 0, counter = 0, counterSearch = 0, WordsIndex = 0, counterWord=0, ArrayIndex = 0;
    string compareBody, compareSubject;


    public MainWindow()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        wordsplit = SearchBox.Text.Split(' ');
        diagWindow.Items.Add(wordsplit.Length);
        diagWindow.Items.Add("Preforming search by split");
        WordsIndex = 0;
        counterWord = 0;
        while (counterSearch < wordsplit.Length)
        {
            if (kbbody[counterWord].Contains(wordsplit[WordsIndex]))   <--------
            {
                hits[ArrayIndex] = counterWord;
            }

            ArrayIndex++;
            counterWord++;
            WordsIndex++;                
        }
        }
于 2013-10-15T05:23:02.477 に答える
0

問題はこの行にあります

while (counterSearch != wordsplit.Length)

どちらの値も変更しcounterSearchないwordsplitので、ループが無期限に実行され、最終的にインデックスが範囲外になります。

于 2013-10-15T05:23:14.403 に答える
0

while ループを開始する前に、WordsIndex や CounterWord を 1 ではなく 0 に設定してみてください。配列のインデックスが 0 であるため、これが IndexOutOfBounds エラーの原因である可能性があります。

于 2013-10-15T05:24:50.667 に答える