本帖最后由 邵旭博 于 2012-4-19 23:24 编辑
同步更新帖:http://a7635368a.blog.163.com/blog/static/205859040201231910235199/
今天写了一天的代码,各种各样的纠错,而且有各种各样的事情,学习的进度慢了很多:
为了减少每次输入相同的代码则把每次相同的代码用一个函数表示起来,如下:
public static void swap(int[] arr,int a, int b) //////想好未知量到底有多少个,我开始写时就只写了int a, int b 没写int[] arr
{
int temp = arr[a] ;
arr[a] = arr;
arr = temp;
}
该函数是用来调换数组的两个数的,我一开始写的代码是
public static void swap(int a, int b)
{
int temp = a;
a=b;
b=temp;
}
我写的函数没有改变数组中的两个单元的值,只是把在该函数中把arr[y]与arr[y+1]的位置调换了,原函数没有改变
改错经验:在函数中定义一个变量a,然后在循环中a++就能看出一共循环执行了几次
数组的查找:如果找不到就return -1;
顺序查找:
for (int x=0;x<arr.length ;x++ )
{
if (arr[x]==key)
{
return x;
}
}
return -1;
折半查找:
while (min<=max) /////一开始我写的while(min<max)当输入9时出错为-1以为忽略了min=max时
{
mid=(min+max)/2;
if (key>arr[mid])////一开始我写的是min=mid 这样就会存在最后的一个元素
{
min=mid+1;
}
else if (key<arr[mid])
{
max=mid-1;
}
else ///一开始我只写else没写else if出错,因为中包括key==arr[mid]所以这样写是不正确的。
return mid;
}
System.out.println(a);
第二种做法
while (arr[mid]!=key)
{
if (key>arr[mid])
{
min=mid+1; 、
}
//else //////else中包括key==arr[mid]所以这样写是不正确的。
else if(key<arr[mid])
{
max=mid-1;
}
/*
if (arr[mid]==key) /////while(arr[mid]!=key)当arr[mid]==key时自动跳出循环,所以不需要再定义一个if
{
++b;
System.out.println("b="+b);
return mid;
}
*/
if (min>max)
{
System.out.println("c="+c);
//break; /////我一开始定义的是结束循环然后return -1但是没有return mid简洁,所以就把顺序改了
return -1;
}
mid=(min+max)/2;
}
//return -1;//////如果把找不到mid值当做正常的值会非常繁琐。
return mid;
进制转换中的栈:StringBuffer sb= new StringBuffer()
存数据:sb.append(num%2);
取数据:sb.reverse()
while与for的转换:while(x>0)转换成for( ;x>0;) 但for语句的好处是又可以加入命令在;;前后如: for(int a;x>0;x=a)
{
a=x/2;
System.out.print(x%2);
}
|