以下代码属于二进制搜索算法。用户在textbox1
中输入数字,并在textbox2
中输入他想要使用binarysearch查找的数字。当我在textBox2
中输入例如16并在我评论的行上放置断点时,我看到searchnum的值为10.
我认为它会转换为十六进制。我不知道为什么。你能救我吗?
private void button1_Click(object sender, EventArgs e)
{
string[] source = textBox1.Text.Split(',');
int[] nums = new int[source.Length];
for (int i = 0; i < source.Length; i++)
{
nums[i] = Convert.ToInt32(source[i]);
}
string str_searchnum = textBox2.Text;
int searchnum = Convert.ToInt32(str_searchnum); // str_searchnum shows the value 16 but searchnum shows 10
int first = 0;
int last = nums.Length - 1;
while (1 < nums.Length - 1)
{
int mid = (int)Math.Floor(first + last / 2.0);
////if (first < last)
////{
//// break;
////}
if (searchnum < nums[mid])
{
last = mid - 1;
}
if (searchnum > nums[mid])
{
first = mid + 1;
}
else
{
MessageBox.Show(nums[mid].ToString());
}
}
}
答案 0 :(得分:4)
检查调试器是否设置为使用十六进制表示法显示值?您可以通过右键单击观察窗口来找到此选项。
如果不是这样,请逐步完成整个方法。 str_searchnum的价值是什么?
虽然我个人更喜欢int.TryParse(),但Convert.ToInt32()应该经过充分测试,而不是进行任何基本转换。
答案 1 :(得分:1)
为什么不使用Array.BinarySearch?此外,您的循环条件(可能)是错误的。