java基础复习2 数组

本文详细介绍了Java中的数组,包括数组的声明、静态与动态初始化、数组的索引、长度以及常见错误如越界和空指针异常。还讨论了数组的遍历方式,如何求最大值、总和和平均值,并展示了默认值。此外,文章深入解析了数组的内存分配,指出数组是引用类型,以及拷贝数组的两种方法。最后,给出了三个编程作业,涉及数组操作和数学逻辑问题。
摘要由CSDN通过智能技术生成
数组:相同类型元素的集合 类型必须相同

格式:1.数据类型[] 数组名;      //使用最多

 2.数据类型数组名[];

赋值方式

1、静态初始化

数据类型[] 数组名={1,2, 3....};

声明=赋值 //只有声明没有赋值不行

int[] ints={12,13,14,15,16}

自定义初始元素,系统计算长度

2、动态初始化

int [] student =new

int[] ints=new int[12]

自定义初始长度

3、动态初始化

int[] ints=new int[]{12,13,14,15,16}

自定义初始元素,系统计算长度

数组的索引

//tips:从0开始

格式:

数组索引 数组名[索引值]

数组长度

数组名.length

int[] ints={1,2,3,4,5,6};

System.out.println(ints.length);

常见错误

越界:ArrayIndexOutOfBoundsException: -1

空指针:NullPointerException

当一个值为null的数组,尝试调用length属性或者使用索引时,抛出异常

数组的遍历//课上的demo04

int[] ints={1,2,3,4,5,6};

System.out.println(ints);

结果:[I@1b6d3586          此为内存地址

数组遍历方式

1.普通for循环

for (int i=0;i<ints.length;i++) {

System.out.println(ints[i]);

}

2.增强for循环

格式:for(数据类型 变量名:要遍历的数组名){变量名就是每一个数组数组}

for(int j: ints){

System.out.println(j);

}

求最大值

int[] ints={1,2,3,85,5,6};

int max=ints[0];

for (int i=1;i<ints.length;i++){

if (ints[i]>max) {

max = ints[i];

}

}

System.out.println(max);

总和、平均值

int[] ints={1,2,3,85,5,6};

int total=0;

for (int i=1;i<ints.length;i++){

total +=ints[i];

}

System.out.println(total);

//平均值

System.out.println(total/ints.length);

//java中整数相除直接取整,不会四舍五入

Arrays.toString(ints)只能打印不能调用

默认值

int 0; double 0.0 ;boolean false; char 、u0000;String null

测试代码

int[] ints=new int[5];

System.out.println(Arrays.toString(ints));

boolean[] boo=new boolean[5];

System.out.println(Arrays.toString(boo));

char[] ch=new char[5];

System.out.println(Arrays.toString(ch));

String [] str=new String[5];

System.out.println(Arrays.toString(str));

输出结果

[0, 0, 0, 0, 0]

[false, false, false, false, false]

[ , , , , ]

[null, null, null, null, null]

数组内存的理解

数组是引用数据类型、、非8种基本数据类型

涉及栈和堆

声明=赋值

声明在栈中 赋值在堆内 通过地址关联

测试代码

int num1=12;

int num2=num1;

num2=10010;

System.out.println(num1);

System.out.println(num2);

int[] int1={1,2,3};

int[] int2=int1; //这里赋值的是int1的地址

int2[0]=99;

System.out.println(Arrays.toString(int1));

System.out.println(Arrays.toString(int2));

//改int2的0值,实际上改的int1和int2共用的地址,2改1改,一荣俱荣一损俱损

输出结果

12

10010

[99, 2, 3]

[99, 2, 3]

拷贝数组的方法

// 1、Arrays.copyOf(要拷贝是数组名,目标长度)

// 2、ASystem.arraycopy(原数组,原数组起始索引,目标数组名,目标数组起始索引)

int[] ints={1,2,3,4,5,6,7,8,9,10};

int[] rra =Arrays.copyOf(ints,5);

System.out.println("这是方法1"+Arrays.toString(rra));

int[] arr =new int[8];

System.arraycopy(ints,1,arr,1,4);

System.out.println("这是方法2"+Arrays.toString(arr));

作业
作业1

定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变

代码

public static void main(String[] args) {

int [] ints={1,2,3,4,5,6};

for(int j: ints){

if(j%2==0)

System.out.println(" "+j);

else{

System.out.println(j);

}

}

}

测试结果

1

2

3

4

5

6

作业2

有一个很有名的数学逻辑题叫做不死神兔问题。有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?

作业3

已知2019年是猪年,请在控制台输出从1949年到2019年中所有是猪年的年份。

源代码

for(int i=1949;i<=2019;i++){

if((2019-i)%12==0){ //难点还是在计算2019-i)%12余0;2019往回算每隔开12年计数一次

System.out.println(i);

}

}

测试结果

1959

1971

1983

1995

2007

2019

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值