Java-Day06 数组
一、数组的概述
* 1.数组的理解:数组(Array),是多个相同数据按照一定顺序排列的集合,并使用一个名字命名。
* 并通过编号的方式对这些数据进行统一管理。
*
* 2.数组相关的概念:
* 》数组名
* 》元素
* 》角标、下标、索引
* 》数组的长度:元素的个数
*
* 3.数组的特点:
* 1)数组的特点:数组是有序列的。
* 2)数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型。
* 3)创建数组对象会在内存中开辟一整块连续的空间。
* 4)数组的长度一旦确定,就不能修改。
*
* 4.数组的分类:
* ①按照维数:一维数组、二维数组......
* ②按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组
*
* 5.一维数组的使用
* ①一维数组的声明和初始化
* ②如何调用数组是定位置的元素
* ③如何获取数组的长度
* ④如何遍历数组
* ⑤数组元素的默认初始化值
1 public class ArrayTest { 2 3 public static void main(String[] args) { 4 5 //1.一维数组的声明和初始化 6 int num;//声明 7 num = 10;//初始化 8 int id = 1001;//声明+初始化 9 10 int[] ids;//声明 11 //1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行 12 ids = new int[] {1001,1002,1003,1004}; 13 //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行 14 String[] names = new String[5]; 15 16 //错误的写法: 17 //int[] arr1 = new int[]; 18 //int[5] arr2 = new int[]; 19 //int[] arr3 = new int[3] {1,2,3}; 20 21 //总结:数组一旦初始化完全,其长度就确定了。 22 23 //2.如何调用数组是定位置的元素:通过角标的方式调用。 24 //数组的角标(或索引)从0开始的,到数组的长度-1结束。 25 names[0] = "MinyX"; 26 names[1] = "NauyY"; 27 names[2] = "Linux"; 28 names[3] = "Window"; 29 names[4] = "Macpro"; //charAt(0)能够获取到M 30 // names[5] = "Macpro1"; 异常:超出角标。 31 32 //3.如何获取数组的长度 33 //属性:length 34 System.out.println(names.length);//长度5 35 System.out.println(ids.length); 36 37 //4.如何遍历数组 38 // System.out.println(names[0]); 39 // System.out.println(names[1]); 40 // System.out.println(names[2]); 41 // System.out.println(names[3]); 42 // System.out.println(names[4]); 43 for(int i = 0;i < names.length;i++) { 44 System.out.println(names[i]); 45 } 46 47 } 48 }
1 /* 2 * ⑤数组元素的默认初始值 3 * > 数组元素是整型: 0 4 * > 数组元素是浮点型: 0.0 5 * > 数组元素是char型: 0[ASCII码为0的] 6 * > 数组元素是boolean型:false 7 * 8 * > 数组元素是引用数据类型;null 9 * 10 * ⑥ 数组的内存解析 11 */ 12 public class ArrayTest1 { 13 public static void main(String[] args) { 14 //5.数组元素的默认初始化值 15 int[] arr = new int[4]; 16 for(int i = 0;i < arr.length;i++) { 17 System.out.println(arr[i]); 18 } 19 System.out.println("****************"); 20 21 short[] arr1 = new short[4]; 22 for(int i = 0;i < arr1.length;i++) { 23 System.out.println(arr1[i]); 24 } 25 System.out.println("****************"); 26 float[] arr2 = new float[4]; 27 for(int i = 0;i < arr2.length;i++) { 28 System.out.println(arr2[i]); 29 } 30 System.out.println("****************"); 31 char[] arr3 = new char[4]; 32 for(int i = 0;i < arr3.length;i++) { 33 System.out.println("-" + arr3[i] + "-"); 34 } 35 36 if(arr3[0] == 0){ 37 System.out.println ("你好!"); 38 } 39 System.out.println("****************"); 40 boolean[] arr4 = new boolean[5]; 41 System.out.println(arr4[0]); 42 43 System.out.println("****************"); 44 String[] arr5 = new String[5]; 45 System.out.println(arr5[0]); 46 if(arr5[0] == null) { 47 System.out.println("北京天气不错!"); 48 } 49 } 50 }
1 /* 2 * 二维数组 3 * 4 * 1.理解 5 * 可以看成是一维数组array1又作为另一个一维数组array2的元素而存在 6 * 其实,从数组底层的运行机制来看,其实没有多维数组 7 * 8 * 2.二维数组的使用 9 * ①二维数组的声明和初始化 10 * ②如何通过数组的指定位置的元素 11 * ③如何获取数组的长度 12 * ④如何遍历数组 13 * ⑤数组的元素的默认初始化值 14 * ⑥数组的内存解析 15 * 16 */ 17 public class ArrayTest2 { 18 public static void main(String[] args) { 19 //1.二维数组的声明和初始化 20 int[] arr = new int[] {1,2,3};//一维数组 21 22 //二维数组的静态初始化 23 int[][] arr1 =new int[][]{{1,2,3},{4,5},{6,7,8}}; 24 //二维数组的动态初始化 1 25 String[][] arr2 = new String[3][2]; //3代表有三个元素,每个元素又有2个元素 26 //二维数组的动态初始化2 27 String[][] arr3 = new String[3][]; 28 //错误的情况 29 //String[][] arr4 = new String[][3]; 30 //String[][] arr5 = new String[][]; 31 //int[][] arr3 = new int[4][3]{{1,2,3},{4,5},{6,7,8}}; 32 33 //正确的情况 34 int arr4[][] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}}; 35 int[] arr5[] = new int[][]{{1,2,3},{4,5},{6,7,8}}; 36 int[][] arr6 = new int[][]{{1,2,3},{4,5},{6,7,8}}; 37 int[] arr7 = {1,2,3,4,5};//类型推断 38 39 //2.如何调用二维数组指定位置的元素 40 System.out.println(arr1[0][1]);//2 41 System.out.println(arr2[1][1]);//null 42 43 arr3[1] = new String[4]; //给arr3数组索引为1的位置上创建一个长度为4的String数组 44 System.out.println(arr3[1][0]); 45 //3.获取数组的长度 46 System.out.println(arr4.length);//3 47 System.out.println(arr4[0].length);//3 48 System.out.println(arr4[1].length);//4 49 50 //4.如何遍历数组 51 for(int i = 0;i < arr4.length;i++) { 52 for(int j = 0;j < arr4[i].length;j++) { 53 System.out.print(arr4[i][j] + " "); 54 } 55 System.out.println(); 56 } 57 } 58 }
1 /* 2 * 二维数组的使用: 3 * 规定:二维数组分为外层数组的元素,内层数组的元素 4 * int[] arr = new int[4][3]; 5 * 外层元素:arr[0],arr[1]等 6 * 内层元素:arr[0][0],arr[1][2]等 7 * ⑤数组的元素的默认初始化值 8 * 针对于初始化方式一:比如:int[][] arr = new int[4][3]; 9 * 外层元素的初始化值为:地址值 10 * 内层元素的初始化值:与一维数组初始化情况相同 11 * 针对初始化方式二:比如:int[][] arr = new int[4][]; 12 * 外层元素初始化值为:null 13 * 内层元素初始化值为:不能调用,否则报错 14 * ⑥数组的内存解析 15 * 16 * 17 * 18 */ 19 public class ArrayTest3 { 20 public static void main(String[] args) { 21 22 int[][] arr = new int[4][3]; 23 System.out.println(arr[0]);//[I@15db9742 Int类型地址值(内存指针) 24 System.out.println(arr[0][0]);//0 float的为0.0 String的为null 25 System.out.println("***************************"); 26 double[][] arr3 = new double[4][]; 27 System.out.println(arr3[1]);//null 因为还没有分配内存指针 28 } 29 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.minyx.exer; 2 import java.util.Scanner; 3 /* 4 * 2.从键盘读入学生成绩,找出最高分,并输出学生等级成绩。 5 * 成绩>=最高分-10 等级A 6 * 成绩>=最高分-20 等级B 7 * 成绩>=最高分-30 等级C 8 * 其余 等级D 9 * 10 * 提示:先读入学生人数,根据人数创建int数组,存放学生成绩。 11 */ 12 public class ArrayDemo1 { 13 public static void main(String[] args) { 14 //1.使用Scanner,读入五个学生个数 15 Scanner scanner = new Scanner(System.in); 16 System.out.println("请输入学生人数:"); 17 int number = scanner.nextInt(); 18 //2.创建数组,存储学生成绩,动态初始化 19 int[] array = new int[number]; 20 //3.给数组中的元素赋值 21 for(int i = 0;i < array.length;i++) { 22 Scanner scanner1 = new Scanner(System.in); 23 System.out.println("请输入学生成绩:"); 24 int score = scanner1.nextInt(); 25 array[i] = score; 26 } 27 //4.获取数组中元素的最大值:最高分 28 int maxscore = 0; 29 for(int i = 0;i < array.length;i++) { 30 if(maxscore <= array[i]) { 31 maxscore = array[i]; 32 } 33 } 34 //5.根据每个学生成绩与最高分的差值,获得每个学生的等级,并输出等级和成绩 35 String level = ""; 36 for(int i = 0;i < array.length;i++) { 37 int xx = maxscore - array[i]; 38 if(xx <= 10) { 39 level = "A"; 40 }else if(xx <= 20) { 41 level = "B"; 42 }else if(xx <= 30) { 43 level = "C"; 44 }else if(xx <= 40) { 45 level = "D"; 46 }else { 47 level = "不及格"; 48 } 49 System.out.println("第" + (i+1) +"位学生的成绩为:" + array[i] + "该生等级为:" + level); 50 } 51 52 53 } 54 }