全部章节   >>>>


本章目录

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)声明数组:声明数组是使用数组的第一步,需要说明数组元素的类型以及数组的名称。

语法:

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

示例:

  1. int[] age;   // 用于存储年龄
  2. String names[]; // 用于存储姓名

注意:

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

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

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

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

语法:

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

示例:age = new int[10];

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

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

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

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

创建后初始化:

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

创建时初始化:

  1. int[] age = {17,16,18,21,24,22,21,19,20,17};
  2. 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。

  1. import java.util.Scanner;
  2. public class EmpSalaryDemo {
  3. public static void main(String[] args) {
  4. Scanner sc = new Scanner(System.in);
  5. //使用数组储存5位员工的薪资
  6. int[] salary = new int[5];
  7. //用户输入的索引
  8. int index;
  9. //用户输入提升的薪资
  10. int money;
  11. //使用循环对数组中的每个元素进行赋值
  12. System.out.println("请输入5位员工的薪资:");
  13. for(int i = 0; i < salary.length; i++) {
  14. salary[i] = sc.nextInt();
  15. }
  16. //用户输入的员工序号:1~5,而数组的中的下标:0~4
  17. //员工序号-1:对应成绩在数组中的下标
  18. System.out.println("请输入需要提薪的员工序号:");
  19. index = sc.nextInt()-1;
  20. System.out.println("请输入所提薪资:");
  21. money = sc.nextInt();
  22. //判断用户输入索引是否越界(0 ~ 长度 ~ -1)
  23. if(index < 0 ||index > salary.length - 1) {
  24. //出现下标越界,提示错误
  25. System.out.println("输入的员工序号不存在,操作失败!");
  26. }else {
  27. //实现提薪的操作
  28. //原工资的%20
  29. int temp = (int)(salary[index]*0.2);
  30. //若涨幅超过%20,则按照20%涨幅进行提薪
  31. //否则按照实际输入的薪资进行提薪
  32. if(money > temp) {
  33. money = temp;
  34. salary[index] += money;
  35. }
  36. System.out.println("提薪后工资:"+salary[index]);
  37. }
  38. }
  39. }

10.2.3 实践练习

10.3 数组的应用(一)

10.3.1 遍历数组元素

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

分析:

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

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

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

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

语法:

  1. for(数据类型 变量:数组) {
  2.     //循环体
  3. }

数据与数组类型一致

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

10.3.2 foreach循环

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

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

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

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

  1. // 遍历所有数组元素
  2. // 输出姓名
  3. System.out.print(" 姓名 \t");
  4. for (String item : name) {
  5. System.out.print(item + "\t");
  6. }
  7. System.out.println();
  8. // 输出薪资
  9. System.out.print(" 薪资 \t");
  10. for (int item : salary) {
  11. System.out.print(item + "\t");
  12. }
  13. System.out.println();
  14. // 计算年薪并输出
  15. System.out.print(" 年薪 \t");
  16. for (int item : salary) {
  17. System.out.print(12 * item + "\t");
  18. }

10.3.3 实践练习

10.4 数组的应用(二)

10.4.1 求最大值和最小值

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

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

示例:

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

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

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

10.4.2 数组的排序

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

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

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

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

10.4.3 实践练习

总结:

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

