如何将局部变量转化成全局变量

散步的魚 2010-10-29 08:51:56
  private void button1_Click(object sender, EventArgs e)
{
int data = inputdata;

int[] array = new int[1000];
for (var i = 0; i <= 1500; i++)
array[i % 1000] = i * 2;

Array.Sort(array);

int location = binarysearch(inputdata, array);
if (location >= 0)
{
MessageBox.Show("查找结果:" + location.ToString() + "指针位置:" + /*此处为mid的值*/, "查找结果");//在此处调用“mid”
}
else
{
data = inputdata--;
MessageBox.Show("无此数据!如需查找接近值请继续“查找”", "查找结果");
}
}

private int binarysearch(int data, int[] array)
{
int low = 0;
int high = array.Length;
int mid = 0;
while (low <= high)
{
mid = (low + high) / 2;//此处的值转化成全局变量
if (array[mid] == data)
return data;
else
{
if (array[mid] > data)
{ high = mid - 1; }
else if (array[mid] < data)
{ low = mid + 1; }
}
}
return -1;
}

请问如何将二分法中的mid值在注释处调用
...全文
2544 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
醒子宇 2010-10-29
  • 打赏
  • 举报
回复
厉害....
jerysab 2010-10-29
  • 打赏
  • 举报
回复
呵呵,学习。。。。。
兔子-顾问 2010-10-29
  • 打赏
  • 举报
回复
不改你方法,只修改为成员变量。试试这样。
private int data = 0;
private void button1_Click(object sender, EventArgs e)
{
if(data == 0) data = inputdata;
int[] array = new int[1000];
for (var i = 0; i <= 1500; i++)
array[i % 1000] = i * 2;

Array.Sort(array);

int location = binarysearch(inputdata, array);
if (location >= 0)
{
MessageBox.Show("查找结果:" + location.ToString() + "指针位置:" + /*此处为mid的值*/, "查找结果");//在此处调用“mid”
}
else
{
data = inputdata--;
MessageBox.Show("无此数据!如需查找接近值请继续“查找”", "查找结果");
}
}

边城的刀声 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fishrd 的回复:]

private int mid;早就试过 返回不了二分法里面的mid值 可以断点看两处值不一样
[/Quote]
当然了你要把方法里的mid的声明去掉,就是这句:
int mid = 0;
散步的魚 2010-10-29
  • 打赏
  • 举报
回复
private int mid;早就试过 返回不了二分法里面的mid值 可以断点看两处值不一样
萤火架构 2010-10-29
  • 打赏
  • 举报
回复
获取mid还可以使用out\ref等
chazikai24 2010-10-29
  • 打赏
  • 举报
回复
这么多代码都写出来了,连个全局变量都不会?
边城的刀声 2010-10-29
  • 打赏
  • 举报
回复
是成员变量,还是全局变量
成员变量的话,用2楼的方法
全局变量的话,用2楼的方法不过要变成静态的
public static Int32 mid;
speedfiman 2010-10-29
  • 打赏
  • 举报
回复
全局变量当然是在你的类的顶部生成,因为C#语言的非内部变量的作用范围也是从它被声明的地方一直到程序最下端。
你只要把mid移到类的最上端声明一下
hztltgg 2010-10-29
  • 打赏
  • 举报
回复


private int mid = 0;

private void button1_Click(object sender, EventArgs e)
{
int data = inputdata;

int[] array = new int[1000];
for (var i = 0; i <= 1500; i++)
array[i % 1000] = i * 2;

Array.Sort(array);

int location = binarysearch(inputdata, array);
if (location >= 0)
{
MessageBox.Show("查找结果:" + location.ToString() + "指针位置:" + mid, "查找结果");//在此处调用“mid”
}
else
{
data = inputdata--;
MessageBox.Show("无此数据!如需查找接近值请继续“查找”", "查找结果");
}
}

private int binarysearch(int data, int[] array)
{
int low = 0;
int high = array.Length;
while (low <= high)
{
mid = (low + high) / 2;//此处的值转化成全局变量
if (array[mid] == data)
return data;
else
{
if (array[mid] > data)
{ high = mid - 1; }
else if (array[mid] < data)
{ low = mid + 1; }
}
}
return -1;
}

浪子-无悔 2010-10-29
  • 打赏
  • 举报
回复
完全可以在你的程序顶部定义一个全局变量,然后再这里给他赋值。
调用的时候,你就调用顶端的那个全局变量呗。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