Java学习笔记-Day07 Java数组



一、数组的介绍

1、数组的概念

  • 数组是一组类型相同的数据的集合。
  • 数组中可以存储多个数据,但是这些数据的类型必须相同。
  • 数组能够作为数据的容器使用,把多个数据集中存储。
  • 当需要同时保存多个类型相同的变量并进行处理时,可以考虑用数组。

2、数组的元素

  • 数组中存储的数据称为数组的元素(Element)。
  • 数组的元素都有相应的索引值(下标),索引值从0开始,最大的索引值为数组长度-1。数组中的数据可以通过索引方便获取或修改。
  • 数组元素通过索引表示: 数组变量名[索引值]  例如:array[0] 。

3、数组的长度

  • 在创建数组的时候,一定要确定数组的长度。
  • 数组的长度将在初始化数组元素的时候,同时初始化到内存中。
  • 数组的长度: 数组变量名.length  例如:array.length 。

4、数组的数据类型

数组本身是引用类型,但是数组中的元素可以是基本数据类型,也可以是引用类型。

5、数组的区分


一维数组的元素都是单个数据,二维数组的元素都是一维数组,三维数组的元素都是二维数组,依次类推。

6、数组的特点

优点:数组在内存中是连续分配,所以读取速度快。
缺点:Java的数组长度一经确定不能改变。

二、一维数组的声明

  • 语法1: 数组元素类型[ ] 变量名称;  例如:int[] a; 或 String[] s;

  • 语法2:  数组元素类型 变量名称[ ] ; 例如:int a[]; 或 String s[];

不论数组中元素是什么类型,以上声明形式都适用。

三、一维数组的初始化

1、数组的初始化有两种方式

(1)动态初始化:初始化时我们只指定数组长度,由系统为数组元素分配初始值。

语法:数组元素类型[ ] 变量名称=new 数组元素类型[数组长度];

//a1的长度为5,元素的值为默认值0
int[] a1=new int[5];


(2)静态初始化:初始化时由我们显式指定每个数组元素的初始值,由系统决定数组长度。

语法1:数组元素类型[ ] 变量名称=new 数组元素类型[]{用逗号隔开元素的具体值};

//a2的长度为3,元素的值为1,4,10
int[] a2=new int[]{1,4,10};


语法2:数组元素类型[ ] 变量名称= {用逗号隔开元素的具体值};

//a3的长度为4,元素的值为34,23,4,10
int[] a3={34,23,4,10};

不管采用哪种方式初始化Java 数组,一旦初始化完成,该数组的长度就不可改变。

