Java SE从入门到放弃(六)

Java SE从入门到放弃(六)之一维数组和二维数组

第一节:一维数组的使用

1. 数组的概述

   1. 是数据结构中的一个概念,在数据结构中,叫做:顺序表。在Java中体现为:数组
 * 2.数组,即为多个相同数据类型的数据按照一定顺序的组合。并使用一个变量进行统一的命名。
 * 
 * 3.几个相关的概念
 * > 数组名
 * > 数组的元素
 * > 数组的索引(数组的下标、角标)
 * > 数组的长度
 * 
 * 4.回忆:变量按照数据类型的分类:基本数据类型  (8种) 、 引用数据类型(类、数组、接口)
 *  > 数组,属于引用数据类型的变量;数组的元素,可以是基本数据类型,也可以是引用数据类型
 *  > 数组,不管是静态初始化,还是动态初始化,一旦初始化完成,其长度就是确定的!
 *  > 数组中的元素,都是依次紧密排列的。
 *  > 数组,一旦初始化,其长度就不可变。
 * 
 * 5.数组的分类:
 * 	>按照数组的元素的类型分:基本数据类型元素的数组 、 引用数据类型元素的数组
 *  >按照数组的维数来分:一维数组、二维数组、。。。。

2.数组的初始化

		//1.1 数组的静态初始化:数组赋值操作与数组元素的赋值操作同时进行
		int[] scores = new int[]{45,56,87,77};//声明+初始化
		
		//1.2数组的动态初始化:数组赋值操作与数组元素的赋值操作分开进行
		String[] names = new String[5];
		
		//此外,正确的情况:
		String foods[] = new String[10];
		int[] sorts = {45,56,87,77}; //类型推断
		
		//错误的:
		//float[] f1 = new float[4]{1.2f,3.3f,3.4f,5.4f};
		//float[5] f2 = new float[5];
		//float[] f3 = new float[];

3. 数组元素的调用

		//如何调用指定的数组元素:通过索引(或角标)的方式。
		//数组的索引从0开始,到数组的长度 - 1结束
		System.out.println(scores[0]);
		System.out.println(scores[3]);
		
		names[0] = "郭富城";
		names[1] = "黎明";
		//names[2] = 123;//编译不通过
		System.out.println(names[0]);
		

4. 数组的长度

		//数组的长度:数组中元素的个数
		//使用length属性来获取数组的长度
		System.out.println(scores.length);
		System.out.println(names.length);

5. 遍历数组元素

for(int i = 0;i < scores.length;i++){
	System.out.println(scores[i]);
			
}
//说明:
//如果遍历的元素的角标超出了数组的长度范围,则会报异常:ArrayIndexOutOfBoundsException

6. 数组元素的默认值

>数组元素的默认初始化值(在数组动态初始化之后,没有显式给数组元素赋值情况下的默认值)
 * 		>整型的数组:byte\short\int\long 型数组的元素的默认值为: 0
 * 		>浮点型的数组:float\double 型数组的元素的默认值为:0.0
 * 		>布尔型的数组:boolean 型数组的元素的默认值为:false
 * 		>字符型的数组:char 型数组的元素的默认值为:0或\u0000
 * 
 * 		>引用数据类型的数组:数组的元素的默认值为:null

7. 一维数组的内存解析

Java内存的简图

在这里插入图片描述

Java内存结构的完整图

在这里插入图片描述

练习

在这里插入图片描述

8.课后练习

练习1:

/*
 * 
 * 升景坊单间短期出租4个月,550元/月(水电煤公摊,网费35元/月),空调、卫生间、厨房齐全。屋内均是IT行业人士,喜欢安静。
 * 
 * 所以要求来租者最好是同行或者刚毕业的年轻人,爱干净、安静。
 * 
 */
public class ArrayTest {
	public static void main(String[] args) {
		int[] arr = new int[] { 8, 2, 1, 0, 3 };
		int[] index = new int[] { 2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3 };
		
		String tel = "";
		
		for (int i = 0; i < index.length; i++) {
			int value = index[i];
			tel += arr[value];
		}
		System.out.println("联系方式:" + tel);//18...
		
	}
}

练习2:

/*
 * 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
	成绩>=最高分-10    等级为’A’   
	成绩>=最高分-20    等级为’B’
	成绩>=最高分-30    等级为’C’   
	其余                        等级为’D’
	
	提示:先读入学生人数,根据人数创建int数组,存放学生成绩。

 * 
 */