Java程序设计基础笔记 • 【第10章 数组】的更多相关文章

  1. Java程序设计基础笔记 • 【目录】

    持续更新中- 我的大学笔记>>> 章节 内容 实践练习 Java程序设计基础作业目录(作业笔记) 第1章 Java程序设计基础笔记 • [第1章 初识Java] 第2章 Java程序 ...

  2. Java程序设计基础笔记 • 【第5章 循环结构】

    全部章节   >>>> 本章目录 5.1 while循环结构 5.1.1 循环简介 5.1.2 while循环 5.1.3 while循环的使用 5.1.4 while循环的注 ...

  3. Java程序设计基础笔记 • 【第6章 循环结构进阶】

    全部章节   >>>> 本章目录 6.1 for循环 6.1.1 for循环的简介 6.1.2 for循环的使用 6.1.3 for循环的表达式 6.1.4 实践练习 6.2 ...

  4. Java程序设计基础笔记 • 【第1章 初识Java】

    全部章节   >>>> 本章目录 1.1 程序的概念及Java语言介绍 1.1.1 生活中的程序 1.1.2 计算机程序 1.1.3 算法和流程图 1.1.4 实践练习 1.2 ...

  5. Java程序设计基础笔记 • 【第7章 Java中的类和对象】

    全部章节   >>>> 本章目录 7.1 理解类和对象 7.1.1 对象 7.1.2 抽象与类 7.1.3 类与对象的关系: 7.2 Java中的类和对象 7.2.1 类的定义 ...

  6. 【Java】《Java程序设计基础教程》第一章学习

    一.Java概述 1.介绍了Java语言的由来 2.Java语言的特点:简单.面向对象.分布式.高效解释执行.健壮.安全.结构中立.可移植.高效率.多线程.动态 3.Java语言的实现机制,引入虚拟机 ...

  7. Java程序设计基础笔记 • 【第3章 运算符与表达式】

    全部章节   >>>> 本章目录 3.1 运算符(一) 3.1.1 赋值运算符 3.1.2 算数运算符 3.1.3 复合运算符 3.1.4 实践练习(一) 3.1.5 实践练习 ...

  8. Java程序设计基础笔记 • 【第9章 方法与参数类型】

    全部章节   >>>> 本章目录 9.1 有参数有返回值的方法 9.1.1 有参数有返回值的方法的定义和调用 9.1.2 返回值的传递过程 9.1.3 方法返回值的注意事项 9 ...

  9. Java程序设计基础笔记 • 【第2章 变量与数据类型】

    全部章节   >>>> 本章目录 2.1 变量 2.1.1 变量的概念 2.1.2 变量的使用 2.1.3 实践练习 2.2 数据类型 2.2.1 数据类型的种类 2.2.2 ...

随机推荐

  1. Redis的持久化机制:RDB和AOF

    什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所有操作都在内存当中进行,如下所示: 这样做有什么问题呢? 其实,只要稍微有点计算 ...

  2. 监测linux系统负载与CPU、内存、硬盘、用户数的shell脚本

    本节主要内容: 利用Shell脚本来监控Linux系统的负载.CPU.内存.硬盘.用户登录数. 一.linux系统告警邮件脚本 # vim /scripts/sys-warning.sh #!/bin ...

  3. Can a C++ class have an object of self type?

    A class declaration can contain static object of self type,it can also have pointer to self type,but ...

  4. Spring Cloud使用

    一.创建提供者工程01-provider-8081 (1) 创建工程 创建一个Spring Initializr工程,并命名为01-provider-8081.导入Lombok.Web.JPA及MyS ...

  5. java 多线程的状态迁移 常用线程方法分析

    一.线程的各个状态 图中的线程状态(Thread.Stat 中定义的Enum 名)NEW.RUNNABLE .TERMINATED.WAITING.TIMED_WAITING 和BLOCKED 都能够 ...

  6. 深度学习初探——符号式编程、框架、TensorFlow

    一.命令式编程(imperative)和符号式编程(symblic) 命令式: import numpy as np a = np.ones(10) b = np.ones(10) * 2 c = b ...

  7. C# 使用管理员权限运行程序

    最近在开发OPCServer组件过程中,在注册opcServer是总是返回false,后来查找原因得知在本地主机注册opcServer时,需要使用管理员权限. OPCServer在一台机器上部署时只需 ...

  8. 程序员Meme 第01期

  9. scrapy爬取招聘网站,items转换成dict遇到的问题

    pipelines代码 1 import json 2 3 class TencentJsonPipeline(object): 4 def __init__(self): 5 self.file = ...

  10. MySQL如何随机筛选25000条数据

    一.SELECT * FROM sheet1 t1 ORDER BY RAND() LIMIT 10000; 二.SELECT * FROM sheet1 AS t1 JOIN (SELECT ROU ...