黑马程序员_Java基础 数组、数组工具类、文档注释总结

来源:互联网 发布:雾霾 知乎 编辑:程序博客网 时间:2024/06/14 22:26

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

---------------------------------------------------------------- 
移位操作的简单计算方法

>>右移操作
x>>y
就是x除以2的y此方,取整数
<<左移操作
X<<y
就是x乘以2的y次方
------------------------------------------------------------------

数组两种定义格式:
第一种定义格式:(需要一个容器,但是不明确容器的具体数据)

元素类型 [] 数组名 = new 元素类型[元素个数或数组长度];
int[] arr = new int[3];
arr[0]= 8;
System.out.println(arr[0]);
 
第二种定义格式:(需要一个容器,存储已知的具体数据)
元素类型 [] 数组名 = new 元素类型[]{元素,元素……};
int[] arr = new int [] {1,34,56};
int[] arr ={1,34,56}; 
 
数据一多就要用数组存。
-----------------------------------------------------------------------------
数组:常见问题
 
int[] arr = new int[3];
System.out.println(arr[3]);//ArrayIndexOutOfBoundsException
 
当访问到数组中不存在的角标时,就会发生数组角标越界异常
 
arr = null;
System.out.println(arr[0]);//NullPointException
 
当引用型变量没有任何实体指向时,还在用其操作实体就会引发该异常。
--------------------------------------------------------------------------
数组常见操作:
 
1、遍历。
对数组最基本的操作就是存和取,核心思想就是对角标的操作。
 

