9、数组
一、回顾
1》数组基本要素:
标识符(数组名称、变量名)
数组元素(数组中保存的数据)
元素下标(数据的编号)
元素类型(数组中存储的数据的数据类型)
2》使用数组
声明数组
int[] array; int array[];
分配内存空间
array = new int[5];
赋值
array[3]=3;
使用
array[1]++
边声明边赋值
int[] array = {1,2,3};
int[] array = new int[]{1,2,3};
3》不赋值的话,给出来就是默认值,是0,0.0,false,"";
二、java的变量类型:两种
1、值类型的变量:8中基本数据类型的变量
2、引用类型的变量:通过new的方式创建出来的;(除了基本数据类型,都是引用类型的)
数组\Scanner
toString():把类型和内存地址拿出来,这是object默认的
3、String也是引用数据类型的
String str = new String("噶哈哈");
String str = "ah ds";
这两种的存储方式是不同的
三、一些小知识
System.out.println(array);
[I@15db9742 :[标识数组;I:标识数据类型;后边是内存地址
快捷键:
foreach+alt+?
for+alt+?
四、增强型for循环/for-each循环
//for-each //没有初始化循环变量,循环条件,更新循环变量,只有循环体;一种特殊的循环 for(int num:array) { System.out.println(num); }
// int[] array = {1,2,3}; // System.out.println(array); //for // for(int i=0;i<array.length;i++) { // System.out.println(array[i]); // } //while // int i=0; // while(i<array.length) { // System.out.println(array[i]); // i++; // } //do-while // int i=0; // do { // System.out.println(array[i]); // i++; // }while(i<array.length); //for-each //没有初始化循环变量,循环条件,迭代条件只有循环体;一种特殊的循环 // for(int num:array) { // System.out.println(num); // }
五、针对“无”和“空”的反思
initialize:初始化;
null:标识为无,只能适用于引用的数据类型
//无:null
int[] array2 = null;
for(int num:array2) {
System.out.println(num);
}
//java.lang.NullPointerException
//空:00000
int[] array2 = new int[3];
for(int num:array2) {
System.out.println(num);
}
//基本数据类型的默认值:byte,short,int,long:0;float,double:0.0;char:'';boolean:false;String:null;
// //无:null // int[] array2 = null; // for(int num:array2) { // System.out.println(num); // } // //java.lang.NullPointerException //空 // String[] array2 = new String[3]; // for(String num:array2) { // System.out.println(num); // }
六、数组的新增和删除
因为数组的长度一旦确定,是不能改变的;
新增:相当于赋值;
删除:把其他的值顺序覆盖要删除的值,把最后一个赋值为初始化的值。
七、一些例子
/** * 例子: 收银员输入5笔购物金额,在控制台输出5笔金额,并且计算总和 */ // Scanner s = new Scanner(System.in); // float[] array = new float[5]; // float sum = 0F; // for(int i=0;i<5;i++) { // System.out.println("请输入第"+(i+1)+"笔购物金额:"); // array[i] = s.nextFloat(); // } //// for(int i=0;i<array.length;i++) { //// System.out.println("第"+(i+1)+"笔金额为:"+array[i]); //// sum += array[i]; //// } // int i=1; // for (float f : array) { // System.out.println("第"+i+++"笔金额为:"+f); // sum += f; // } // System.out.println("总金额为:"+sum);
/** * 例子:有一组学员的成绩{99,85,82,63,60} * 新增一个学院的成绩,添加到数组中,同事要求新的数组同样保持降序排列 */ // float[] array = {99,85,82,63,60}; // Scanner s = new Scanner(System.in); // System.out.println("请输入新学员的成绩:"); // float score = s.nextFloat(); // //将score插入到array中 // float[] array2 = new float[6]; // //找到新的数据再老数组中应该在的位置 // int index = 5; // for (int i = 0; i < array.length; i++) { // if(score>array[i]) { // index = i; // break; // } // } // //填充array2 // for (int i = 0; i < array2.length; i++) { // if(index==i) { // array2[index] = score; // }else if(index>i){ // array2[i] = array[i]; // }else { // array2[i] = array[i-1]; // } // } // //循环遍历展示结果 //// for (int i = 0; i < array2.length; i++) { //// System.out.println(array2[i]); //// } // // for (float f : array2) { // System.out.println(f); // }
八、冒泡排序
交换两个变量的值,则需要三个值进行交换
冒泡排序,是比较总个数-1次
升序口诀:n个数字来排队,两两相比小靠前,外层循环n-1,内层循环n-1-i(外层的循环变量)。
降序口诀:n个数字来排队,两两相比大靠前,外层循环n-1,内层循环n-1-i(外层的循环变量)。
/** * 冒泡排序:让array升序排列: * 数组中的数据依次两两进行对比,大的数字放到后边:依次找到最大值、次大值等 */ // int[] array = {77,100,66,88,99}; // int num ; // for (int j = 0; j < array.length-1; j++) {//比的次数为总个数-1 // for (int i = 0; i < array.length-1-j; i++) { // if(array[i]>array[i+1]) {//如果有比num大的数字,则进行交换 //// if(array[i]<array[i+1]) {//降序 // num = array[i]; // array[i] = array[i+1]; // array[i+1] = num; // } // } // // } // for (int i : array) { // System.out.println(i); // }
九、数组的常用方法Arrays:专门针对数组的工具类;提供了操作胡数组的方法
1》boolean equals(array1,array2);比较两个数组是否相等(1、数组长度一致,2每一位的元素相等)
2》sort(array);对数组进行升序排列
3》String toString(array);将数组转换成字符串
4》fill(array,val);//将数组替换成val
5》array copeOf(array,length);//将数组进行复制成一个长度为length的新数组,数组元素保持不变
6》int binarySearch(array,val);//查询元素val在数组array中的下标(必须先进行sort排序)
/** * 判断数组是否相等 */ // int[] array1= {1,2}; // int[] array2 = {1,2,6}; // boolean flag = Arrays.equals(array1, array2); // System.out.println(flag); /** * 升序 */ int[] array = {77,100,66,77,88,99,99}; Arrays.sort(array); for (int i : array) { System.out.println(i); } /** * 转换成字符串 */ // System.out.println(Arrays.toString(array)); /** * 替换 */ // Arrays.fill(array, 6); // System.out.println(Arrays.toString(array)); /** * 复制 */ // int[] array2 = Arrays.copyOf(array, 3); // System.out.println(Arrays.toString(array)); // System.out.println(Arrays.toString(array2)); /** * 查找索引 */ int index = Arrays.binarySearch(array, 77); System.out.println(index);