###13遍历数组
​ * A:遍历数组
​ * 在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历
​ * B:练习
​ public class ArrayDemo04 {
​ public static void main(String[] args) {
​ int[] arr = { 1, 2, 3, 4, 5 }; // 定义数组
​ // 使用for循环遍历数组的元素
​ for (int i = 0; i < arr.length; i++) {
​ System.out.println(arr[i]); // 通过索引访问元素
​ }
​ }
​ }
​ 上述代码中,定义一个长度为5的数组arr,数组的角标为0~4。由于for循环中定义的变量i的值在循环过程中为0~4,因此可以作为索引,依次去访问数组中的元素,并将元素的值打印出来

###14数组中常见的异常
​ * A: 数组操作中,常见的两个异常
​ 数组的索引越界异常
​ 空指针异常

* B: 练习
public class ArrayDemo_4{
public static void main(String[] args){
//数组的索引越界异常
//int[] arr = {5,2,1};
//数组中3个元素,索引 0,1,2
//System.out.println(arr[3]);//java.lang.ArrayIndexOutOfBoundsException: 3

//空指针异常
int[] arr2 = {1,5,8};
System.out.println(arr2[2]);
arr2 = null; // arr2 不在保存数组的地址了
System.out.println(arr2[2]);//java.lang.NullPointerException
}
}

###15数组最值
​ * A: 数组获取最值的原理思想
​ * 定义数组的第一个元素arr[0]为最大值;循环arr数组,判断如果有比arr[0] 大的就交换,直到arr数组遍历完毕,那么arr[0]中就保存了最大的元素

###16数组获取最值代码实现
​ * A: 代码实现
​ public class ArrayDemo05 {
​ public static void main(String[] args) {
​ int[] arr = { 4, 1, 6, 3, 9, 8 }; // 定义一个数组
​ int max = arr[0]; // 定义变量max用于记住最大数,首先假设第一个元素为最大值
​ // 下面通过一个for循环遍历数组中的元素
​ for (int x = 1; x < arr.length; x++) {
​ if (arr[x] > max) { // 比较 arr[x]的值是否大于max
​ max = arr[x]; // 条件成立,将arr[x]的值赋给max
​ }
​ }
​ System.out.println("max=" + max); // 打印最大值
​ }
​ }

###17二维数组的定义
​ * A 二维数组的作用
​ * 要统计一个学校各个班级学生的考试成绩,又该如何实现呢?
​ * 这时就需要用到多维数组,多维数组可以简单地理解为在数组中嵌套数组。
​ * B 定义格式
​ * a 第一种定义格式:
​ * int[][] arr = new int[3][4];
​ * 上面的代码相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组
​ * b 第二种定义格式
​ * int[][] arr = new int[3][];
​ * 第二种方式和第一种类似,只是数组中每个元素的长度不确定
​ * c 第三种定义格式
​ * int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};
​ * 二维数组中定义了三个元素,这三个元素都是数组,分别为{1,2}、{3,4,5,6}、{7,8,9}

###18二维数组元素的访问
​ * A: 二维数组的访问
​ * 案例:
​ class ArrayDemo08 {
​ public static void main(String[] args){

//定义二维数组的方式
int[][] arr = new int[3][4];
System.out.println( arr );
System.out.println("二维数组的长度: " + arr.length);
//获取二维数组的3个元素
System.out.println( arr[0] );
System.out.println( arr[1] );
System.out.println( arr[2] );

System.out.println("打印第一个一维数组的元素值");
System.out.println( arr[0][0] );
System.out.println( arr[0][1] );//访问的为二维数组中第1个一维数组的第2个元素
System.out.println( arr[0][2] );
System.out.println( arr[0][3] );

System.out.println("打印第二个一维数组的元素值");
System.out.println( arr[1][0] );
System.out.println( arr[1][1] );
System.out.println( arr[1][2] );
System.out.println( arr[1][3] );

System.out.println("打印第三个一维数组的元素值");
System.out.println( arr[2][0] );
System.out.println( arr[2][1] );
System.out.println( arr[2][2] );
System.out.println( arr[2][3] );
}
}

###19二维数组内存图
​ * A: 二维数组内存图
​ * 举例:int[][] arr = new int[3][2];
​ * 外层数组长在内存开辟连续的3个大的内存空间,每一个内存空间都对应的有地址值
​ * 每一个大内存空间里又开辟连续的两个小的内存空间.

