---------------------- 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 F
0 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培训、期待与您交流! ----------------------