2、数组的元素如果没有赋值,则为其数据类型的默认值。

  • 数组元素的类型是基本类型中的整数类型(byte 、short、int 和long ),则数组元素的值是0 。
  • 数组元素的类型是基本类型中的浮点类型(float 、double ),则数组元素的值是0.0。
  • 数组元素的类型是基本类型中的字符类型(char ,则数组元素的值是’\u0000’。
  • 数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false 。
  • 数组元素的类型是引用类型(类、接口和数组),则数组元素的值是null 。

3、Java 的 数组变量 是一种 引用类型 的变量,存储在栈内存中,但数组变量并不是数组本身。而 数组变量的值 是数组的首地址,它指向存储在堆内存中的数组具体内容。

在这里插入图片描述

四、一维数组的遍历


将数组中的元素一个一个取出来使用,这个过程叫遍历。通过循环语句实现遍历,使用数组的长度控制循环的次数。

(1)for循环遍历:可以用于操作和输出数组的元素。

int[] a=new int[]{1,2,10};		
//使用for循环遍历
for(int i=0;i<a.length;i++){
     System.out.println(a[i]);
}		


(2)增强for循环遍历:只能用于输出数组的元素。

int[] a=new int[]{1,2,10};			
//使用增强for循环遍历
for(int n:a){
     System.out.println(n);
}


注意:

ArrayIndexOutOfBoundException 为 数组索引超出范围异常。

在这里插入图片描述
NullPointerException 为 空指针异常。
在这里插入图片描述

五、通过控制台输入给一维数组赋值


通过控制台输入给一维数组赋值。

import java.util.Scanner;

public class Demo {
	public static void main(String[] args) {
		// 创建Scanner对象
		Scanner input = new Scanner(System.in);
		// 定义数组score 
		double[] score = new double[10];
		// for循环给数组 score 的元素赋值
		for (int i = 0; i < score.length; i++) {
			System.out.println("请输入数据:");
			// 接收数据
			score[i] = input.nextDouble();
		}
		// 关闭输入的流
		input.close();
	}
}

六、冒泡排序


冒泡排序主要的思想是进行相邻的两个元素之间比较并且交换,有利于利用原有元素在集合中的位置优势,冒泡排序的原则是大的下沉、小的上浮。

  1. 冒泡排序(从小到大排序)
/**
 *   冒泡排序(从小到大排序)
 * 
 * @author Administrator
 *
 */
public class Demo{
	public static void main(String[] args) {
		int[] array = {-1,10,5,1,50,45,20,50};
		
		// for循环遍历输出排序前的数组
		System.out.println("排序前");
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
		// 使数组array从小到大排序
		// 外循环控制数组元素比较的轮数
		for (int i = 0; i < array.length-1; i++) {
			// 内循环控制每一轮比较的次数
			for (int j = 0; j < array.length-i-1; j++) {
				// 判断array[j] > array[j+1]是否满足
				// 满足就相互交换位置,将比较小的数放在前面,比较大的数放在后面
				// j为内循环变量
				if(array[j] > array[j+1]) {
					// 两个变量交换位置
					int temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
		// for循环遍历输出排序后的数组
		System.out.println("排序后");
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
	}
}


2. 冒泡排序(从大到小排序)

/**
 *   冒泡排序(从大到小排序)
 * 
 * @author Administrator
 *
 */
public class Demo {
	public static void main(String[] args) {
		int[] array = {-1,10,5,1,50,45,20,50};
		// for循环遍历输出排序前的数组
		System.out.println("排序前");
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
		// 使数组array从大到小排序
		// 外循环控制数组元素比较的轮数
		for (int i = 0; i < array.length-1; i++) {
			// 内循环控制每一轮比较的次数
			for (int j = 0; j < array.length-i-1; j++) {
				// 判断array[j] > array[j+1]是否满足
				// 满足就相互交换位置
				// 将比较大的数放在前面,比较小的数放在后面
				// j为内循环变量
				if(array[j] > array[j+1]) {
					// 两个变量交换位置
					int temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
		// for循环遍历输出排序后的数组
		System.out.println("排序后");
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
	}
}

七、题目


控制台接收10个学生成绩,存放在数组中,输出学生成绩的最高分、最低分、总分、平均分。

import java.util.Scanner;
/**
 * 控制台接收10个学生成绩,存放在数组中,输出最高分和最低分,和,平均分。
 * 
 * @author Administrator
 *
 */
public class Demo_Array3 {

	public static void main(String[] args) {
		// 创建Scanner对象
		Scanner input = new Scanner(System.in);
		// 定义score数组,用于接收学生们的成绩
		double[] score = new double[10];
		// for循环给数组的元素赋值
		for (int i = 0; i < score.length; i++) {
			System.out.println("请输入第" + (i + 1) + "个学生的成绩:");
			// 接收学生的成绩
			score[i] = input.nextDouble();
		}
		// 关闭输入的流
		input.close();
		// ‘假设’数组的第一个元素是最大值,将其赋值给保存最高分的变量max
		double max = score[0];
		// ‘假设’数组的第一个元素是最小值,将其赋值给保存最低分的变量min
		double min = score[0];
		// 使用循环来比较,从而得到最大值和最小值
		for (int i = 1; i < score.length; i++) {
			// 将数组的其余元素与max进行比较
			// 如果那个数组元素比max大,说明max不是最大值,将那个数组元素赋值给max
			if (score[i] > max) {
				max = score[i];
			}
			// 将数组的其余元素与min进行比较
			// 如果那个数组元素比min小,说明min不是最小值,将那个数组元素赋值给min
			if (score[i] < min) {
				min = score[i];
			}
		}
		// 输出最高分 max
		System.out.println("max is:" + max);
		// 输出最低分 min
		System.out.println("min is:" + min);
		// 学生成绩的和
		double sum = 0.0;
		// 学生成绩的平均值
		double averge = 0.0;
		// 使用循环来对数组元素进行累加求和
		for (int i = 0; i < score.length; i++) {
			sum += score[i];
		}
		// 学生成绩的平均值=学生成绩的和/数组的长度
		averge = sum / score.length;
		
		System.out.println("sum is:" + sum);
		System.out.println("averge is:" + averge);
		System.out.printf("平均值 %.2f", averge);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值