全部章节   >>>>


本章目录

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循环主要用于遍历数组或集合,循环变量不能被重新赋值。

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. Linux环境下为普通用户添加sudo权限

    系统环境:Centos6.5 1.背景: sudo是Linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部root命令的一个工具.Linux系统下,为了安全,一般来说我们操作都是在普通用户 ...

  2. Advanced C++ | Virtual Copy Constructor

    这个不懂,等看会了再写...

  3. 优化 if-else 代码的 8 种方案

    前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案. 方案. 优化方案一:提前return,去除不必要的el ...

  4. tomcat 之 session服务器 (memcache)

    #: 在tomcat各节点安装memcached [root@node1 ~]# yum install memcached -y #: 下载tomcat所需的jar包(此处在视频中找软件) [roo ...

  5. Dockers启动Kafka

    首先安装 Confluent Platform Quick Start for Confluent Platform (Local install) Use this quick start to g ...

  6. SQL Server 和 Oracle 以及 MySQL 数据库

    推荐:https://www.zhihu.com/question/19866767 三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Or ...

  7. SpringBoot环境下java实现文件的下载

    思路:文件下载,就是给服务器上的文件创建输入流,客户端创建输出流,将文件读出,读入到客户端的输出流中,(流与流的转换) package com.cst.icode.controller; import ...

  8. 云服务器ECS部署和卸载RabbitMQ

    云服务器ECS部署RabbitMQ RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,用于在分布式系统中存储转发消息,有良好的易用性.扩展性和高可用性.本文介绍如何通过ECS实例 ...

  9. centos添加本地yum源

    一.简介 centos6系列于2020年11月份已经停止提供服务,现在各大镜像源已经关闭centos6的yum源,需要下载镜像后在本地搭建yum源方便使用. 最好将镜像下载后传到OSS中,这样从阿里云 ...

  10. Python把两个列表索引相同的值相加

    方案一 list1=[1,2,3,4,5] list2=[6,7,8,9,10] list3=[] list3=[i + j for i, j in zip(list1, list2)] print( ...