###20二维数组的定义和访问
​ * A: 二维数组的定义和访问
​ * 格式1:
​ * int[][] arr = new int[3][]; 不推荐
​ * 格式2
​ * int[][] arr = {{1,2,4},{4,7},{0,9,3}};
​ *
​ * B: 二维数组的访问
​ 举例:int[][] arr = {{1,2,4},{5,8,7},{0,9,3}};
​ 想要打印数组中7这个元素需要先找到大的元素索引{5,7} 索引为2 ,在找7在{5,7}中的索引2
​ 那么结果为 arr[2][2] 第一个[2]代表大数组中{5,8,7}这个元素索引
​ 第二个[2]代表{5,8,7}中7元素的索引

###22二维数组的遍历
​ * A:二维数组遍历
​ int[][] arr = {{1,2,4},{4,7},{0,9,3}};
先使用for循环遍历arr这个二维数组,得到每一个元素为arr[i]为一维数组
​ 再外层for循环中嵌套一个for循环遍历每一个一维数组arr[i],得到每一元素

* B:举例:遍历二维数组
public class ArrayArrayDemo_2{
public static void main(String[] args){
int[][] arr = { {1,2,3},{4,5},{6,7,8,9},{0} };

//外循环,遍历二维数组
for(int i = 0 ; i < arr.length ;i++){
//内循环,遍历每个一维数组 arr[0] arr[1] arr[i]
for(int j = 0 ; j < arr[i].length; j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
}

* C:二维数组累加求和
class ArrayDemo09 {
public static void main(String[] args){
int[][] arr2 = { {1,2},{3,4,5},{6,7,8,9,10} };
int sum2 = 0;
for (int i=0; i<arr2.length; i++) {
for (int j=0; j<arr2[i].length; j++) {
//System.out.println(arr2[i][j])
sum2 += arr2[i][j];
}
}
System.out.println("sum2= "+ sum2);
}
}

###23二维数组的求和练习
​ * A 例如要统计一个公司三个销售小组中每个小组的总销售额以及整个公司的销售额。如下所示
​ * 第一小组销售额为{11, 12}万元
​ * 第二小组销售额为{21, 22, 23}万元
​ * 第三小组销售额为{31, 32, 33, 34}万元。

* B 代码实现
public class ArrayDemo10 {
public static void main(String[] args) {
int[][] arr = new int[3][]; // 定义一个长度为3的二维数组
arr[0] = new int[] { 11, 12 }; // 为数组的元素赋值
arr[1] = new int[] { 21, 22, 23 };
arr[2] = new int[] { 31, 32, 33, 34 };
int sum = 0; // 定义变量记录总销售额
for (int i = 0; i < arr.length; i++) { // 遍历数组元素
int groupSum = 0; // 定义变量记录小组销售总额
for (int j = 0; j < arr[i].length; j++) { // 遍历小组内每个人的销售额
groupSum = groupSum + arr[i][j];
}
sum = sum + groupSum; // 累加小组销售额
System.out.println("第" + (i + 1) + "小组销售额为:" + groupSum + " 万元");
}
System.out.println("总销售额为: " + sum + " 万元");
}
}

###24随机点名器案例分析
​ * A 随机点名器案例分析

* B: 需求
* 随机点名器,即在全班同学中随机的打印出一名同学名字。

* C:分析:
* 1)定义数组存数全班同学
* 2)生成随机数范围0 到 数组长度-1
* 3)根据这个索引找到数组中的同学名称

###25随机点名器代码实现
​ * A: 分析
​ 随机点名器:
​ 1 存储姓名
​ 2. 预览所有人的姓名
​ 3. 随机出一个人的姓名
​ * B 代码实现
​ import java.util.Random;
​ public class CallName{
​ public static void main(String[] args){
​ //存储姓名,姓名存储到数组中
​ //数组存储姓名,姓名的数据类型,String
​ String[] names = {"张三","李四","王五","李蕾","韩梅梅","小名","老王","小华","约翰逊","爱丽丝"};

//预览: 遍历数组,打印所有姓名
for(int i = 0 ; i < names.length ; i++){
System.out.println(names[i]);
}
System.out.println("=============");

//随机出一个人的名
//利用随机数,生成一个整数,作为索引,到数组中找到对应的元素
Random ran = new Random();
//随机数,范围必须是0-数组的最大索引
int index = ran.nextInt(names.length);//index 就是随机数,作为索引
System.out.println(names[index]);
}
}

###25随机点名器代码实现_2
​ * A 代码优化:
​ import java.util.Random;
​ public class CallName{
​ public static void main(String[] args){
​ String[] names = {"张三","李四","王五","李蕾","韩梅梅","小名","老王","小华","约翰逊","爱丽丝"};
​ System.out.println(names[new Random().nextInt(names.length)]);
​ }
​ }

Java语言学习day08--7月7日的更多相关文章

  1. python学习 day08 (3月13日)----函数

    函数 一.定义  def  关键字  函数名(): 函数体 函数 ---- 封装#def 关键字 # #定义后的函数就像变量 不调用是不执行的 # #函数名() ==函数的调用 def code(): ...

  2. Java语言学习day01--6月28日

    Java语言学习day01一:Java概述 1.Java语言发展史 任职于太阳微系统的 詹姆斯·高斯林 等人于1990年代初开发Java语言的雏形,最初被命名为 Oak ,目标设置在 家用电器等小型系 ...

  3. Java语言学习day02--6月29日

    Java语言学习day02###01常用的DOS命令 * A: 常用的DOS命令 * a: 打开Dos控制台 * win+r--cmd--回车 * b: 常用dos命令 * cd.. : 退回到上一级 ...

  4. Java Calendar获取年、月、日、时间

    Java Calendar获取年.月.日.时间 Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00" ...

  5. Java语言学习day32--8月07日

    ###07正则表达式邮箱地址验证 * A: 正则表达式邮箱地址验证 * a: 案例代码 public class RegexDemo2 { public static void main(String ...

  6. Java语言学习day15--7月21日

    今日内容介绍1.Eclipse开发工具2.超市库存管理系统 ###01Eclipse的下载安装 * A: Eclipse的下载安装  * a: 下载 * http://www.eclipse.org ...

  7. Java语言学习day33--8月8日

    今日内容介绍1.基本类型包装类2.System类3.Math类4.Arrays类5.大数据运算 ###01基本数据类型对象包装类概述 *A:基本数据类型对象包装类概述 *a.基本类型包装类的产生 在实 ...

  8. Java语言学习总结 扩展篇 DateFormat类

    DateFormat类 java.text .DateFormat 是 日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换:也就是可以在Date对象与String对象之间进 ...

  9. python学习 day21 (3月28日)----(抽象类 多态 nametuple dump)

    不要因为走的路太久了,而忘记了为了什么而出发. 提前作准备了吗?把思维导图的东西做了吗? 和工作了几年的人,相比,是不是相同的水平,如果要写简历的话. 一边学习,一边复习. 小就是大,少就是多. 1. ...

  10. java语言学习笔记1

    最近也在春节的节假日里,总是会有各种各样的事情出现,没有很完整的时间来学习java以及其他方面的知识. 从昨天开始有了完整的学习体系,我去娄老师推荐的极客学院网站开始学习java语言的语法.在假期之初 ...

随机推荐

  1. 集合 copy

    #集合的创建 # set = set(["barry",1,2]) # print(set) # set1 = {1,2,3} #集合的增 # set1 = {'alex','wu ...

  2. 造成panic_oom问题的测试代码

    写一个内核模块,来构造内核模块出现panic oom,主要采用vmalloc函数: #include <linux/module.h> #include <linux/mm.h> ...

  3. Presidential-01

    环境搭建 官网地址:https://www.vulnhub.com/entry/presidential-1,500/ 靶机下载地址: https://download.vulnhub.com/pre ...

  4. JDBC中的Statement 和PreparedStatement的区别?

    PreparedStatement是预编译的SQL语句,效率高于Statement. PreparedStatement支持操作符,相对于Statement更加灵活. PreparedStatemen ...

  5. volatile 变量和 atomic 变量有什么不同?

    Volatile 变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不 能保证原子性.例如用 volatile 修饰 count 变量那么 count++ 操作就不是原子 性的. 而 A ...

  6. Spring 框架中的单例 bean 是线程安全的吗?

    不,Spring 框架中的单例 bean 不是线程安全的.

  7. Javascript 占位符替换

    String.prototype.format=function(){ if(arguments.length===0){ return String(this); } let reg=/(\{\d\ ...

  8. Zookeeper 的典型应用场景 ?

    Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员 可以使用它来进行分布式数据的发布和订阅. 通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watch ...

  9. getch()函数的使用方法及其返回值问题

    getch()函数依赖于头文件 conio.h .会在windows平台下从控制台无回显地取一个字符,并且返回读取到的字符. 然而,我在实际用这个函数才发现getch()这个函数并不简单. getch ...

  10. 高效使用Java构建工具,Maven篇|云效工程师指北

    大家好,我是胡晓宇,目前在云效主要负责Flow流水线编排.任务调度与执行引擎相关的工作. 作为一个有多年Java开发测试工具链开发经验的CRUD专家,使用过所有主流的Java构建工具,对于如何高效使用 ...