五、数组——Java基础篇

六、数组

1、数组元素的遍历

1.1数组的遍历:将数组内的元素展现出来

1、普通for遍历:根据下表获取数组内的元素
2、增强for遍历:
for(数据元素类型 变量名:数组名){
变量名:数组内的每一个值
}

区别:
(1)、需要下标:就是用普通for,不需要下标使用增强for
(2)、增强遍历的底层原理就是普通for

public class Travesal1 {public static void main(String[] args) {String[] sArr={"安其拉","妲己","吕布"};//增强for遍历for (String e : sArr) {System.out.println("e = " + e);}//普通for遍历for(int index=0;index<sArr.length;index++){String ele=sArr[index];System.out.println("ele = " + ele);}}
}class Travesal02{public static void main(String[] args) {int[] arr={30,20,40,50,90,80};//增强for遍历for (int i : arr) {System.out.println("增强for= " + i+"");}//普通for遍历for (int e = 0; e < arr.length; e++) {System.out.println("普通for =" + arr[e]);}}
}
1.2 定义一个整形数组

int[] arr={66,77,88,99,11,22,33};
获取总和?

   public class TrversalExer2 {public static void main(String[] args) {int[] arr={66,77,88,99,11,22,33};//定义变量记录总和int sum=0;//增强遍历for(int e:arr){sum+=e;}//普通遍历
//        for (int i = 0; i < arr.length; i++) {
//            sum+=arr[i];
//        }System.out.println("总和为:" + sum);}
}
1.3 定义一个整型数组,获取最大值和标出下标?

int[] arr={66,77,88,99,11,22,33};

public class TrversalExer_1{public static void main(String[] args) {//1、定义数组int[] arr={66,77,88,99,11,22,33};//todo定义变量 记录最大值,下标int maxNum=0;int index=0;//2、开始遍历for (int i = 0; i < arr.length; i++) {//数组中的每一个元素与假设的”int maxNum=1;“进行比较,如果数组元素>假设值,则元素是最大值if(arr[i]>maxNum){maxNum=arr[i];//记录最大值下标index=i;}}//3、展示数组System.out.println("最大值是:" + maxNum+",下标是"+index);}
}
class TrversalExer_2{public static void main(String[] args) {//1.定义变量int[] arr={66,77,88,99,11,22,33};//2.定义变量记录最小值下标int minNum=arr[0];int index=0;for (int i = 0; i < arr.length; i++) {if(arr[i]<minNum){minNum=arr[i];index=1;}}System.out.println("最小值三十:" + minNum+",下标是"+index);}
}

2、Java虚拟机的内存划分

​ 为了提高运算效率,就对空间进行了不同的区域划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
在这里插入图片描述

​ 程序运行时才会在虚拟机上开辟内存,内存区域划分的目的,提高运算效率

1 .栈:存储着方法内的局部变量信息。
2 .堆:对象。new的对象,包括数组,都存在堆中。
3 .本地方法栈:Java并不是万能的,有些功能时无法实现的额,需要救助与其他语言来实现,通过调用本地方法调用其他语言。
4 .方法区(元空间):静态信息,常量信息,类中的描述信息。
5 .程序计数器:存储计算机下一条指令的地址。

2.1 怎么画栈堆图
public class JVMMemory3 {public static void main(String[] args) {int m=10;int[] arr=new int[3];arr[0]=99;arr[2]=66;System.out.println("arr[0] = " + arr[0]);System.out.println("arr[1] = " + arr[1]);System.out.println("arr[3] = " + arr[3]);}
}

在这里插入图片描述
在这里插入图片描述

2.2 输出英文星期几

​ 用一个数组,保存星期一到星期天的7个英语单词,从键盘输入1-7,显示对应的单词
​ {“Monday”,“Tuesday”,“Wednesday”,“Thursday”,“Friday”,“Saturday”,“Sunday”}

public class ArrayExer4 {public static void main(String[] args) {/***///1、准备数组String[] arr={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};//2、创建键盘输入对象Scanner in=new Scanner(System.in);//3、接受数组System.out.println("请输入数字1-7:");int month=in.nextInt();//4、展示单词String mesage = arr[month - 1];System.out.println("mesage = " + mesage);//5、关闭资源in.close();}
}
2.3 从键盘读入学生成绩,找出最高分,并输出学生成绩等级
- 成绩>=最高分-10  等级为’A’- 成绩>=最高分-20  等级为’B’- 成绩>=最高分-30  等级为’C’- 其余            等级为’D’提示:先读入学生人数,根据人数创建int数组,存放学生成绩。请您输入第1个学生的成绩90请您输入第2个学生的成绩80请您输入第3个学生的成绩70请您输入第4个学生的成绩60请您输入第5个学生的成绩80
class ArrayExery_2{public static void main(String[] args) {//1、创建键盘输入对象Scanner in=new Scanner(System.in);//2、获取学生的个数System.out.println("请输入学生的个数:");int count=in.nextInt();//3、创建数组,存储学生的成绩int[] arr=new int[count];//4、遍历数组、存储成绩for (int i = 0; i < arr.length; i++) {System.out.println("请您输入第"+(i+1)+"个学生的成绩");int soure=in.nextInt();arr[i]=soure;}//5、过去最高成绩int maxsoure=arr[0];for (int i : arr) {if(i>maxsoure){maxsoure=i;}}System.out.println("maxsoure = " + maxsoure);//6、判断学生的等级for (int i = 0; i < arr.length; i++) {int score = arr[i];if(score>=maxsoure-10){System.out.println("第"+(i+1)+"个学生成绩等级是:A");}else if(score>=maxsoure-20){System.out.println("第"+(i+1)+"个学生成绩等级是:A");}else if(score>=maxsoure-30){System.out.println("第"+(i+1)+"个学生成绩等级是:A");}else{System.out.println("第"+(i+1)+"个学生成绩等级是:A");}}//7、关闭资源in.close();}
}

3、冒泡排序

在这里插入图片描述

3.1 冒泡排序的准备
public class BubbleSort5 {public static void main(String[] args) {int m=20;int n=10;System.out.println("交换前:m = " + m+",n="+n);int temp=m;m=n;n=temp;System.out.println("交换后:m = " + m+",n="+n);int[] arr={77,66,55,44,33,22,11};System.out.println("arr = " + arr);//地址值:[I@5b480cf9//Arrays.toString(arr)+soutv,展示arr中的值System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));}}
3.2 冒泡排序的基础写法
class BubbleSort_1{public static void main(String[] args) {int[] arr={77,66,55,44,33,22,11};System.out.println("排序前 = " + Arrays.toString(arr));//todo-1:数组元素时7个,最多6次有序for (int i = 0; i < arr.length-1; i++) {//todo进行每一次排序,-1:为了防止下标越界for(int j=0;j<arr.length-1;j++){//如果前一个>后一个,,两个数进行交换if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}System.out.println("排序中 = " + Arrays.toString(arr));}System.out.println("排序后 = " + Arrays.toString(arr));
}
}
3.3 冒泡排序的优化
class BubbleSort_2{public static void main(String[] args) {int[] arr={77,66,55,44,33,22,11};System.out.println("排序前 = " + Arrays.toString(arr));//todo-1:数组元素时7个,最多6次有序for (int i = 0; i < arr.length-1; i++) {//假设此次排序已经有序,若是假设失败boolean flag=true;//todo进行每一次排序,-1:为了防止下标越界// -i:为了专注于无序部分即可,不需要对有序部分排序for(int j=0;j<arr.length-1-i;j++){//如果前一个>后一个,,两个数进行交换if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;//如果有前一个>后一个则假设失败,数组无序flag=false;}}if(flag){break;}System.out.println("排序中 = " + Arrays.toString(arr));}System.out.println("排序后 = " + Arrays.toString(arr));
}
3.4 定义一个数组存储学生的成绩求总分平均分
3.5 定义一个数字 对数组元素进行反转

​ 10 20 30 40 50 60 70

​ 70 60 50 40 30 20 10

3.6 定义一个数组 键盘输入一个数字 判断此数字是否在数组内

​ 请您输入一个数
​ 55
​ 有此元素 55 下标是 3

​ 请您输入一个数
​ 99
​ 查无此元素 99

import java.util.Scanner;
public class ArrayText {public static void main(String[] args) {//1、创建键盘输入对象Scanner in=new Scanner(System.in);//2、获取成绩System.out.println("请问您要存储几个学生的成绩");int count=in.nextInt();//3、创建数组int[] arr=new int[count];//4、遍历数组for (int i = 0; i < arr.length; i++) {System.out.println("请您输入第"+(i+1)+"个学生的成绩");arr[i]=in.nextInt();}//4.1获取最大值、最小值、总成绩int maxNum=arr[0] , minNum=arr[0],sum=0;for (int e : arr) {if(e>maxNum){maxNum=e;}if(e<minNum){minNum=e;}sum+=e;}//5、展示总成绩,平均分,System.out.println("总成绩 = " + sum+",最高成绩="+maxNum+",最低成绩="+minNum+",平均分"+sum/arr.length);//6、关闭资源in.close();}
}

4、反转

4.1 反转1(开辟了新内存进行反转)
public class Reverse7 {public static void main(String[] args) {int[] arr={11,22,33,44,55,66,77};//反转前System.out.println("反转前 = " + Arrays.toString(arr));//反转//1、创建一个新数据 长度为7int[] newArr=new int[arr.length];//2、将旧数据内容 反转后存储到新数组内int index=0;for(int i=arr.length-1;i>=0;i--){newArr[index]=arr[i];//更改index下标index++;}//3、将新数组地址赋值给旧数组arr=newArr;//反转后System.out.println("反转后 = " + Arrays.toString(arr));}
}
4.2 反转2(就在原来的内存上进行反转)

在这里插入图片描述

class Reverse7_1{public static void main(String[] args) {int[] arr={11,22,33,44,55,66,77};//反转前System.out.println("反转前 = " + Arrays.toString(arr));//反转for(int i=0;i<arr.length/2;i++){int temp=arr[i];arr[i]=arr[arr.length-1-i];arr[arr.length-1-i]=temp;}//反转后System.out.println("反转后 = " + Arrays.toString(arr));}
}
4.3 反转3

在这里插入图片描述

LIndex=0左边从0开始,RIndex=arr.length-1右边往左开始,,左边<右边,,左边一直加,右边一直减

class Reverse7_3{public static void main(String[] args) {int[] arr={11,22,33,44,55,66,77};//反转前System.out.println("反转前 = " + Arrays.toString(arr));//反转//LIndex=0左边从0开始,RIndex=arr.length-1右边往左开始,,左边<右边,,左边一直加,右边一直减for(int LIndex=0,RIndex=arr.length-1;LIndex<RIndex;LIndex++,RIndex--){int temp=arr[LIndex];arr[LIndex]=arr[RIndex];arr[RIndex]=temp;}//反转后System.out.println("反转后 = " + Arrays.toString(arr));}
}
4.5 数组元素的扩容
4.6找出所有的偶数并求和
public class EvenTest8 {public static void main(String[] args) {int[] arr={10,11,12,13,14,15,16,17};//找出所有的偶数并求和int sum=0;for (int e : arr) {if(e%2==0){sum+=e;}}System.out.println("sum = " + sum);}
}
4.7 数组扩容(数组已经满了,再添加元素)
class EvenTest8_1{public static void main(String[] args) {String[] arr={"张三","王五","李四"};//1.创建一个新数组String[] newArr = new String[arr.length << 1];//2.将旧数组赋值为新数组for (int i = 0; i < arr.length; i++) {newArr[i]=arr[i];}//3.将新数组地址赋值给旧数组arr = newArr;arr[3]="安其拉";System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));}
}

在这里插入图片描述

5、总结

5.1数组元素的遍历

(1)普通for(值+fori)

(2)增强for(值+for):底层是普通for

5.2 数组元素的内存图

(1)单个数组

(2)多个数组

(3)两个数组指向同一个地址

5.3数组的小算法

(1)顺序查找

(2)冒泡排序

(3)特殊值

(4)反转

(5)数组的扩容

6、二维数据的初始

7、二维数组的静态初始化

静态初始化:编译时确定数组的长度以及内容
形式1:
数据类型[][] 数据名={{},{}};
形式2:
数据类型[][] 数组名=new 数据类型[][]{{“李白”,“李三”},{“安其拉”,“哈哈”,“喜喜”}};

public class DoublearrayTest_1 {public static void main(String[] args) {System.out.println("---------静态数组------------");int[][] arr = {{20, 40, 60}, {11, 22, 33, 44}, {55, 66, 77, 88, 99},{100,200}};System.out.println("arr.length = " + arr.length);//4System.out.println("arr[0] = " + arr[0]);//第一个一维数组中的第三个元素System.out.println("arr[0][2] = " + arr[0][2]); //60System.out.println("arr[2][4] = " + arr[2][4]); //99System.out.println("arr[3].length = " + arr[3].length);//2String[][] arr1;arr1=new String[][]{{"李白","李三"},{"安其拉","哈哈","喜喜"}};System.out.println("arr1.length = " + arr1.length);//2System.out.println("arr1[1][2] = " + arr1[1][2]); //喜喜}
}

8、二维数组的动态初始化

动态初始化:编译时确定数组的长度和默认值
形式1:规则矩形
数据类型[][] 数组名=new 数据类型[ 数组1][ 数值2];
数值1:一位数组的的个数
数组2:一维数组内元素的个数

class DoublearrayTest1_2 {public static void main(String[] args) {//数据类型[][] 数组名=new 数据类型[数组1][数值2];int[][] arr = new int[5][6];System.out.println("arr.length = " + arr.length);System.out.println("arr[0].length = " + arr[0].length);System.out.println("arr[4].length = " + arr[4].length);System.out.println("arr[0][0] = " + arr[0][0]);}
}

​ 形式2:非规则矩形
​ 数据类型[][] 数组名=new 数据类型[数组1][][ ];
​ 数值1:一位数组的的个数

class DoublearrayTest1_2 {public static void main(String[] args) {//数据类型[][] 数组名=new 数据类型[数组1][];int[][] iArr = new int[3][];System.out.println("iArr[0] = " + iArr[0]);iArr[0] = new int[6];iArr[0][0] = 66;iArr[1] = new int[]{33,55,77};}
}

8、二维数组的遍历

public class Taversal_2 {public static void main(String[] args) {String[][] arr = {{"侵权","王五"},{"嗯嗯","让人","头疼"},{"右移","哈哈","更改","得到"}};
//只遍历第一个一维数组,其他的依次类推//        for(int i=0;i<arr[0].length;i++){
//            System.out.println(arr[0][i]+"\t");
//        }for (String[] eleArr : arr) {//对一堆数组再次遍历for (String e : eleArr) {System.out.println(e+"\t");}System.out.println();}}
}
class Taversal2_1{public static void main(String[] args) {int[][] arr={{11,22},{33,44,55}};for (int[] eleArr : arr) {for (int e : eleArr) {System.out.println(e+"\t");}}}
}

9、二维数组的内存图

​ 二位数组的元素是一维数组,一维数组不是基本类型数据,不是基本那就是引用,引用数据类型默认值null。
在这里插入图片描述

10、二维数组求最值

public class BoubleArrayExer_3 {public static void main(String[] args) {//获取最大值/最小值int[][] arr={{111,222,333},{10,20,30},{-1,-2,99}};//定义变量记录最大值和最小值int maxNum=arr[0][0];int minNum=arr[0][0];//遍历数据,获取每一个值for (int[] eleArr : arr) {for (int e : eleArr) {//如果数组元素>假设得最大值 则说明数组元素是最大值if(e>maxNum){maxNum=e;}//如果数组元素<假设得最小值 则说明数组元素是最小值if(e<minNum){minNum=e;}}}System.out.println("最大值 = " + maxNum+",最小值 = " + minNum);}
}

键盘输入一个正整数 ,动态 创建长度为输入的数得二维数组,遍历此二维数组再控制台。
1
22
333
4444
55555

class BoubleArrayExer3_1{public static void main(String[] args) {//1、创建键盘输入对象Scanner in=new Scanner(System.in);//2、获取数组得长度System.out.println("请您输入数组的长度:");int length = in.nextInt();//3、创建二维数组int[][] arr=new int[length][];//4、遍历数组给元素赋值//4.1遍历二维数据获取每一个一维数组下标for (int i = 0; i < arr.length; i++) {//4.2给一位数组开辟空间(初始化)arr[i] = new int[i + 1];//4.3遍历一维数组,给每一个元素赋值for (int j = 0; j < arr[i].length; j++) {arr[i][j]=i+1;}}
//        System.out.println("arr[0] = " + arr[0]);
//        arr[0]=new int[0+1];
//        arr[0][0]=0+1;
//        arr[1]=new int[1+1];
//        arr[1][0]=1+1;
//        arr[1][1]=1+1;
//        arr[2]=new int[2+1];
//        arr[2][0]=2+1;
//        arr[2][1]=2+1;
//        arr[2][2]=2+1;//5、展示数据for (int[] eleArr : arr) {for (int e : eleArr) {System.out.print(e);}System.out.println();}//6、关闭资源in.close();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/491464.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python统计分析——多解释变量的方差分析

参考资料&#xff1a;用python动手学统计学 1、导入库 # 导入库 # 用于数值计算的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 用于绘图的库 from matplotlib import pyplot as plt import seaborn as sns sns.set() # 用于估计…

docker-compose 搭建laravel环境

laravel环境包含nginx,mysql,php7.4,redis 一、安装好docker后pull镜像 1.nginx镜像 docker pull nginx:latest单独启动容器 docker run --name nginx -p 80:80 -d nginx 2.php镜像 docker pull php:7.4-fpm3.mysql镜像 docker pull mysql:5.74.redis镜像 docker pull r…

高频面试题整理(一)

文章目录 平台无关性如何实现&#xff1f;JVM如何加载 .class文件&#xff1f;什么是反射?谈谈ClassLoader谈谈类的双亲委派机制类的加载方式Java的内存模型?JVM内存模型-jdk8程序计数器&#xff1a;Java虚拟机栈局部变量表和操作数栈&#xff1a; Java内存模型中堆和栈的区别…

Linux部署前后端分离项目

目录 一、jdk安装 二、tomcat安装 三、MySQL安装 四、nginx安装 五、配置多个tomcat负载&#xff0c;部署后端项目 六、前端部署 一、jdk安装 1. 上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录&#xff0c;将安装包拖进去 2. 解压安装包 这里需要解压到usr/loc…

17.材质和外观

1.图形学中的材质 在图形学中&#xff0c;材质&#xff08;Material&#xff09;是用来描述物体外观和表面特性的属性集合。它包含了控制光的反射、折射、吸收以及其他光学效果的信息&#xff0c;从而决定了物体在渲染过程中的外观。 渲染方程中那一项和材质有关&#xff1f; …

vue项目的前端工程化思路webpack(持续更新中)

写在前面&#xff1a;现在的前端网页功能丰富&#xff0c;特别是SPA&#xff08;single page web application 单页应用&#xff09;技术流行后&#xff0c;JavaScript的复杂度增加和需要一大堆依赖包&#xff0c;还需要解决Scss&#xff0c;Less……新增样式的扩展写法的编译工…

设计模式学习笔记 - 面向对象 - 8.实践:贫血模型和充血模型的原理及实践

1.Web开发常用的贫血MVC架构违背OOP吗&#xff1f; 前面我们依据讲过了面向对象四大特性、接口和抽象类、面向对象和面向过程编程风格&#xff0c;基于接口而非实现编程和多用组合少用继承设计思想。接下来&#xff0c;通过实战来学习如何将这些理论应用到实际的开发中。 大部…

第二节:Vben Admin 登录逻辑梳理和对接后端准备

系列文章目录 上一节&#xff1a;第一节&#xff1a;Vben Admin介绍和初次运行 文章目录 系列文章目录前言项目路径的概述一、登录逻辑梳理loginApi接口查看Mock 二、后端程序对接准备关闭Mock 总结 前言 第一节&#xff0c;我们已经配置了前端环境&#xff0c;运行起来了我们…

zabbix监控业务数据

前言 监控系统除了监控os和数据库性能相关的指标外&#xff0c;业务数据也是重点监控的对象。 一线驻场的运维同学应该深有体会&#xff0c;每天需要向甲方或者公司反馈现场的数据情况&#xff0c;正常情况下一天巡检两次&#xff0c;早上上班后和下午下班前各一次。监控项目…

复旦大学EMBA联合澎湃科技:共议科技迭代 创新破局

1月18日&#xff0c;由复旦大学管理学院、澎湃新闻、厦门市科学技术局联合主办&#xff0c;复旦大学EMBA项目、澎湃科技承办的“君子知道”复旦大学EMBA前沿论坛在厦门成功举办。此次论坛主题为“科技迭代 创新破局”&#xff0c;上海、厦门两地的政策研究专家、科学家、科创企…

RDMA内核态函数ib_post_recv()源码分析

接上文&#xff0c;上文分析了内核rdma向发送队列添加发送请求的函数ib_post_send&#xff0c;本文分析一下向接收队列添加接收请求的函数ib_post_recv。其实函数调用流程与上文类似&#xff0c;不再重复说明&#xff0c;可参考链接。 函数调用过程 最终会调用到这个函数 下面…

力扣随笔删除有序数组中的重复项(简单26)

思路&#xff1a;根据类似于滑动窗口的思想&#xff0c;定义一个指针&#xff1b;使指针左边的区域全部为不重复元素&#xff08;包括指针所指的数字&#xff09; 以示例2为例&#xff0c;left&#xff1a;红色加粗 遍历指针i&#xff1a;黑色加粗 窗口范围&#xff0c;左边界到…