public static void main(String[] args){int[] arr=new int[]{1,23,443,222};//取奇角标for(int i=1;i<arr.length;i+=2){System.out.println("arr[i]="+arr[i]);}//取偶数角标for(int i=0;i<arr.length;i+=2){System.out.println("arr[i]="+arr[i]);}}
2、获取最值
 
思路:
 
1、需要进行比较,并定义变量记录每次比较后较大的值。
2、遍历数组,和比昂两中记录的元素进行比较。
3、遍历结束,该变量记录的就是最大值。
 
定义一个功能来实现。
public static void getMax() {int[] arr = new int[] { 1, 22, 32, 55, 234, 222, 234 };int max = arr[0];for (int i = 1; i < arr.length; i++) {if (arr[i] > max) {max = arr[i];}}System.out.println(max);}public static void getMax2() {int[] arr = new int[] { 1, 22, 32, 55, 234, 222, 234 };int maxIndex = 0;for (int i = 1; i < arr.length; i++) {if (arr[i] >arr[maxIndex]) {arr[maxIndex] = arr[i];}}System.out.println(arr[maxIndex]);}


-------------------------------------------------------------------------------------
3、排序


/** * 基本排序方法 * @author 张熙韬 * */public class BasicSort {public static void main(String[] args){int[] number=new int[]{1,7,9,4,5,2,3};number=selectionSort(number);number=bubbleSort(number);number=injectionSort(number);for(int i:number){System.out.print(i+" ");}}/** * 选择排序 * @param number * @return */public static int[] selectionSort(int[] number) {for (int i = 0; i < number.length; i++) {for (int j = i + 1; j < number.length; j++) {if(number[j]<number[i]){swap(number, i, j);}}}return number;}/** * 插入排序 * @param number * @return */public static int[] injectionSort(int[] number) {for(int i=1;i<number.length;i++){int tmp = number[i];int j=i-1;while(number[j]>tmp){number[j+1]=number[j];j--;if(j==-1){break;}}number[j+1]=tmp;}return number;}/** * 冒泡排序 * @param number * @return */public static int[] bubbleSort(int [] number) {boolean flag=true;for(int i=0;i<number.length-1&&flag;i++){flag=false;for(int j=0;j<number.length-i-1;j++){if(number[j]>number[j+1]){swap(number, j, j+1);flag=true;}}}return number;}public static void swap(int[] number, int i, int j) {int t = 0;t = number[i];number[i] = number[j];number[j] = t;}}
4、查找
如果查找的元素在数组中存在多个,会返回第一个的index
 
普通查找
public static int getIndex(int[] arr, int key){      for (int i = 0; i < arr.length; i++) {          if(key==arr[i])              return i;      }      return -1;  }   折半查找(二分查找)必须是有序的数组/** * 二分查找 * @author 张熙韬 * */public class BinarySearch {public static void main(String[] args) {int[] number = new int[] { 1, 7, 9, 4, 5, 2, 3 };int index = BinarySearch1(number, 5);System.out.println(index);}public static int BinarySearch1(int[] number,int des){int low=0;int upper=number.length-1;number=bubbleSort(number);while(low<=upper){int mid=(low+upper)/2;if(number[mid]>des){upper=mid-1;}else if(number[mid]<des){low=mid+1;}else {return mid;}}return -1;}/** * 冒泡排序 * @param number * @return */public static int[] bubbleSort(int [] number) {boolean flag=true;for(int i=0;i<number.length-1&&flag;i++){flag=false;for(int j=0;j<number.length-i-1;j++){if(number[j]>number[j+1]){swap(number, j, j+1);flag=true;}}}return number;}public static void swap(int[] number, int i, int j) {int t = 0;t = number[i];number[i] = number[j];number[j] = t;}}
-------------------------------------------------------------------------------


数组的使用


什么时候使用数组?
如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并作为角标使用。
这时就必须要想到数组的使用。 
 
就可以将这些数据存储到数组中。
根据运算的结果作为角标直接去查数组中对应的元素即可。

这种方式称为查表法。
使用查表法小练习
进制转换


 
/** * @author 张熙韬 * @version v1.0 */class ArrayTest7 {public static void main(String[] args) {//toBin(-6);//toHex(-60);//toBa(60);//System.out.println(Integer.toBinaryString(6));//System.out.println(Integer.toHexString(6));}/*十进制-->二进制*/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 x=pos; x<arr.length; x++){System.out.print(arr[x]);}return ;}}
----------------------------------------------------------------------------------------
二维数组
格式一

int[][] arr = new int[3][2];
定义了名称为arr的二维数组。
二维数组中有三个一维数组。
每个一维数组中有两个元素。
一维数组的名称分别为arr[0],arr[1],arr[2]。
给第一个一维数组角标1角标位赋值为7的写法是:arr[0][1] = 7;
 

格式二
int[][] arr = new int[3][];
二维数组中有三个一维数组。
每个一维数组的默认初始化值是null。
 可以对这三个一维数组分别进行初始化
 arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
 
格式三
int[][] arr = {{1,5,8},{6,6,36,58},{74};
int[][] arr = new int[3][2];
System.out.println(arr[0].length);
System.out.println(arr);//直接打印二维数组
System.out.println(arr[0]);//直接打印二位数组中角标为0的,一维数组
System.out.println(arr[0][1]);//直接打印二位数组中角标为0的,一维数组中角标为1的元素    
 
遍历二维数组
  int[][] arr = {{15,56,78,95},{85,48,235},{49,69}};     for (int i = 0; i < arr.length; i++) {         System.out.print('[');          for (int j = 0; j < arr[i].length; j++) {              if(j!=arr[i].length-1){              System.out.print(arr[i][j]+",");              }     else{        System.out.println(arr[i][j]+"]");       }  }

-----------------------------------------------------------------------------------------
class LuckNumber {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7,8};int pos = -1;for(int x=0;x<arr.length-1; x++){for(int y=0; y<3;y++){pos++;if(pos==arr.length)pos=0;while(arr[pos]==0){pos++;if(pos==arr.length)pos=0;}}arr[pos] = 0;//System.out.println(arr[pos]);}for(int x=0; x<arr.length; x++){if(arr[x]!=0){System.out.println(arr[x]);break;}}}}

---------------------------------------------------------------------------------------------------------------------------------------------------

//定义二维数组写法1  
class numthree
{
public static void main(String[] args)
{
float[][] numthree;             //定义一个float类型的2维数组
numthree=new float[5][5];       //为它分配5行5列的空间大小
numthree[0][0]=1.1f;            //通过下标索引去访问     1行1列=1.1
numthree[1][0]=1.2f;                                  // 2行1列=1.2
numthree[2][0]=1.3f;                                  // 3行1列=1.3
numthree[3][0]=1.4f;                                  // 4行1列=1.4
numthree[4][0]=1.5f;                                  // 5行1列=1.5
System.out.println(numthree[0][0]); //打印换行输出喽
System.out.println(numthree[1][0]);
System.out.println(numthree[2][0]);
System.out.println(numthree[3][0]);
System.out.println(numthree[4][0]);
}
}
//定义二维数组写法2   定义的同时分配空间大小
class numfour
{
public static void main(String[] args)
{
   short[][] numfour=new short[5][8]; //定义一个short类型的数组同时为它分配5行8列的空间大小
   numfour[0][7]=10;
   numfour[1][6]=20;
   numfour[2][5]=30;
   numfour[3][4]=40;
   numfour[4][3]=50;
   System.out.println(numfour[0][7]);
   System.out.println(numfour[1][6]);
   System.out.println(numfour[2][5]);
   System.out.println(numfour[3][4]);
   System.out.println(numfour[4][3]);
}
}


//定义二维数组写法3        不规则数组
class numfive
{
public static void main(String[] args)
{
long[][] numfive=new long[5][];     //定义一个long类型的不规则数组
numfive[0]=new long[5];             //为第1行分配5列
numfive[1]=new long[6];             //为第2行分配6列
numfive[2]=new long[7];             //为第3行分配7列
numfive[3]=new long[8];             //为第4行分配8列
numfive[4]=new long[9];             //为第5行分配9列
numfive[0][4]=10000000000L;         //1行5列=10000000000
numfive[1][5]=20000000000L;         //2行6列=20000000000
numfive[2][6]=30000000000L;         //3行7列=30000000000
numfive[3][7]=40000000000L;         //4行8列=40000000000
numfive[4][8]=50000000000L;         //5行9列=50000000000
System.out.println(numfive[0][4]); //打印换行输出喽
System.out.println(numfive[1][5]);
System.out.println(numfive[2][6]);
System.out.println(numfive[3][7]);
System.out.println(numfive[4][8]);
System.out.println(numfive[4][7]); //打印输出一个没有定义数组元素的数组 java会自动将他初始化值为0
}
}


//定义2维数组写法4    定义的同时赋初始值
class numsix
{
public static void main(String[] args)
{
double[][] numsix={{1.111D,2.222D,3.333D},{4.444D,5.555D,6.666D}};//定义double型的数组分配3行3列的空间同时赋值
System.out.println(numsix[0][0]); //打印换行输出1行1列=1.111
System.out.println(numsix[1][1]); //打印换行输出2行2列=5.555
}
}


//定义2维数组写法5   定义不规则的2维数组同时赋初始值
class numseven
{
public static void main(String[] args)
{
int[][] numseven=new int[][]{{10,20,30},{40,50},{60}}; //没什么好说的如果你在看不懂 那就别学了!
System.out.println(numseven[0][2]);
System.out.println(numseven[1][1]);
System.out.println(numseven[0][0]);
}
}
//定义2维数组写法6 定义不规则的2维数组同时赋初始值;
class numeight
{
public static void main(String[] args)
{
int[][] numeight={{100,200,300,400},{500,600,700,800},{900,1000,1100,1200,1300}};
System.out.println(numeight[0][2]);
System.out.println(numeight[1][2]);
System.out.println(numeight[2][1]);
}
}

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------