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]的一维数组长度。
相关文章推荐
- Android studio导入eclipse项目且不改变目录结构
- java流
- 冒泡排序改进版(java)
- java中整型之间的转换
- spring中配置log4j
- Android 如何在Eclipse中查看Android API源码 及 support包源码
- Java遇见HTML——JSP篇之JSP指令与动作元素
- Java:List remove时候注意事项
- Spring中@Autowired注解、@Resource注解的区别
- Struts2 页面url请求如何找action
- 编程技巧系列(3)Java数组转化成List
- 教你在Java接口中定义方法
- Spring MVC 同一个方法同时返回view或json
- 【在myeclipse中使用Junit(4.12), Hamcrest(1.3) 和Eclemma】
- java第六节-this关键字,java的内部类
- Java线程之间的通信-等待/通知机制
- Java设计模式 -- 工厂方法模式
- java.lang.IncompatibleClassChangeError
- java内存模型
- Java反射机制<2>