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

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b