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

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