Question

My program has no compile errors but the output is incorrect. Example input:

size of array: 5
input numbers: 5 4 3 2 1
//sorted: 1 2 3 4 5
search: 1
output: number 1 found at index 4

the output should be number 1 found at index 0 since the numbers were sorted already. How will I change it to this.

    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");
            }
        }
    }
Was it helpful?

Solution

You're sorting numsInString but then searching nums. nums is being populated before the search, so you're seeing the results of searching the unsorted numbers.

Once you've parsed numsInStrings into nums, you should be working with the latter array only. Make sure that's the one you're sorting and searching through.

In other words, once you replace the current sort call with

Array.Sort(nums);

your code will be fine.

Updated:

You actually need another fix. Right now, you're initializing nums to be an array of size 100. By default, each element will be 0. So even though you put numbers in the first five elements, when you sort the array, you end up with 95 0's, followed by 1 2 3 4 5.

You should delay initializing nums until you've seen how big numsInString is:

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]);
}

Now when you sort nums, you'll see only the numbers you entered.

OTHER TIPS

you are sorting the numsInString array, but still searching into the nums array.

for (loc = 0; loc < SizeNum; loc++)
{
    if (numsInString[loc] == key)
    {
        found = true;
        break;
    }
}

You're parsing numsInString then you're sorting it. (I suspect the sort won't do what you want, either.)

I think you really want to be sorting nums instead:

Array.Sort(nums);

Having said that, there are simpler ways of achieving the end result - such as using IndexOf to find the index of a value in an array.

It's also rather unclear why you've got braces here:

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

That makes it look like you've got a loop with a body, but it's actually equivalent to:

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

... the braces serve no purpose here, and merely harm readability.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top