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填充,因此您会看到搜索未排序数字的结果。

一旦你解析numsInStringsnums,你应该只使用后一个数组。确保这是您正在排序和搜索的那个。

换句话说,一旦您将当前的排序调用替换为

Array.Sort(nums);

你的代码会很好。

更新

你实际上需要另一个修复。现在,您正在初始化nums一个大小为 100 的数组。默认情况下,每个元素都是 0。因此,即使您将数字放在前五个元素中,当您对数组进行排序时,您最终会得到 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 回答