JAVA_SE_Day06

数组(Array)

数组是相同类型数据按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据惊醒统一的管理

相关概念

  • 数组名
  • 数组中的元素
  • 下标,索引
  • 数组的长度

数组的特点:

  • 数组是有序排列
  • 数组本身就是引用数据类型,而数组中的元素可以是任何数据类型(包括基础数据类型和引用数据类型)
  • 创建数据对象在内存中是一整块连续的空间
  • 数组的长度一旦确定,就不能修改

数组的分类

按照维度

  • 一维数组
  • 二维数组
  • 三位数组等等

按照数组元素的类型

  • 基本数据类型元素的数组
  • 引用数据类型元素的数组

一维数组的使用

一维数组的声明和初始化(一旦初始化操作完成,数组的长度就确定了)

  • 静态一维数组初始化 : 数组的初始化和数组元素的赋值操作同时进行
    int[] nums;
    nums = new int[] {1,2,3,4};
  • 动态一维数组初始化 : 数组的初始化和数组元素的赋值操作分开进行
    String[] strs = new String[5];

调用数组指定位置的元素

  • 使用行列索引来调用对应的元素,行索引的范围(0行数组的长度-1),列索引的范围(0列数组的长度-1)
  • 数组名[行索引][列索引];

获取数组的长度

  • 使用数组的属性
  • 获取行长度 数组名.length
  • 获取列长度 数组名[行索引].length

遍历数组

  • 获取数组的长度使用循环遍历数组中的元素
  • for(int i = 0; i < strs.length; i++) {
    System.out.println(strs[i]);
    }

数组元素的默认初始化

  • 数组元素是整型的默认值 : 0
  • 数组元素是浮点型的默认值 : 0
  • 数组元素是char的默认值 : 0(ASNII值的数字0)
  • 数组元素是boolean的默认值 : false(因为boolean在使用的时候是int,0代表了false)
  • 数组元素是String的默认值 : null(空值)

数组的内存解析(JVM)

  • 变量存储在栈中,new的对象和数组存储在堆中
  • 在堆中每一个数组和对象的头部都有一个十六进制的内存地址,这个地址在栈中与变量名相对应

二维数组

二维数组的声明和初始化(一旦初始化操作完成,数组的长度就确定了)

  • 静态初始化
    int[][] arr = new int[][] {{1,2,3},{4,5,6},{7,8,9}};
  • 动态初始化1(行和列都定义好了,必须定义行)
    String[][] arrs = new String[2][3];
    动态初始化2(行定义好了,列还没有确定,必须定义行)
    String[][] arrs2 = new String[2][];

调用数组指定位置的元素

  • 使用索引来调用对应的元素,索引的范围(0~数组的长度-1)
  • 数组名[索引];

获取数组的长度

  • 使用数组的属性
  • 数组名.length

遍历数组

  • 获取数组的长度使用循环遍历数组中的元素
  • for(int i = 0; i < arr.length; i ++) {
    for(int j = 0 ; j < arr[i].length; j++) {
    System.out.print(arr[i][j]+" ");
    }
    System.out.println();
    }

二维数组的外层,内层数组元素

  • 外层 : 数组名[行索引]
  • 内层 :数组名[行索引][列索引]

数组元素的默认初始化 使用类似 String[] arr5[] = new String[2][4];的方式定义

  • 外层的默认值是 内存地址 [I@7852e922 ([代表是一维的数组,[[代表是二维的数组,I是Int,@7852e922是农村地址)
  • 内层数组元素是整型的默认值 : 0
  • 内层数组元素是浮点型的默认值 : 0
  • 内层数组元素是char的默认值 : 0(ASNII值的数字0)
  • 内层数组元素是boolean的默认值 : false(因为boolean在使用的时候是int,0代表了false)
  • 内层数组元素是String的默认值 : null(空值)

数组元素的默认初始化 使用类似 String[] arr5[] = new String[2][];的方式定义

  • 外层默认值为 null
  • 内层不能调用,空指针异常

数组的内存解析(JVM)

  • 变量存储在栈中,new的对象和数组存储在堆中
  • 在堆中每一个数组和对象的头部都有一个十六进制的内存地址,这个地址在栈中与变量名相对应
public class Test {

	public static void main(String[] args) {
		// 一维数组的声明和初始化
		// 静态一维数组初始化 
		int[] nums;
		nums = new int[] {1,2,3,4};
		// 动态一维数组初始化
		String[] strs = new String[5];
		//  其他写法
		int[] ints = {1,2,3,4};
		
		// 使用索引来调用对应的元素,索引的范围(0~数组的长度-1)
		strs[0] = "中国";
		strs[1] = "美国";
		strs[2] = "俄罗斯";
		strs[3] = "印度";
		strs[4] = "古巴";
		// strs[5] = "";    java.lang.ArrayIndexOutOfBoundsException
		System.out.println(strs[1]);
		
		// 获取数组长度
		System.out.println(strs.length);
		
		// 遍历数组
		for(int i = 0; i < strs.length; i++) {
			System.out.println(strs[i]);
		}
		
		// 数组元素的默认初始值
		byte[] b1 = new byte[4];
		for(int i = 0; i < b1.length; i++) {
			System.out.println(b1[i]);
		}
		
		// 二维数组的声明和初始化
		// 静态初始化
		int[][] arr = new int[][] {{1,2},{4,5,6},{7,8,9}};
		// 动态初始化1(行和列都定义好了,必须定义行)
		String[][] arrs = new String[2][3];
		// 动态初始化2(行定义好了,列还没有确定,必须定义行)
		String[][] arrs2 = new String[2][];
		// 其他写法
		int[] arr3[] = new int[][] {{1,2},{3,4}};
		int[] arr4[] = {{1,2},{3,4}};
		
		// 调用二维数组的指定位置的元素
		System.out.println(arr[0][1]);
		System.out.println(arrs[0][1]);
		
		// 获取数组长度
		System.out.println(arr.length);
		System.out.println(arr[0].length);
		
		// 遍历二维数据
		for(int i = 0; i < arr.length; i ++) {
			for(int j = 0 ; j < arr[i].length; j++) {
				System.out.print(arr[i][j]+" ");
			}
			System.out.println();
		}
		
		// 二维数组的初始化值
		String[] arr5[] = new String[2][4];
		System.out.println(arr5); 
		System.out.println(arr5[1][2]);
		

	}

}

小案例

import java.util.Scanner;

public class Test {

	public static void main(String[] args) {
		// 初始化
		Scanner sc = new Scanner(System.in);
		System.out.printf("请输入学生人数:\n");
		int number = sc.nextInt();
		int[] scores = new int[number];
		//赋值
		for(int i = 0 ; i < scores.length; i++) {
			System.out.printf("请输入第%d位同学的成绩!\n",i+1);
			int score = sc.nextInt(); 
			scores[i] = score;
		}
		// 求最高分
		int max = 0;
		for (int i = 0 ; i <scores.length; i++) {
			max = (scores[i] >= max)? scores[i]: max ;
		}
		// 计算并打印
		System.out.printf("最高分是: %d!\n",max);
		for (int i = 0 ; i <scores.length; i++) {
			if(max - scores[i] <= 10) {
				System.out.printf("student %d score is %d grade is A \n",i,scores[i]);
			}else if(max - scores[i] <= 20) {
				System.out.printf("student %d score is %d grade is B \n",i,scores[i]);
			}else if(max - scores[i] <= 30) {
				System.out.printf("student %d score is %d grade is C \n",i,scores[i]);
			}else {
				System.out.printf("student %d score is %d grade is D \n",i,scores[i]);
			}
		}
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

临水而愚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值