Java程序设计基础笔记 • 【第10章 数组】
全部章节 >>>>
本章目录
10.1 数组概述
10.1.1 数组优势

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

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

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

数组的特点:
同一个数组中的数组元素必须具有相同的数据类型,且在内存中连续分布。
无论数组中包含多少个数组元素,该数组只存在一个名称,即数组名。
数组元素的编号称为下标,数组的下标从0 开始
可以通过“数组名[ 下标]”的方式访问数组中的任何元素。
数组的长度指数组可以存储元素的最大个数,在创建数组时确定
10.1.3 数组的分类
在Java语言中,存在多种形式的数组。

一维数组

多维数组

交错数组

10.2 一维数组
10.2.1 数组的定义和使用
在Java语言中,一维数组的使用类似于变量的使用,分为以下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程序,输入本部门五位员工的姓名和薪资,输出五位员工的姓名以及年薪。

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

//使用数组存储五位员工的姓名和薪资
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 实践练习
总结:
- 数组是指将具有相同类型的若干变量按照有序的形式组织起来。
 - 数组中存储的数据称为数组元素,同一个数组中数组元素必须具有相同的数据类型,且在内存中连续分布。
 - 数组元素按顺序进行存储和编号,数组元素的编号称为下标,数组的下标从0开始。
 - 数组元素均存在下标,可以通过“数组名[下标]”的方式访问数组中的任何元素。
 - 数组的使用类似于变量的使用,其步骤分为:声明数组、创建数组、初始化数组和引用数组。
 - 增强型for循环主要用于遍历数组或集合,循环变量不能被重新赋值。
 
Java程序设计基础笔记 • 【第10章 数组】的更多相关文章
- Java程序设计基础笔记 • 【目录】
		
持续更新中- 我的大学笔记>>> 章节 内容 实践练习 Java程序设计基础作业目录(作业笔记) 第1章 Java程序设计基础笔记 • [第1章 初识Java] 第2章 Java程序 ...
 - Java程序设计基础笔记 • 【第5章 循环结构】
		
全部章节 >>>> 本章目录 5.1 while循环结构 5.1.1 循环简介 5.1.2 while循环 5.1.3 while循环的使用 5.1.4 while循环的注 ...
 - Java程序设计基础笔记 • 【第6章 循环结构进阶】
		
全部章节 >>>> 本章目录 6.1 for循环 6.1.1 for循环的简介 6.1.2 for循环的使用 6.1.3 for循环的表达式 6.1.4 实践练习 6.2 ...
 - Java程序设计基础笔记 • 【第1章 初识Java】
		
全部章节 >>>> 本章目录 1.1 程序的概念及Java语言介绍 1.1.1 生活中的程序 1.1.2 计算机程序 1.1.3 算法和流程图 1.1.4 实践练习 1.2 ...
 - Java程序设计基础笔记 • 【第7章 Java中的类和对象】
		
全部章节 >>>> 本章目录 7.1 理解类和对象 7.1.1 对象 7.1.2 抽象与类 7.1.3 类与对象的关系: 7.2 Java中的类和对象 7.2.1 类的定义 ...
 - 【Java】《Java程序设计基础教程》第一章学习
		
一.Java概述 1.介绍了Java语言的由来 2.Java语言的特点:简单.面向对象.分布式.高效解释执行.健壮.安全.结构中立.可移植.高效率.多线程.动态 3.Java语言的实现机制,引入虚拟机 ...
 - Java程序设计基础笔记 • 【第3章 运算符与表达式】
		
全部章节 >>>> 本章目录 3.1 运算符(一) 3.1.1 赋值运算符 3.1.2 算数运算符 3.1.3 复合运算符 3.1.4 实践练习(一) 3.1.5 实践练习 ...
 - Java程序设计基础笔记 • 【第9章 方法与参数类型】
		
全部章节 >>>> 本章目录 9.1 有参数有返回值的方法 9.1.1 有参数有返回值的方法的定义和调用 9.1.2 返回值的传递过程 9.1.3 方法返回值的注意事项 9 ...
 - Java程序设计基础笔记 • 【第2章 变量与数据类型】
		
全部章节 >>>> 本章目录 2.1 变量 2.1.1 变量的概念 2.1.2 变量的使用 2.1.3 实践练习 2.2 数据类型 2.2.1 数据类型的种类 2.2.2 ...
 
随机推荐
- Oracle之DBMS_LOCK包用法详解
			
概述与背景 某些并发程序,在高并发的情况下,必须控制好并发请求的运行时间和次序,来保证处理数据的正确性和完整性.对于并发请求的并发控制,EBS系统可以通过Concurrent Program定义界面的 ...
 - 03-Collection用例管理及批量执行
			
当我们对一个或多个系统中的很多用例进行维护时,首先想到的就是对用例进行分类管理,同时还希望对这批用例做回归测试 .在postman也提供了这样一个功能,就是Collection .通过这个Collec ...
 - java对象分配
			
1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...
 - 单元测试(Jest 和 Mocha)
			
Vue CLI 拥有通过 Jest 或 Mocha 进行单元测试的内置选项. Jest 是功能最全的测试运行器.它所需的配置是最少的,默认安装了 JSDOM,内置断言且命令行的用户体验非常好.不过你需 ...
 - Selenium之Canvas画布操作
			
现在有一个场景是需要进入到 Canvas画布中 进行单击操作,现在使用过如下方法 canvas = driver.find_element_by_xpath("//canvas[@id='# ...
 - 1.使用Lucene开发自己的搜索引擎--倒排索引基础知识
			
1.单词--文档矩阵 单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义.图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系.
 - ssm中的模糊查询
			
1.首先是数据层接口协议 public List<User> looks(String uname); 2.数据层实现 <select id="looks" re ...
 - HGAME  pwn   ROP_LEVEL2
			
花了好多天,终于把这个题彻底弄懂了...自己太菜了 下载文件,首先checksec检查一下保护. 只开启了堆栈不可执行,接下来拖到IDA看一下C的伪代码. 大致先让你输入,然后再次让你输入. 第 ...
 - Table.Skip删除前面N….Skip/RemoveFirstN(Power Query 之 M 语言)
			
数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...
 - CF1501A Alexey and Train 题解
			
Content 一列火车从 \(0\) 时刻开始从 \(1\) 号站出发,要经过 \(n\) 个站,第 \(i\) 个站的期望到达时间和离开时间分别为 \(a_i\) 和 \(b_i\),并且还有一个 ...