Java笔记1 Java编程基础<3>数组运用

时间:2021-05-29 19:42:13


04天-03-数组(常见操作-获取最值)

两种常见的方法代码示例:

       思路和步骤略。

       方法1:

public static int getMax(int arr){

       intmax = arr[0];

       for(inti=1;i<arr.length;i++){

              if(arr[i]>max){

       max = arr[i];

}

}

return max;

}

 

       方法2

public static void getMax(int[] arr){

       intmax = 0;//数组最大值的初始化角标

       for(intx=1;x<arr,length;x++){

       if(arr[x]>arr[max]){

              max = x;

   }

}

return arr[max];

}

 

04-04-数组(排序-选择排序)

示例:

public static void selectSort(int[] arr){

       for(intx=0;x<arr.length-1;x++){

       for(int y=x+1;y<arr.length;y++){

       if(arr[x]>arr[y]){

int temp = arr[x];

arr[x] = arr[y];

arr[y] = temp; 

      }

}

     }

}

 

04-05-数组(排序-冒泡排序)

示例:

public static void bubbleSort(int[] arr){

       for(intx=0;x<arr.length-1;x++){

       for(int y=0;y<arr.length-x-1;y++){//让每一次比较的元素减少1,避免角标越界。

       if(arr[y]>arr[y+1]){

int temp = arr[y];

arr[y] = arr[y+1];

arr[y+1] = temp; 

}

}

}

}

 

当一个函数出现多个相同代码块或多个函数调用同一个代码块时,可以进行共性抽取。

上面的selectSort和bubbleSort可以抽取得到的函数如下所示:

public staticvoid swap(int[] arr,int a,int b){

       int temp = arr[a];

       arr[a] = arr[b];

arr[b] = temp;

}

 

※ 最快的排序方法:希尔排序(效率最高)

 

04天-07-数组(折半查找)

折半查找特点:提高查询效率,但必须保证该数组是有序数组。

第一种方法:

public static int halfSearch1(int[] arr,intkey){

int min,max,mid;

min = 0;

max =arr.lenght-1;

mid =(max+min)/2;

 

while(arr[mid]!=key){

if(key>arr[mid]){

min = mid+1;

}else if(key<arr[mid]){

max = mid-1;

}

if(nin<max){

return -1;

}

mid = (max+min)/2;

}

return mid;

}

 

第二种方法:

public static int halfSearch2(int[] arr,intkey){

int min = 0,max= arr.length-1,mid;

while(min<max){

mid = (max+min)>>1;

if(key>arr[mid]){

min = mid+1;

}else if(key<arr[mid]){

max = mid-1;

}else{

return mid;

}

}

return -1;

}

 

04天-08-数组(十进制-二进制)

十进制-->二进制

public static String toBin(int num){

StringBuffer sb= new StringBuffer();

while(num>0){

sb.append(num%2);

num = num/2;

}

returnsb.reverse().toString();

}

 

04天-09-数组(十进制-十六进制)

十进制-->十六进制

第一种方法:

public static String toHex(int num){

StringBuffer sb= new StringBuffer();

for(intx=0;x<8;x++){//循环8次的原因:num为int,占32位,每次循环需截取低四位。

int temp = num%15;

if(temp>9){

sb.append((char)(temp-10+’A’));

}else{

sb.append(temp);

}

}

}

 

第二种方法:

//此函数只能转正整数

public static String toHex(int num){

char[] chs = {‘0','1','2','3',

'4','5','6','7',

'8','9','A','B','

C','D','E','F’};

//定义一个临时容器

char[] arr = newchar[8];

int pos =arr.length;

 

while(num!=0){

int temp = num&15;

arr[--pos] = chs[temp];

num = num>>>4;

}

return “0x”+String.valueOf(arr).substring(pos);

}

 

04天-11-数组(查表法十进制-二进制)

/*

此函数能转负数

*/

 

public static String toBin(int num){

//定义二进制表

char[] chs = {‘0’,’1’};

//定义一个临时存储器

char[] arr = newchar[32];

int pos =arr.length;

while(num!=0){

int temp = num&1;

arr[--pas] = chs[temp];

num = num>>>1;

}

returnString.valueOf(arr).subString(pos);

}

 

04天-12-数组(进制转换优化)

进行共性抽取,一个函数可以实现多进制转换。

public static String trans(int num,intbase,int offset){

if(num==0){

return “0”;

}

char[] chs = {‘0','1','2','3',

      '4','5','6','7',

'  8','9','A','B','

         C','D','E','F’};}

char[] arr = newchar[32];

int pos =arr.length;

while(num!=0){

int temp = num&base;

arr[--pos] = chs[temp];

num = num>>>offset;

}

returnString.valueOf(arr).substring(pos);

}

 

/*十进制-->八进制*/

public static String toBa(int num){

returntrans(num,7,3);

}

 

/*十进制-->十六进制*/

public static String toHex(int num){

returntrans(num,15,4);

}

 

/*十进制-->二进制*/

public static String toBin(int num){

renturntrans(num,1,1);

}

 

04-14-数组(二维数组练习)

1.      二维数组的格式

格式1:int[][] arr =new int[3][2];

       解析:

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

b.      二维数组中有三个一维数组;

c.      每个一维数组中有2个元素;

d.      一维数组的名称分别为arr[0]、arr[1]、arr[2];

e.      给第一个一维数组1角标位赋值为78的写法是:arr[1][1] = 78。

格式2:int[][] arr =new int[][];

解析:

a.      二维数组中有三个一维数组;

b.      每个一维数组都是默认初始化值null;

c.      可以对这三个一维数组分别进行初始化:

arr[0] = newint[3];

arr[1] = newint[1];

arr[2] = new int[2];

2.      举例

1)     int [][] arr = new int[3][4];/*定义了名称为arr的二维数组,二维数组中有三个一维数    组,每个一维数组有四个元素。*/

System.out.println(arr);//结果:[[I@17164(二维数组地址)

System.out.println(arr[0]);//结果:[I@de6ced(一维数组的入口地址)

2)     int[][] arr = new int[3][]

System.out.println(arr);//结果:[[@17164

System.out.println(arr[0])//结果:null

3.      数组的其他正确书写格式

1)       int[] x;int x[];

2)       int[][] y;int y[][];int []y[];

3)       int[]x,y[];//x一维,y二维也可拆分为:

int[] x;

int[] y[];

以上这种格式在开发中不用,sun国际认证考试中会出现。

x[0] = y;//error

y[0] = x;//yes

y[0][0] =x;//error

y[0][0] =y;//error

y[0][0] = x[0];//yes

x = y;//error