您的位置:首页 > 编程语言 > Java开发

java第十天

2016-03-19 18:47 525 查看

二分查找

前提是必须是有序的数字

它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果x

class binarysearch//二分查找
{
public static int binarysearch_1(int[] array,int key)
{
int min=0;
int max=array.length-1;
int mid=(min+max)/2;
while (array[mid]!=key)
{
if (key>array[mid])
{
min=mid+1;
}
else if(key<array[array[mid]])
{
max=mid-1;
}
mid=(max+min)/2;
}
return mid;
}
public static int binarysearch_2(int[] array,int key)
{
int min=0;
int max=array.length-1;
int mid;
while (min<=max)
{
mid=(min+max)>>1;
if (key>array[mid])
{
min=mid+1;
}
else if (key<array[mid])
{
max=mid-1;
}
else
return mid;
}
return -1;
}
public static void main(String[] args)
{
int[] array={1,2,3,4,5
4000
,6,7,8,9};
System.out.print(binarysearch_1(array,9));
System.out.print(binarysearch_2(array,9));
}
}


*值得注意的是二分法的第二种方法中

mid=(min+max)>>1;//二进制右移一位,效果就是除2

其实是等于

int mid=(min+max)/2;



进制转换

十进制转换二进制

class  bin
{
public static void tobin(int num)
{
StringBuffer sb=new StringBuffer();
while (num>0)
{
sb.append(num%2);
num=num/2;
}
System.out.println(sb.reverse());
}
public static void main(String[] args)
{
tobin(6);
}
}


该代码调用StringBuffer关键词,new了一个字符串空间,并将得到的字符串依次放入,sb.reverse()则是将所调用的字符串进行翻转输出

十进制转换十六进制

首先值得一提的是可以直接调用integer.toBinarystring(需要转换的十进制数)=二进制数

class tohex
{
public static void tohex(int num)
{
StringBuffer sb=new StringBuffer();
for (int x=0;x<8;x++)/*32位二进制数,每四个二进制排成一队
依次处理一队,一共需处理8次*/
{
int temp=num&15;//特别注意的是这里是&,若改成num%15则得出答案为00000030
if (num>9)//曾经打错成num>9,虽然答案是对的。
{

sb.append((char)(temp-10+'A'));/*若没将char加上,则会打印出000000376
即直接将temp-10加上A的ANSI码*/
}
else
sb.append(temp);
num=num>>>4;//处理完一组数字,前移4位
}
System.out.print(sb.reverse());//将储存的字符串倒序输出
}
public static void main(String[] args)
{
tohex(60);//直接调用
}
}


未解决的问题

这里提出了问题为什么要用&,&是什么,&&又是什么?

& – > 只要左右两边有一个为false,则为false;只有全部都为true的时候,结果为true

对于:&& – > 只要符号左边为false,则结果为false;当左边为true,同时右边也为true,则结果为true



使用查表法进行十进制到十六进制的转换

思路:

定义一个临时容器

定义一个表进行替换。

定义一个pos(报告实时进行转换的角标)

建立while循环,只要循环到0的数字,跳出循环

循环内将读取到的数字进行存取,然后再前进四位二进制

遍历数组,循环打印。

class  hex2
{
public static void hex2(int num)
{
char[] array=new char[8];
char[] table={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int pos=array.length;
while (num!=0)
{
int temp=num&15;
array[--pos]=table[temp];//将对应的表中数据换算
num=num>>>4;//在二进制位中前进4位
}
for (int x=0;x<array.length ;x++ )
{
System.out.print(array[x]);
}
}
public static void main(String[] args)
{
hex2(60);
}
}


二维数组

class two_dimensional_array
{
public static void two_dimensional_array(int[][] array)
{
for (int x=0;x<array.length;x++ )//使用嵌套将二维数组循环打印出
{
for (int y=0;y<array.length;y++ )
{
System.out.println(array[x][y]);
}
}
}
public static void main(String[] args)
{
int[][] array={{0,1,2},{2,7,8,9,10},{8,9,7}};
two_dimensional_array(array);
System.out.println(array[0][2]);
}
}
int[] x,y[];
这样定义的话,x为一维数组,y为二维数组。


小疑惑解决

int[][] array2=new int[3][];
array2[0]=new int[3];
array2[1]=new int[1];
array2[2]=new int[2];
System.out.println(array2.length);//打印出3,看视频讲这是打印出二维数组的长度,正确
System.out.println(array2[2].length);//打印出2,这是array2[2]的一维数组长度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: