笔记内容:数组
笔记来源:刘意老实Java基础视频第4天
正文格式:
数组格式
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];通过new关键字创建了一个长度为5,元素类型是int的数组实体,并把这个数组实体赋值给引用类型变量 arr, 所以arr的类型是int[] (int类型数组)
会打印数组的内存地址(暂且这样记忆,之后会详细讲解),可以通过索引获取指定位置的元素
int [] arr = new int[5];
数据类型:
基本类型;4类8种。
引用类型;类,借口,数组。
左边;
int;表示数据类型。
[];表示这是一个数组
arr; 数组的名字。
右边;
new;
int;表示数据类型。
[];表示一个数组
5;数组的长度
其他三种数组格式 A int[] arr =new int[2];//念法:int类型的数组arr
B int arr[] = new int[2];//念法:int 类型的arr数组,不推荐这么写,他和第一种格式其实一样的
C int[] arr = new int[]{1,2,3,7};//大括号内可以没有任何东西
D int[] arr = {3,4,65,4};//大括号内可以没有任何东西
System.out.println(arr2) 是打印 arr2的十六进制字符
System.out.println(arr[2]) 是打印 堆中角标为3的元素
class Demo
{
public static void main(String[] args)
{
double[] arr1 = new double[2];
int[] arr2 = new int[2]; //arr1 arr2 arr3就相当于变量x y z
char[] arr3 = new char[3]; //
boolean[] arr4 = new boolean[3];
System.out.println(arr2);
}
}*/
/*
需求:我要获取一个数据肿么办?
通过索引(类似于字典的索引)。格式:数组名【索引】
arr[0] arr[1]
Java内存图:
A:栈 存储局部变量使用。局部变量:定义在方法中或者方法声明上的形式参数都叫做局部变量
使用完毕,立马消失。
B:堆 所有new出来的都在堆里面。
a:每一个实体都有地址值 本身是十进制,显示的是十六进制
b:每一个实体内的内容都有默认值
整数:0
浮点数:0.0
字符:'\u0000'
布尔:false
c:实体不再被使用的时候,在垃圾回收器空闲的时候被回收。
C:方法区
D:本地方法区
E:寄存器
需求:我要给第三个元素赋值为10,肿么办?
arr[2]=10; 我说过了 arr[] 就相当于一个变量,[]里面装的是角标
****知识点:数组操作的常见问题
A 数组越界 访问了不存在的索引,如下
ArrayIndexOutOfBoundsException
class Demo
{
public static void main(String[] args)
{
int[] arr={1,2,3,4,2};
System.out.println(arr[3]);
System.out.println(arr[5]);//没有角标6的元素
}
}
B 空指针异常。一个实例对象都已经不存在了,你还要访问
NullPointerException
class Demo
{
public static void main(String[] args)
{
int[] arr={1,2,3,4,2};
arr=null; //重新给arr赋值,以前是堆的地址值赋值给arr,
现在是null赋值给arr,arr就不会通过 地址值指向堆
System.out.println(arr[3]); //arr 已经是个空的了
}
}
/*
知识点;多个数组指向同一个实例
class Demo
{
public static void main(String[] args)
{
int[] arr=new int[3];
arr[0]=1;
arr[1]=3;
arr[2]=5;
int[] arr2=arr; //再定义一个数组,把数组arr的值(地址值)付给了arr2
arr2[1]=10;
System.out.println(arr[1]);//10
System.out.println(arr2[2]);//5
}
}
*/
/*
知识点; 遍历 获取数组中的所有元素
class Demo
{
public static void main(String[] args)
{
int[] arr={1,2,3,4,5};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
}
}
//通过循环改进,把所有数组中元素罗列出来
class Demo
{
public static void main(String[] args)
{
int[] arr={1,2,3,4,5};
for (int x=0;x<5;x++) //x定义的是脚标 0 1 2 3 4
{
System.out.println(arr[x]);
}
}
}
//如果数据太多,就没办法了遍历么??
//假如有人能够提供我们数组的长度,就可以做了(x<?)
// java 提供了一个属性 length
格式; 数组名.length
class Demo
{
public static void main(String[] args)
{
int[] arr={1,2,3,4,5};
for (int x=0;x<arr.length;x++) //x定义的是脚标 0 1 2 3 4
{
System.out.println(arr[x]);
}
}
}
需求;数组遍历 用方法
思路
返回值类型;void
参数列表;int[]arr
class Demo
{
public static void main(String[] args)
{
int[] arr={1,2,3,4,5};
int[] arr2={34,415,515,321,54,52,37,73,42};
printArray(arr); //执行一遍函数
printArray(arr2); // 再执行一遍函数
}
public static void printArray(int[] arr) // 传送数组 arr无所谓他和上面的arr1 arr2没有联系 其实传送的是空,直接就打印出来了 {
for (int x=0;x<arr.length;x++) //x定义的是脚标 0 1 2 3 4
{
System.out.println(arr[x]);
}
}
}
*/
/*
需求,求数组中的最大值
思路
1.需要进行比较,并且定义变量记住每次比较后较大的值
2.对数组中的元素遍历取出,和变量记住的元素进行比较
如果遍历的元素大于变量中记录的元素,就用变量记住较大的值。
3.遍历结果,该变量记住的就是最大值。
定义一个功能实现
明确1 结果。
是数组中的元素,int
明确2 未知内容
数组
class Demo
{
public static void main(String[] args)
{
int[] arr={34,415,515,321,54,52,37,73,42};
int max = getMax(arr); //先定义,在打印输出,这都错!!MD!!///?????????
System.out.println(max);
}
//方法1 定义元素
public static int getMax(int[] arr)
{ // 传送数组 arr无所谓他和上面的arr1 arr2没有联系 {
int max=arr[5]; //定义 int max=0 就是让每次循环中 元素跟0对比,
//假如元素中都是负数,那没就会输出最大值是0
//所以定义max 可以随意定义一个 数组中的任何一个元素
//初始化数组中的 元素 可以,那么初始化元素中的角标可不可以呢?怎么可以做到呢
// 可以,因为元素跟角标有着对应关系
for (int x=0;x<arr.length;x++) //x定义的是脚标 0 1 2 3 4
{
if (arr[x]>max)
{
max=arr[x]; //每遍历一次数组中的元素都要循环做一次比较
}
}
return max; //错误忘了加分号
}
// 方法2(定义角标) 运行方法2的时候需要把int max = getMax(arr);改成int max = getMax2(arr);
public static int getMax2(int[] arr)
{
int maxIndex=0; //初始化定义一个角标也可以,因为角标对应着元素
for (int x=0;x<arr.length;x++) //x定义的是脚标 0 1 2 3 4
{
if (arr[x]>arr[maxIndex]) //元素跟角标对应的元素作对比
{
maxIndex=x; //
}
}
return arr[maxIndex]; //错误忘了加分号
}
}*/
|