2011-08-30 71 views
0

我的程序没有编译错误,但输出不正确。示例性输入:阵列的线性搜索问题

大小:5张
输入数:5 4 3 2 1
//排序:1 2 3 4 5
搜索:1
输出:在索引中找到数1 4

由于已经对数字进行了排序,因此输出应该是索引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"); 
      } 
     } 
    } 
+1

这看起来像什么,但线性搜索。 –

+0

你的程序清楚*不会*有错误,因为它不会做你想要的... –

+0

它看起来很像线性搜索。最后一部分是。 Sort()并不是必需的,如果你想要在输入数据中的位置,这是错误的。 –

回答

2

你排序numsInString但随后搜索numsnums正在填充之前的搜索,所以你看到搜索未排序数字的结果。

numsInStrings解析为nums后,您应该只使用后一个数组。确保这是你正在整理和搜索的那个。

换句话说,一旦你替换

Array.Sort(nums); 

代码当前排序通话将被罚款。

更新

你实际上需要另一个修复。现在,你正在将nums初始化为一个大小为100的数组。默认情况下,每个元素都是0.因此,即使将数字放在前五个元素中,当对数组进行排序时,最终会得到95 0,其次是1 2 3 4 5

您应该延迟初始化nums,直到你看到numsInString有多大:

​​

现在,当您排序nums,你会看到只有你输入的数字。

+0

这和你排序的字符串数组而不是int数组,我不认为是你打算做的。 – crlanglois

+0

@crlanglous Right;将排序改为nums数组解决了这两个问题。 – dlev

+0

这是我的第一个选择。的Array.Sort(NUMS);.但它显示零。然后我将它改为NumInstring。 – Boogie

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"); 
{ 
    ... 
} 

......大括号在这里没有任何用处,只会伤害可读性。

1

您正在排序numsInString数组,但仍然搜索nums数组。

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