public class ArrayTest1 {
	public static void main(String[] args) {
		//1.实例化Scanner
		Scanner scan = new Scanner(System.in);
		//2.根据提示,从键盘输入学生人数
		System.out.println("请输入学生人数:");
		int count = scan.nextInt();
		
		//3.根据学生人数,创建相应的数组。使用动态初始化
		int[] scores = new int[count];
		
		//4.通过for循环遍历的方式,给数组元素赋值
		System.out.println("请输入" + count + "个学生成绩");
		int maxScore = 0;
		for(int i = 0;i < scores.length;i++){
			scores[i] = scan.nextInt();
			//5.获取数组元素的最大值:maxScore
			//方式一
			if(maxScore < scores[i]){
				maxScore = scores[i];
			}
			//方式二:
			//maxScore = (maxScore < scores[i])? scores[i]:maxScore;
		
			
		}
		//6.遍历数组元素,获取学生的成绩及等级,并输出
		char grade;
		for(int i = 0;i < scores.length;i++){
			if(scores[i] >= maxScore - 10){
				grade = 'A';
			}else if(scores[i] >= maxScore - 20){
				grade = 'B';
			}else if(scores[i] >= maxScore - 30){
				grade = 'C';
			}else{
				grade = 'D';
			}
			System.out.println("student " + i + " score is " + scores[i] 
					+ " grade is " + grade);
		}
		
		//scan.close();
	}
	
}

第二节:二维数组

1. 二维数组的理解

数组,属于引用数据类型的变量;数组的元素,可以是基本数据类型,也可以是引用数据类型
 * 		---> 数组的元素,还可以是数组!
 * 			---->一维数组的元素,如果又是一维数组,则构成二维数组
 *      --->其实本没有二维数组,只不过是一维数组的元素,又是一个一维数组而已。

2. 初始化

		//二维数组的初始化
		//静态初始化:数组变量的赋值与数组元素的赋值操作同时进行。
		int[][] arr1 = new int[][]{{1,2,3},{4,5},{7,8,9,10}};
		
		
		//动态初始化:数组变量的赋值与数组元素的赋值操作分开进行。
		//方式1:
		String[][] arr2 = new String[5][10];
		//方式2:
		String[][] arr3 = new String[5][];
		
		//正确的:
		String arr4[][] = new String[5][6];
		String[] arr5[] = new String[5][];
		
		//错误的:
//		String[] arr6[] = new String[][6];
//		int[][] arr7 = new int[6][4]{{1,2,3},{4,5},{7,8,9,10}};
//		String[5] arr6[3] = new String[][6];

3. 调用数组元素

		System.out.println(arr1[0][0]);
		System.out.println(arr1[2][2]);
		//System.out.println(arr1[0]);

4. 数组的长度

System.out.println(arr2.length);//5
System.out.println(arr1.length);//3
System.out.println(arr2[0].length);//10
System.out.println(arr1[1].length);//2

5. 数组的遍历

for(int i = 0;i < arr1.length;i++){
	for(int j = 0;j < arr1[i].length;j++){
		System.out.print(arr1[i][j] + "\t");
				
	}
	System.out.println();
			
}

6. 数组元素的默认值

二维数组元素的默认初始化值(以动态初始化为例说明)
 * 		约定:对于二维数组来说,分为外层元素(比如:arr[0])和内层元素(比如:arr[0][1])
 * 
 * 		情况1:比如:int[][] arr = new int[4][3];
 * 
 * 			> 外层元素默认存储的是:数组的类型和地址值
 * 			> 内层元素,跟一维数组的元素的默认值是一致的。
 * 				>整型的数组:byte\short\int\long 型数组的元素的默认值为: 0
 * 				>浮点型的数组:float\double 型数组的元素的默认值为:0.0
 * 				>布尔型的数组:boolean 型数组的元素的默认值为:false
 * 				>字符型的数组:char 型数组的元素的默认值为:0或\u0000
 * 
 * 				>引用数据类型的数组:数组的元素的默认值为:null
 * 			
 * 
 * 		情况2:比如:int[][] arr = new int[4][];
 * 			>外层元素的默认值为:null
 * 			>内层元素:本身不存在。如果输出的话,报错,异常为:java.lang.NullPointerException
 * 

7. 内存解析

在这里插入图片描述

  •  		>字符型的数组:char 型数组的元素的默认值为:0或\u0000
    
  •  		>引用数据类型的数组:数组的元素的默认值为:null
    
  •  情况2:比如:int[][] arr = new int[4][];
    
  •  	>外层元素的默认值为:null
    
  •  	>内层元素:本身不存在。如果输出的话,报错,异常为:java.lang.NullPointerException
    
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值