0

プログラムにコンパイル エラーはありませんが、出力が正しくありません。入力例:

配列のサイズ: 5
入力数値: 5 4 3 2 1
//ソート済み: 1 2 3 4 5
検索: 1
出力: インデックス 4 で見つかった数値 1

番号はすでにソートされているため、出力はインデックス 0 で見つかった番号 1 になるはずです。これをどう変えるか。

    int[] nums = new int[100];
    int SizeNum;
    bool isNum = false;

    private void ExeButton_Click(object sender, EventArgs e)
    {
        int i, loc, key;
        Boolean found = false;
        string SizeString = SizeTextBox.Text;
        isNum = Int32.TryParse(SizeString, out SizeNum);
        string[] numsInString = EntNum.Text.Split(' ');   //split values in textbox
        for (int j = 0; j < numsInString.Length; j++)
        {
            nums[j] = int.Parse(numsInString[j]);
        }
        if (SizeNum == numsInString.Length)
        {
            Array.Sort(numsInString);
            key = int.Parse(SearchTextBox.Text);
            ResultText.AppendText("Sorted: ");
            for (i = 0; i < SizeNum; i++)
                ResultText.AppendText(" " + numsInString[i]);
                 ResultText.AppendText("\n\n");
            {
                for (loc = 0; loc < SizeNum; loc++)
                {
                    if (nums[loc] == key)
                    {
                        found = true;
                        break;
                    }
                }
                if (found == true)
                    ResultText.AppendText("Number " + key + " Found At Index [" + loc + "]\n\n");
                else
                    ResultText.AppendText("Number " + key + " Not Found!\n\n");
            }
        }
    }
4

3 に答える 3

2

あなたはソートしていますnumsInStringが、検索していnumsます。は検索前numsに入力されているため、並べ替えられていない数値を検索した結果が表示されています。

numsInStringsに解析したらnums、後者の配列のみを操作する必要があります。並べ替えて検索しているものであることを確認してください。

つまり、現在の並べ替え呼び出しを次のように置き換えると、

Array.Sort(nums);

あなたのコードは問題ありません。

更新日:

実際には別の修正が必要です。現在、numsサイズ 100 の配列になるように初期化しています。デフォルトでは、各要素は 0 です。したがって、最初の 5 つの要素に数字を入れても、配列を並べ替えると、95 個の 0 が続きます。 1 2 3 4 5 で。

nums大きさがわかるまで、初期化を遅らせる必要がnumsInStringあります。

string[] numsInString = EntNum.Text.Split(' ');   //split values in textbox
nums = new int[numsInString.Length];

for (int j = 0; j < numsInString.Length; j++)
{
    nums[j] = int.Parse(numsInString[j]);
}

並べ替えるnumsと、入力した数字だけが表示されます。

于 2011-08-30T16:16:16.337 に答える
1

配列をソートしていますが、numsInString配列を検索していnumsます。

for (loc = 0; loc < SizeNum; loc++)
{
    if (numsInString[loc] == key)
    {
        found = true;
        break;
    }
}
于 2011-08-30T16:17:39.670 に答える
0

解析numsInString てから並べ替えます。(並べ替えもあなたが望むことをしないと思います。)

nums代わりに並べ替えたいと思います:

Array.Sort(nums);

IndexOfそうは言っても、配列内の値のインデックスを見つけるために使用するなど、最終結果を達成するためのより簡単な方法があります。

ここに中括弧がある理由もかなり不明です。

for (i = 0; i < SizeNum; i++)
    ResultText.AppendText(" " + numsInString[i]);
    ResultText.AppendText("\n\n");
{
    ...
}

これにより、本体のあるループがあるように見えますが、実際には次と同等です。

for (i = 0; i < SizeNum; i++)
{
    ResultText.AppendText(" " + numsInString[i]);
}
ResultText.AppendText("\n\n");
{
    ...
}

...ここでは中括弧は何の役にも立たず、読みやすさを損なうだけです。

于 2011-08-30T16:17:20.793 に答える