Java程序设计基础笔记 • 【第10章 数组】

本章目录

10.1 数组概述

10.1.1 数组优势

10.1.2 Java中的数组

10.1.3 数组的分类

10.2 一维数组

10.2.1 数组的定义和使用

10.2.2 数组的使用案例

10.2.3 实践练习

10.3 数组的应用(一)

10.3.1 遍历数组元素

10.3.2 增强型for循环与数组的遍历

10.3.2 foreach循环

10.4 数组的应用(二)

10.4.1 求最大值和最小值

10.4.2 数组的排序

10.4.3 实践练习

总结:


10.1 数组概述

10.1.1 数组优势

超市的入口处,摆放着许多的电子储物柜,每个电子储物柜均由若干个储物箱构成,用于存放不同顾客的物品。

10.1.2 Java中的数组

数组是一个变量,用于将相同数据类型的数据存储在内存空间中,数组中的所有元素必须属于相同的数据类型。

数组为了在内存中能够存取多个数据更加方便,在设计数组时,数组的结构和基本要素都与生活中的电子储物柜非常类似。

数组的特点:

一个数组中的数组元素必须具有相同的数据类型,且在内存中连续分布。

无论数组中包含多少个数组元素,该数组只存在一个名称,即数组名。

数组元素的编号称为下标,数组的下标从0 开始

可以通过“数组名[ 下标]”的方式访问数组中的任何元素。

数组的长度指数组可以存储元素的最大个数,在创建数组时确定

10.1.3 数组的分类

Java语言中,存在多种形式的数组。

维数

多维数组

交错数组

10.2 一维数组

10.2.1 数组的定义和使用

Java语言,一维数组的使用类似于变量的使用,分为以下4步骤

  1. 声明数组
  2. 创建数组
  3. 初始化数组
  4. 引用数组元素

(1)声明数组:声明数组是使用数组的第一步,需要说明数组元素的类型以及数组的名称。

语法:

数据类型 [] 数组名 ; 或数据类型 数组名 [];

示例:

int[] age;   // 用于存储年龄

String names[]; // 用于存储姓名

注意:

“[]”不能省略,且必须出现在数据类型与数组名之间。

在声明数组时,不能给定数组的长度。例如:“int [20] age;  //错误”。

在Java中声明数组时,中括号可以放在数组名前后,一般我们习惯将中括号写在数据类型后。

(2)创建数组:在Java语言中,可以通过new 关键字创建数组,为数组分配内存空间

语法:

数组名 = new 数据类型[数组长度];

示例:age = new int[10];

当然,也可以一步完成数组的声明与创建:

数据类型[] 数组名 = new 数据类型[数组长度];

示例:int[] age = new int[10];

(3)初始化数组: 在Java语言中,可以通过new 关键字创建数组,为数组分配内存空间

创建后初始化:

int[] age = new int[10];
for (int i = 0; i < 10; i++)
{
    age[i] = sc.nextInt();
}

创建时初始化:

int[] age = {17,16,18,21,24,22,21,19,20,17};
int[] age = new int[]{17,16,18,21,24,22,21,19,20,17};

默认值初始化:

数据类型

默认值

int     

0

float      

0.0f

double      

0.0

boolean        

false

char

‘\0’

(4)引用数组元素:

可以通过以下方式对数组中的元素进行存取(下标越界将会出现的错误

语法:

数组名[下标]

数组可以使用length 属性在程序中动态获得数组的长度。

语法:

数组名.length

数组中第一个元素的下标:0

最后一个元素的下标:数组名.length-1

 

10.2.2 数组的使用案例

示例:输入本部门5位员工的薪资,并根据用户输入的序号为指定员工进行提薪。若用户输入序号出现越界,则提示错误。要求:薪资的涨幅不能超过原薪资的20%,若涨幅超过20%,则按照原薪资的20%进行提

注意:

在程序中涉及到数组长度时,不建议直接使用数值常量5,而使用数组的length 属性动态获取数组长度。

当用户输入员工序号时,员工序号是1~5,而对应的数组元素下标是0~4,因此,对应数组元素的下标= 用户输入的员工序号-1。

import java.util.Scanner;

public class EmpSalaryDemo {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//使用数组储存5位员工的薪资
		int[] salary = new int[5];
		//用户输入的索引
		int index;
		//用户输入提升的薪资
		int money;
		//使用循环对数组中的每个元素进行赋值
		System.out.println("请输入5位员工的薪资:");
		for(int i = 0; i < salary.length; i++) {
			salary[i] = sc.nextInt();
		}
		//用户输入的员工序号:1~5,而数组的中的下标:0~4
		//员工序号-1:对应成绩在数组中的下标
		System.out.println("请输入需要提薪的员工序号:");
		index = sc.nextInt()-1;
		System.out.println("请输入所提薪资:");
		money = sc.nextInt();
		//判断用户输入索引是否越界(0 ~ 长度 ~ -1)
		if(index < 0 ||index > salary.length - 1) {
			//出现下标越界,提示错误
			System.out.println("输入的员工序号不存在,操作失败!");
		}else {
			//实现提薪的操作
			//原工资的%20
			int temp = (int)(salary[index]*0.2);
			//若涨幅超过%20,则按照20%涨幅进行提薪
			//否则按照实际输入的薪资进行提薪
			if(money > temp) {
				money = temp;
				salary[index] += money;
			}
			System.out.println("提薪后工资:"+salary[index]);
		}
	}
}

10.2.3 实践练习

10.3 数组的应用(一)

10.3.1 遍历数组元素

示例:编写JAVA程序,输入本部门五位员工的姓名和薪资,输出五位员工的姓名以及年薪。

