java基础 数组 笔记 思维导图 大量练习题 最齐全

2023-10-24 19:20

本文主要是介绍java基础 数组 笔记 思维导图 大量练习题 最齐全,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在跟java部分的学习,打算一个月内将Java基数部分重新做一下笔记,力求完整,细节。内容包含基础笔记,思维导图,大量巩固基础、提高的练习题

java基础 数组 笔记 思维导图 课后练习

1、思维导图

数组思维导图

2、基础笔记

2.1 数组的定义

数组是用来存储一批同类型数据的容器。
注意:数组变量名中存储的是数组在内存中的地址,数组是引用类型。

2.1.1数组的声明、创建和初始化

声明:
格式:

  • 数据类型[] 数组名
  • 数据类型 数组名[]

例如:

int[] arr1  //推荐方式
int arr[] 

初始化:

  • 静态初始化:

例如:

// 完整格式: 数据类型[]  数组名 = new 数据类型[]{ 元素1,元素2 ,元素3… };
int[] ages = new int[]{12, 24, 36, 48, 60};//简写格式: 数据类型[]  数组名 = { 元素1,元素2 ,元素3,… }; 推荐使用
int[] ages = {12, 24, 36, 48, 60};
double[] scores = {89.9, 99.5, 59.5};
  • 动态初始化:
 //数据类型[] 数组名 = new 数据类型[长度];int[] ages = new int[4];//后期赋值
ages[0] = 10;
ages[1] = 8;
ages[2] = 9;
ages[3] = 19;

使用的注意事项:

1、"数据类型[] 数组名”也可以写成 “数据类型 数组名[] "
2、什么类型的数组存放什么类型的数据,否则报错。
3、数组一旦定义出来,执行过程中,长度、类型就都固定了

2.2.2 二维数组:

二维数组:实质就是存储是一维数组,即数组的数组就是二维数组。

数组定义:

数组的动态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数];
数组的静态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数]{{值, 值,…}, {值, 值,…},…};

例子:

public class ArrayDemo {public static void main(String args[]) {//此时的数组并不是一个等列数组int data[][] = new int[][] {{1, 2, 3}, {4, 5}, {6, 7, 8, 9}};//如果在进行输出的时候一定要使用双重循环,//外部的循环控制输出的行数,而内部的循环控制输出列数for(int i = 0; i < data.length; i++) {for(int j = 0; j < data[i].length; j++) {System.out.print("data[" + i + "][" + j + "]=" + data[i][j] + "、");}System.out.println();}}
}
2.2.3 数组的长度:
  • 数组长度:数组名称.length
  • 数组的最大索引:数组名. length – 1 // 前提:元素个数大于0
 		//定义一个数组int[] arr = {12,24,36};//取值System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);//赋值arr[2] = 100;System.out.println(arr[2]);//2、访问数组的长度(元素的个数  :数组名.lengthSystem.out.println(arr.length);//最大索引是:长度-1,如果数组为空的话,长度减一则为负数System.out.println(arr.length-1);
2.2.4 动态初始化数组的元素默认值规则

在这里插入图片描述
例子:

 //1、整形的默认值都为0int[] arr = new int[80];System.out.println(arr[1]);System.out.println(arr[79]);long[] arr2 = new long[80];System.out.println(arr2[0]);System.out.println(arr2[79]);char[] arr3 = new char[80];//arr3 = [0,0,0,0,0,...]System.out.println(arr3[0]);System.out.println(arr3[79]);//2、浮点型默认值都为0.0float[] arr4 = new float[80];System.out.println(arr4[0]);System.out.println(arr4[79]);//3、布尔型默认值都为falseboolean[] arr5 = new boolean[80];System.out.println(arr5[0]);System.out.println(arr5[79]);//4、引用数据类型默认值默认值都为nullString[] arr6 = new String[80];System.out.println(arr6[0]);System.out.println(arr6[79]);

2.2 数组的遍历

使用for循环依次对数组中的数据遍历
在这里插入图片描述

格式:

int[] ages = {20, 30, 40, 50};
for (int i = 0; i < ages.length; i++) {System.out.println(ages[i]);
}

例子:

//目标:能够完成数组的遍历//1、定义一个数组 存储一些数据int[] arr = {10,20,30,40};//2、开始遍历数组System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);System.out.println(arr[3]);System.out.println("-------------");//3、使用循环来遍历for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}//4、快捷键:arr.fori

2.3 数组的内存结构

在这里插入图片描述
在这里插入图片描述
数组引用传递:

数组为引用数据类型,就一定可以发生引用传递,而现在的引用传递的本质也一定是:同一块堆内存空间可以被不同的栈内存所指向。

使两个数组变量指向同一个数组对象:
在这里插入图片描述
例子:

