我的程序没有编译错误,但输出不正确。示例输入:
阵列大小:5
输入数字:5 4 3 2 1
// sorted: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");
}
}
}
答案 0 :(得分:2)
您正在排序numsInString
,然后搜索nums
。在搜索之前,正在填充,因此您将看到搜索未排序数字的结果。
将nums
解析为numsInStrings
后,您应该只使用后一个数组。确保这是你正在整理和搜索的那个。
换句话说,一旦用
替换当前的排序调用nums
你的代码没问题。
<强>更新强>:
你实际上需要另一个修复。现在,您正在将Array.Sort(nums);
初始化为大小为100的数组。默认情况下,每个元素都为0.因此,即使您将数字放在前五个元素中,当您对数组进行排序时,您最终会95 0's,然后是1 2 3 4 5。
您应该延迟初始化nums
,直到您看到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]);
}
进行排序时,您只会看到您输入的数字。
答案 1 :(得分:1)
您正在对numsInString
数组进行排序,但仍在搜索nums
数组。
for (loc = 0; loc < SizeNum; loc++)
{
if (numsInString[loc] == key)
{
found = true;
break;
}
}
答案 2 :(得分: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");
{
...
}
......括号在这里没有用处,只会损害可读性。