java个人学习笔记05(进制装换+排序查找+二维数组)

来源:互联网 发布:配音日漫用哪个软件 编辑:程序博客网 时间:2024/05/22 01:29

1.前面所学知识的综合应用:

/*需求:综合上一版十进制转化为十六进制,增加十进制转化为八进制、二进制的功能思路:查表法java提供的功能:Integer.toBinaryString();Integer.toOctalString();Integer.toHexString();*/import java.util.*;class System_Convert {public static void main(String[] args) {System.out.println("请输入一个整数:");Scanner input = new Scanner(System.in);int num = input.nextInt();//从键盘输入一个整数String str_hex = toHex(num);//十进制——》十六进制String str_oct = toOct(num);//十进制——》八进制String str_bin = toBin(num);//十进制——》二进制System.out.println("Hex:"+str_hex);System.out.println("Oct:"+str_oct);System.out.println("Bin:"+str_bin);}public static String toHex(int num){return "0x"+trans(num,15,4);}public static String toOct(int num){return "0"+trans(num,7,3);}public static String toBin(int num){return trans(num,1,1);}public static String trans(int num,int base,int offset){//base:进制,offset:数据右移的位数if(num == 0)return "0";//考虑到0的输出,否则0的输出为空char[] arr = new char[32];char[] table = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};int index = arr.length;while(num != 0){int tmp = num & base;//获取对应进制的末几位num = num >>> offset;//无符号右移对应进制的位数arr[--index] = table[tmp];//获取的数作为查表的索引逆序存储于数组中}return toString(arr,index);}public static String toString(char[] arr,int index){//将数组元素转化为字符串String s = "";for(int i = index;i<arr.length;i++){s = s + arr[i];//任何数据与字符串相加都是相连接}return s;}}

测试结果:


数组的排序和查找:

/*选择排序:依次选出余下的最小值冒泡排序:依次两两比较,需要arr.length-1趟比较二分查找:数组必须先有序,(不能先排序再查找,因为排序时数组元素的索引可能会改变)*/class  Sort{public static void main(String[] args) {int[] arr = {12,34,1,4,56,78,45};//printarr(arr);selectSort(arr);//bubbleSort(arr);printarr(arr);int index = half_search(arr,1);if(index == -1)System.out.println("没有找到");else System.out.println("该元素在数组中的索引是"+index);}public static void selectSort(int[] arr){//选择排序for(int i=0;i<arr.length-1;i++){//最后一个元素无需再比较for(int j=i+1;j<arr.length;j++){if(arr[i]>arr[j]){swap(arr,i,j);//交换两元素}}} } public static void bubbleSort(int[] arr){//冒泡排序for(int i=0;i<arr.length-1;i++){//只需arr.length-1趟排序for(int j=0;j<arr.length-i-1;j++){if(arr[j]>arr[j+1]){swap(arr,j,j+1);//交换两元素}}} } public static int half_search(int[] arr,int key){int min = 0;int max = arr.length-1;int mid;while(min<=max){mid = (min+max)>>1;if(arr[mid]==key)return mid;else if(arr[mid]>key)max = mid-1;else min = mid+1;}return -1;//没有找到¥¥¥若return min;则解决:如果往有序数组中插入一个数并保持元素有序,如何获得该位置?(数组不能插入元素) } public static void swap(int[] arr,int x,int y){//交换数组两元素int tmp = arr[x];arr[x] = arr[y];arr[y] = tmp; } public static void printarr(int[] arr){//打印数组元素for(int i=0;i<arr.length;i++){if(i!=arr.length-1){System.out.print(arr[i]+",");}else{System.out.println(arr[i]);}//去掉小尾巴,} }}
2.二维数组的定义和在内存中的表示:


/*二维数组的定义和理解:“数组中的数组”*/class Arrays {public static void main(String[] args) {/*int[][] array = new int[4][3];//第一种定义,二维数组的长度以及二维数组中一维数组的长度都确定了System.out.println(array);//[[I@9e5c73,[表示数组,两个表示二维数组,@表示分隔符,9e5c73表示哈希地址System.out.println(array[0]);//[I@c791b9System.out.println(array[0][0]);//0System.out.println(array.length);//4System.out.println(array[0].length);//3int[][] arr = new int[3][];//第二种定义,明确了二维数组的长度,没有明确一维数组的长度System.out.println(arr);//[[I@9e5c73System.out.println(arr[0]);//null,因为一维数组没有定义System.out.println(arr[0][0]);//NullPointerException空指针异常,一维数组没有定义,无法访问一维数组里的元素System.out.println(arr.length);//3System.out.println(arr[0].length);//NullPointerException*/int[][] arrays = {{1,2,3},{4,5,6,7},{8,9}};//第三种定义方式for(int i = 0;i<arrays.length;i++){//输出for(int j=0;j<arrays[i].length;j++){if(j!=arrays[i].length-1)System.out.print(arrays[i][j]+",");elseSystem.out.println(arrays[i][j]);}}}}




0 0
原创粉丝点击