黑马程序员——第四天(Java数组)

来源:互联网 发布:淘宝投诉 编辑:程序博客网 时间:2024/05/10 13:24

---------------------- android培训、java培训、期待与您交流! ----------------------

一.数组(静态初始化-常见问题)

1.int [] arr = new int[]{3,4,6,2,5};//创建一个数组实体,并给数组的每一个位置上都添加了具体的元素

2.int [] arr = {3,6,3,6,7};//

ArrayIndexOutofBoundsException  操作数组时,访问到了数组中不存在的角标

NullPointerException 空指针异常   当引用没有任何指向  值为空的情况  该引用还在用于操作实体导致的


二.数组(常见操作-遍历)

//定义功能:用于打印数组中的元素,元素间用逗号隔开public static void printArray(int[] arr){System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i != arr.length-1) {System.out.print(arr[i]+", ");}else {System.out.println(arr[i]+"]");}}}

三.数组(常见操作-获取最值)

//获取最大值public static int getMax(int[] arr){int max = arr[0];/*for (int i = 0; i < arr.length; i++) {max = (max>arr[i])?max:arr[i];}return max;*/for (int i : arr) {max = (max > i)? max : i ;}return max ;}//获取最小值public static int getMin(int[] arr){int min = 0;for (int i = 0; i < arr.length; i++) {if(arr[i]<arr[min]){min = i ;}}return arr[min];}



四.数组(排序-选择排序)

//选择排序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]){int temp = arr[i]; arr[i] = arr[j];arr[j] = temp;}}}}

五.数组(排序-冒泡排序)

//冒泡排序 //第一圈  最值出现了最后位public static void bubbleSort(int[] arr){for (int i = 0; i < arr.length-1; i++) {for (int j = 0; j < arr.length-i-1; j++) {//-i 让每一次比较的元素减少  ; -1  避免角标越界if (arr[j]>arr[j+1]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}
Arrays.sort(arr);

六.数组(排序-位置置换功能抽取)

public static void awap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}

七.数组(折半查找)

public static int halfSearch(int[] arr , int key){int min = 0 , max = arr.length - 1 , mid = (min + max)/2 ;while(key!=arr[mid]){if(key > arr[mid])min = mid + 1 ;else if(key < arr[mid])max = mid - 1;if(min > max)return-1;mid = (min+max)/2;}return mid ;}

public static int halfSearch_2(int[] arr , int key){int min = 0 , max = arr.length - 1 , mid /*= (min + max)/2*/ ;while(min <= max){mid = (min + max)/2 ;if(key > arr[mid]) min = mid + 1 ;else if (key < arr[mid]) max = mid - 1 ; else return mid;}return -1 ;}
折半查找
可以提高效率
但是必须保证数组是有序的 

八.数组(十进制-二进制)

进制转换

/*十进制 --->  二进制*/public static void toBin(int num){StringBuilder sb = new StringBuilder();while(num > 0 ){sb.append(num%2);num /= 2 ; }System.out.println(sb.reverse());}
九.数组(十进制-十六进制)
/*十进制 --->  十六进制*/public static void toHex(int num){StringBuilder sb = new StringBuilder();for (int i = 0; i < 8; i++) {int temp = num & 15;if(temp > 9)//System.out.println((char)(temp-10+'A'));sb.append((char)(temp - 10 + 'A'));else//System.out.println(temp);sb.append(temp);num = num >>> 4;}System.out.println(sb.reverse());}

十.数组(查表法:十进制-十六进制)

/*查表法将所有的元素临时存储起来,都建立对应关系,每一次&15后的值作为索引去查建立好的表,就可以找到对应的元素这样比 -10+‘A’ 简单的多这个表怎么建立呢?可以通过数组的形式来定义十六进制中的元素0 1 2 3 4 5 6 7 8 9 A  B  C  D  E  F0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15//角标 */public static void toHex_2(int num){char[] chs = {'0','1','2','3',      '4','5','6','7',      '8','9','A','B',      'C','D','E','F'};//定义一个临时容器。char[] arr = new char[8];//'\u0000'一个空位  相当于空格int pos = arr.length ;//定义指针 while(num !=0 ) {int temp = num&15;arr[--pos] = chs[temp];num = num >>> 4 ;}//遍历存储的arr数组for (int i = pos; i < arr.length ; i++) {System.out.print(arr[i]+",");}}

十一.数组(查表法:十进制-二进制)

public static void toBin(int num){//定义二进制的表char[] chs = {'0','1'};//定义一个临时存储容器char[] arr = new char[32];//定义一个操作数组的指针int pos = arr.length;while(num != 0){int temp = num & 1;arr[--pos] = chs[temp];num = num >>> 1;}for (int i = pos; i < arr.length; i++) {System.out.print(arr[i]);}}
十二.数组(进制转换优化)

/*十进制--->二进制*/public static void toBin(int num ){trans(num, 1, 1);}/*十进制--->八进制 */public static void toBa(int num ){trans(num, 7, 3);}/*十进制--->十六进制 */public static void toHex(int num ){trans(num, 15, 4);}public static void trans(int num , int base,int offset){if(num == 0 ){System.out.println(0);return;} char[] chs = {'0','1','2','3',      '4','5','6','7',      '8','9','A','B',      'C','D','E','F'};char[] arr = new char[32];int pos = arr.length;while(num != 0 ){int temp = num & base;arr[--pos] = chs[temp];num = num >>> offset;}for (int i = pos; i < arr.length; i++) {System.out.print(arr[i]);}}

十三.数组(二维数组)

数组中的数组

把数组作为元素存到了另一个数组当中  这个数组叫做 二维数组

int[][] arr = new int [3][4];//3是二维数组的长度   4是二维数组中 每一个一维数组的长度

定义了名称为arr的二维数组

二维数组中有3个一维数组

每一个一维数组中有四个元素

 int[][] arr = new int[3][];

数组是引用数据类型  初始化值为null

//获取二维数组里所有元素的和int sum = 0;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {sum += arr[i][j];}}System.out.println(sum);}

---------------------- android培训、java培训、期待与您交流! ----------------------
原创粉丝点击