【Java基础03】数组及其遍历、最值、反转、查表和基本查找
来源:互联网 发布:java项目的工作流程 编辑:程序博客网 时间:2024/06/05 22:53
数组的定义以及初始化
1.数组可以存储基本数据类型和引用数据类型。但是所有元素必须是一个类型。
2.格式 :
- 1) 数据类型 [ ] 数组名; // 定义了一个int类型的数组a
- 2) 数据类型 数组名 [ ]; //定义了一个int类型的a数组
3.数组的初始化
- 1) 动态初始化:只指定长度,有系统初始化值
- 2) 静态初始化:给出初始化值,由系统决定长度
4.动态初始化
- 数据类型 [ ] 数组名 = new 数据类型 [ 数组长度 ] ;
- int [ ] arr = new int [3];
- 数组长度就是数组中元素的个数(或者容器的大小)
5.Java中的内存分配:
- 1) 栈内存
- 栈内存中存储的都是局部变量
- 局部变量:定义在方法声明上或者方法中的变量
- 2) 堆内存
- 每一个new出来的东西都是存储在堆内存中。
- 堆内存特点:
- a. 会为每一个new出来的东西分配一个内存地址值
- b. 堆内存中的元素会有一个默认的初始化值
- 基本数据类型:
- byte short int long — 0
- float double — 0.0
- char ——– ‘\u0000’
- boolean ——– false
- 引用数据类型 ——– null
- byte short int long — 0
- 基本数据类型:
- c. 使用完毕后,会变成垃圾,等待垃圾回收器回收垃圾(垃圾回收机制是一套算法,每过一段时间去检测垃圾,有垃圾则回收,垃圾回收实际上就是释放变量占的内存)。
- a. 会为每一个new出来的东西分配一个内存地址值
- 3) 方法区
- 4) 本地方法区(系统相关使用)
- 5) 寄存器(CPU)
6. 数组的初始化不能动静结合
int[] arr = new int[]{1,2,3}; //静态初始化 int[] arr = {1,2,3}; //静态初始化 int[] arr = new int[3]{1,2,3}; // X ,不可取
7.数组中的两个小问题:
- 1)
java.lang.ArrayIndexOutOfBoundsException
原因:数组角标越线,角标不能小于0且最大索引是数组长度-1 - 2)
java.lang.NullPointerException
原因:访问了null的属性分或者方法。如果数组初始化为null,该变量就不指向堆内存中的任何地址。
数组中的常见操作
1.数组的遍历
1)普通的输出
for( int i = 0 ; i < arr.length-1 ; i++){ System.out.println(arr[i]);}
2)带格式的输出
System.out.println("[");for( int i = 0 ; i < arr.length ; i++){ if(i == arr.length - 1){ System.out.println(arr[i] + "]"); }else{ System.out.println(arr[i]+", "); }}
2.获取数组的最值
//定义一个数组 int[] arr = { 10000, 9527 , 10086 , 95535 , 10001,12306} //定义一个参照物,假设这个参照物就是最大值 int max = arr[0]; for( int i = 0; i< arr.lrngth ; i++){ //获取一个元素,跟参照物进行比较 if ( arr[i] > max ){ //现在最大值是我们遍历到的这个数,需要将参照物设置成当前的这个数 max = arr[i]; } }
3.数组元素的反转
//打印反转之前的数组 int[] arr = {1,2,3,4,5,6,7,8,9}; //定义2个索引 int startIndex = 0; int endIndex = arr.length - 1; for(int i = 0; i<arr.length; i++){ if(startIndex >= endIndex) { break; } //交换两个索引对应元素的值 int temp =arr[startIndex]; arr[startIndex] = arr[temp]; arr[endIndex] = temp; startIndex++; endIndex--; } //遍历数组的方法
4.数组的查表法
- 需求:根据键盘录入索引,查找对应星期
//定义一个数组,存储的是星期的数据String[] arr = {"","星期一","星期二","星期三", "星期四","星期五","星期六", "星期日", }Scanner sc = new Scanner(System.in);int index = sc.nextInt() - 1;//对用户输入的数据进行校验if( index <= 1 || index > arr.length - 1){ System.out.println("请输入一个1-7的整数!");}else{ System.out.println(arr.[index]); }
5.基本查找(查找指定元素第一次在数组出现的索引)
- 定义一个方法获取指定元素第一次在数组中出现的索引
- 1.返回值类型 int
- 2.参数列表 int[] arr,int data
- int[] arr表示要查找的数组
- int data 表示的是需要查找的那个元素
//定义一个数组 int[] arr = {12,23,67,90,88} //【法一】 public static int getIndex(int[] arr){ //遍历数组,和data进行判断 for(int i = 0; i<arr.length;i++){ if(arr[i]==data) return i; } //如果程序走到这说明没有找到这个数,返回负数说明没找到 return -1; }
【二维数组】
- 1.格式:
- a.数据类型 数组名[][] =new 数据类型[m][n];
- b.数据类型[] 数组名[] =new 数据类型[m][n];
- *b不推荐使用
- 2.定义二位数组,输出二维数组的名称,输出每一个一维数组的名称,输出二维数组的两个元素
//定义一个二维数组
int[][] arr =new int[2][2];
//打印二维数组的名称 System.out.println(arr);
- 3.二维数组的内存图解 (见doc)
- 4.二位数组格式2
- 1) 数据类型[][] 变量名 = new 数据类型[m][];
- 2) m表示二维数组中有多少个一维数组,但是现在一维数组还没有 定义
- 3)Demo定义一个二维数组,输出为二维数组的名称和二维数组的每一个一维数组;然后动态给二维数组赋值一维数组,再次输出二维数组中的每一个一维数组,给二位数组的中的元素赋值,输出对应的元素值。
int[][] arr = new int[2][]; System.out.println(arr); System.out.println(arr[0]); System.out.println(arr[1]); //动态的给一维数组赋值 arr[0] = new int[3]; arr[1] = new int[2]; System.out.println(arr[0]); System.out.println(arr[1]); //给每一个一维数组赋值 arr[0][0] = 63; arr[0][1] = 56; System.out.println(arr[0][0]); System.out.println(arr[1][1]); //以上代码原理图见docx和笔记
- 5.二维数组格式3
见doc- 1)Demo
/* 定义一个二维数组,需要对二维数组进行初始化 打印一个二维数组中的一维数组,再打印每一个二维数组中的元素*/ int[][] arr = {{1,2,3},{4,5},{6}}; System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); System.out.println(arr[0][2]);//3 System.out.println(arr[1][1]);//5 System.out.println(arr[2][0]);//6 //以上内存图见docx
- 6.遍历二维数组
//定义一个二维数组 int[][] arr = {{1,2,3},{4,5},{6}}; //遍历 for(int x = 0;x<arr.length;x++){ for(int i = 0;i<arr[x].length;i++){ System.out.println(arr[x][i]); } }//优化见源码
练习
- 1.需求:公司年销售额求和
某公司按照季度和月份统计的数据如下:单位:万元
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
//定义一个二维数组用来存储每一个季度的销售信息int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}//计算二维数组中所有元素的总和见源码
- 2.结论:
基本数据类型作为参数传递的时候,形参的改变不影响实际参数。
引用数据类型作为参数传递的时候,形参的改变对实际参数有影响。
阅读全文
0 0
- 【Java基础03】数组及其遍历、最值、反转、查表和基本查找
- java查找方法和数组反转
- java数组以及常见的遍历,最值,逆序,查表的操作
- JAVA基础day04 数组学习 排序和查找基本算法
- 面试中常见的数组的操作:遍历,最值,反转,冒泡排序,二分查找(附代码)
- java 基础数据遍历(2)----二维数组查找
- 黑马程序员--05JAVA数组及其排序和查找
- java基础--常用数组的一些操作方法-查找-最值-排序
- 链表基本操作及其反转
- Java基础(1):基本数据类型和数组
- Java基础——函数+数组概述+数组操作(获取最值_排序_折半查找+进制转换)
- [数组][查表][折半查找]-Java第4天课程
- java基础--求数组中的最值
- Java单链表增删改查反转基本操作
- java基础-数组(遍历)
- java获取数组元素最值及其下标
- 黑马程序员----------java基础知识(6)之数组查找和二维数组及其应用
- JAVA基础再回首(三)——方法、重载、数组、堆栈内存分配、数组遍历、获取最值、二维数组
- ???题目4 : Agent Communication
- Bootstrap Table使用分享
- Java复习笔记+经验总结-05 集合框架 IO流
- 测试微信邀请码
- 数据结构实验之链表三:链表的逆置
- 【Java基础03】数组及其遍历、最值、反转、查表和基本查找
- leetcode Two Sum II
- 图像的卷积
- Linux文本编辑器Vim
- 深入理解Cache
- AJAX学习笔记(五)_AJAX响应
- Java工程师学习路线
- 右对齐(Right-to-Left)语言导致的问题(如:阿拉伯语)
- ???题目5 : Territorial Dispute