 //目标:理解2个变量指向同一个数组的内存机制int[]  arr1 = {11,22,33};//重点:把右边的整型数组变量arr1赋值给左边的整型数组变量arr2int[] arr2 = arr1;System.out.println(arr1);System.out.println(arr2);arr2[1] = 100;System.out.println(arr1);System.out.println(arr2);
2.4 数组使用的常见错误
  • 问题1:如果访问的元素位置超过最大索引,执行时会出现ArrayIndexOutOfBoundsException(数组索引越界异常)
  • 问题2:如果数组变量中没有存储数组的地址,而是null, 在访问数组信息时会出现NullPointerException(空指针异常)

例子:

//ArrayIndexOutOfBoundsException(数组索引越界异常)
int[] arr = new int[]{11, 22, 33};
System.out.println(arr[2]);
System.out.println(arr[3])  // 出现异常 //NullPointerException(空指针异常)
arr = null;
System.out.println(arr); // null
System.out.println(arr.length)  // 出现异常 

3、案例练习题

1.数组元素求和

题目1:

需求:
现有一个整数数组{100,50,90,60,80,70}。请编写代码,计算数组中的所有元素的和并打印。

代码:

public class Test01 {public static void main(String[] args) {//1.定义int数组array,并初始化int[] array = {100, 50, 90, 60, 80, 70};//2.计算int数组array的元素和,保存int变量sum中int sum = 0;for (int i = 0; i < array.length; i++) {sum += array[i];}System.out.print("数组元素和:  "+sum);}
}

2.数组求最值

题目2:

需求:
现有一个整数数组{100,50,90,60,80,70}。请编写代码,计算数组中的所有元素的最大值并打印。

代码:

public class Test02 {public static void main(String[] args) {//1.定义int数组array,并初始化int[] array = {100, 50, 90, 60, 80, 70};//2.计算int数组array的最大值,保存int变量max中int max = array[0];for (int i = 0; i < array.length; i++) {if (array[i] > max) {max = array[i];}}System.out.print("数组元素最大值:  "+max);}
}

题目3:

需求:
现有一个整数数组{100,50,90,60,80,70}。请编写代码,计算数组中的所有元素的最小值并打印。

代码:

public class Test03 {public static void main(String[] args) {//1.定义int数组array,并初始化int[] array = {100, 50, 90, 60, 80, 70};//2.计算int数组array的最小值,保存int变量min中int min = array[0];for (int i = 0; i < array.length; i++) {if (array[i] < min) {min = array[i];}}System.out.print("数组元素最小值:  "+min);}
}

题目4:

需求:
现有一个整数数组{100,50,90,60,80,70}。
请编写程序,计算去掉最大值和最小值后的平均值(不考虑小数部分)

代码:

/*需求:现有一个整数数组{100,50,90,60,80,70}。请编写程序,计算去掉最大值和最小值后的平均值(不考虑小数部分)实现步骤:1.定义int数组array,并初始化2.计算int数组array的元素和,保存int变量sum中3.计算int数组array的最大值,保存int变量max中4.计算int数组array的最小值,保存int变量min中5.根据题目需求计算平均值,保存int变量avg中6.输出结果数据*/
public class Test04 {public static void main(String[] args) {//1.定义int数组array,并初始化int[] array = {100, 50, 90, 60, 80, 70};//2.计算int数组array的元素和,保存int变量sum中int sum = 0;for (int i = 0; i < array.length; i++) {sum += array[i];}//3.计算int数组array的最大值,保存int变量max中int max = array[0];for (int i = 0; i < array.length; i++) {if (array[i] > max) {max = array[i];}}//4.计算int数组array的最小值,保存int变量min中int min = array[0];for (int i = 0; i < array.length; i++) {if (array[i] < min) {min = array[i];}}//5.根据题目需求计算平均值,保存int变量avg中int avg = (sum - max - min) / (array.length - 2);//6.输出结果数据System.out.println("平均值: " + avg);}
}

3.猜数字游戏

题目5:

需求
开发一个幸运小游戏,游戏规则如下:
游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:
未猜中提示:“未命中”,并继续猜测
猜中提示:“运气不错,猜中了”,并输出该数据第一次出现的索引位置,最后把数组中的5个数据都输出看以下, 然后结束本游戏。

public class Test05 {public static void main(String[] args) {// 目标:理解猜数字游戏。        // 1、生成5个1-20之间的数据,无所谓是否重复。int[] arr = new int[5];// 2、使用一个循环,循环5次,为数组的5个位置生成对应的随机数。Random r = new Random();for (int i = 0; i < arr.length; i++) {// i = 0 1 2 3 4arr[i] = r.nextInt(20) + 1;}// 3、开始让用户不断的猜测一个数据,直到猜中为止。Scanner sc = new Scanner(System.in);OUT:while (true) {System.out.println("请您猜测这5个数据中的一个数据:");int number = sc.nextInt(); // 7// 4、遍历数组中的每个数据,看是否有数据与number相等,相等说明用户猜对了。// arr = [7, 16, 2, 8, 10]//        0   1  2   3  4for (int i = 0; i < arr.length; i++) {// arr[i]if(arr[i] == number){System.out.println("恭喜您,您猜中了数据,这个数据的索引位置在:" + i);// 猜中之后还需要看到全部数据(遍历一次数组的全部数据给用户看一下)for (int j = 0; j < arr.length; j++) {System.out.print(arr[j] + " ");}break OUT; // 指定结束且跳出外部整个死循环}}//执行到这儿,那说明当前没有这个数据System.out.println("对不起,您猜错了!");}}
}

4.随机排名

题目6:

需求:
某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。
请先依次录入5名员工的工号,然后展示出一组随机的排名顺序

代码:

public class Test06 {public static void main(String[] args) {// 目标:完成随机排名// 1、定义一个数组用于存储5个人的工号int[] codes = new int[5];// 2、让用户录入5个员工的工号,到数组中去。Scanner sc = new Scanner(System.in);for (int i = 0; i < codes.length; i++) {// i = 0 1 2 3 4System.out.println("请您输入第" + (i + 1) + "个员工的工号:");codes[i] = sc.nextInt();}// 3、把数组中录入的工号全部遍历出来看一下。System.out.println("当前录入的员工顺序是:");for (int i = 0; i < codes.length; i++) {System.out.print(codes[i] + " ");}System.out.println(); // 换行// 4、把数组中的元素顺序进行打乱,得到一个随机排名// codes = [53, 32, 35, 12, 25]//              i   index// 遍历数组中的每个元素,然后生成一个随机的索引在索引范围内,让当前元素与该索引// 位置处的元素值进行交换。Random r = new Random();for (int i = 0; i < codes.length; i++) {// 当前元素:codes[i]// 产生一个随机的索引int index = r.nextInt(codes.length);// 定义一个临时变量存储后一个数据int temp = codes[index]; // 53// 把前一个位置的数据,赋值给后一个位置codes[index] = codes[i];// 把后一个位置原来的值赋值给前一个位置codes[i] = temp;}System.out.println("新的演讲员工顺序是:");for (int i = 0; i < codes.length; i++) {System.out.print(codes[i] + " ");}}
}

这篇关于java基础 数组 笔记 思维导图 大量练习题 最齐全的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/277235

相关文章

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件