分析:

  1. 需要在程序中存储五位员工的姓名和薪资,由于数据类型的不同,因此,需要定义两个数组分别存储员工姓名和薪资。
  2. 每个数组都存在下标,可限定两个数组中同一下标处数据描述同一个员工

//使用数组存储五位员工的姓名和薪资
String[] name = new String[5];
int[] salary = new int[5];
//使用循环对数组中的每个元素进行赋值
for (int i = 0; i < salary.length; i++) {
	System.out.printf("第%d位员工信息:\n", i + 1);
	System.out.print("姓名:");
	name[i] = sc.next();
	System.out.print("薪资:");
	salary[i] = sc.nextInt();
}
//遍历所有数组元素,输出薪资以及年薪
System.out.println("姓名\t薪资\t年薪");
for (int i = 0; i < salary.length; i++) {
	System.out.printf("%s\t%d\t%d\n", name[i], salary[i], 12 * salary[i]);
}

10.3.2 增强型for循环与数组的遍历

为简化对数组的遍历操作,提高数组遍历的效率,Java提供了增强型的for循环,该循环专用于数组或集合的遍历操作。

语法:

for(数据类型 变量:数组) {

    //循环体

}

数据与数组类型一致

循环变量为只读,在循环体中不能修改

10.3.2 foreach循环

示例:使用增强型for循环遍历一维数组

int nums[] = {1,2,3,4,5,6};
for(int num : nums) {
	System.out.println(num);
}

注意:在增强型for循环的循环体中,只能依次获取数组中元素的值,不能对数组元素的值进行修改。

示例:修改示例,使用增强 for 循环实现数据的遍历。

 // 遍历所有数组元素
 // 输出姓名
System.out.print(" 姓名 \t");
for (String item : name) {
	System.out.print(item + "\t");
}
System.out.println();
// 输出薪资
System.out.print(" 薪资 \t");
for (int item : salary) {
	System.out.print(item + "\t");
      }
System.out.println();
// 计算年薪并输出
System.out.print(" 年薪 \t");
for (int item : salary) {
	System.out.print(12 * item + "\t");
}

10.3.3 实践练习

10.4 数组的应用(二)

10.4.1 求最大值和最小值

以求最大值为例,最大值即一组数据中最大的值。

首先,第一个上擂台的人是擂主,然后与下一个竞争对手进行比武,若取胜,则第一个人仍是擂主,否则,竞争对手便成为擂主,然后擂主继续与之后的竞争对手进行比武,以此类推,最后站在擂台上的擂主,便是本次比武的胜利者。

示例:

//定义数组,存储用户输入的成绩
int[] scores = new int[5];
//声明变量,存储最高成绩
int max;
//通过循环对数组进行赋值
System.out.println("请输入五位同学的成绩:");
for (int i = 0; i < scores.length; i++) {
	scores[i] = sc.nextInt();
}
//求解最大值
//将数组第一个元素直接赋值max
max = scores[0];
//数组其余元素与max进行比较,将较大值赋值给max
for (int i = 1; i < scores.length; i++) {
	if (scores[i] > max)
		max = scores[i];
	}
//输出比较结果
System.out.println("最高成绩:" + max);

示例:求最小值的过程与最大值类似,添加代码实现求最小值。

//求解最大值
//将数组第一个元素直接赋值max
max = scores[0];
min = scores[0];
//数组其余元素与max进行比较,将较大值赋值给max
for (int i = 1; i < scores.length; i++) {
	if (scores[i] > max)
		max = scores[i];
	if (scores[i] < min)
		min = scores[i];
}
System.out.println("最高成绩:" + max + ",最低成绩:" + min);

10.4.2 数组的排序

示例:在Java中,通过Arrays.sort()方法可以快速实现数组元素的排序(默认按升序排列)

//定义数组,存储用户输入的成绩
int[] scores = new int[5];
//通过循环对数组进行赋值
System.out.println("请输入五位同学的成绩:");
for (int i = 0; i < scores.length; i++) {
	scores[i] = sc.nextInt();
}
//对数组元素进行排序
Arrays.sort(scores);
//输出排序结果
System.out.println("成绩由低到高:");
for (int item : scores) {
	System.out.println(item);
}

示例:当需要实现数组中数据的降序排序时,先使用Arrays.sort()升序排序,再将数组的前半部分和后半部分交换即可。

//scores为已经升序排序的数组
//翻转数组,循环次数为数组长度的一半,如长度是6则只需要交换3次即可。
for (int i = 0; i < scores.length / 2; i++) {
	//将数组元素位置颠倒,如0和最后一位,1和倒数第二位
	int temp = scores[i];
	// scores.length -i -1 可以获取到当前I下标需要交换的下标
	//例如,0下标和最后一位的下标,1下标和数组长度减1再减去I下标
	scores[i] = scores[scores.length - i - 1];
	scores[scores.length - i - 1] = temp;
}
System.out.println("成绩由高到低:");
for (int item : scores) {
	System.out.println(item);
}

10.4.3 实践练习

总结:

  1.  数组是指将具有相同类型的若干变量按照有序的形式组织起来
  2.  数组中存储的数据称为数组元素,同一个数组中数组元素必须具有相同的数据类型,且在内存中连续分布
  3.  数组元素按顺序进行存储和编号,数组元素的编号称为下标,数组的下标从0开始。
  4.  数组元素均存在下标,可以通过“数组名[下标]”的方式访问数组中的任何元素。
  5.  数组的使用类似于变量的使用,其步骤分为:声明数组、创建数组、初始化数组和引用数组。
  6.  增强型for循环主要用于遍历数组或集合,循环变量不能被重新赋值。
发布了63 篇原创文章 · 获赞 73 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44893902/article/details/104789599