遍历数组
数组的特点:
(1)数组有默认值;
(2)数组 初始化以后长度不可改变;
(3)数组既可以存储基本数据类型、也可以存储引用数据类型;
(4)直接打印数组名称,得到的是数组对应堆内存中的内存地址哈希值。
public class Test01 {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5};
System.out.println(arr); //[I@50cbc42f
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
解析:
(1)获取数组长度是 i<arr.length;
(2)获取当前元素是 arr[i];
========================================================================================================================================================
数组存储引用数据类型——对象数组
public class Person {
private String name;
private int age;
//无参,有参构造犯法...
//set和get方法...
}
接下来是对象数组 创建的四种方式:
public class Demo {
public static void main(String[] args) {
Person[] arr1=new Person[3];
//第一种 创建对象,把对象赋值给动态数组
Person p1=new Person("张三",23);
Person p2=new Person("李四",24);
Person p3=new Person("王五",25);
arr1[0]=p1;
arr1[1]=p2;
arr1[2]=p3;
//第二种 创建匿名对象,把匿名对象赋值给动态数组
Person[] arr2=new Person[3];
arr2[0]=new Person("张三",23);
arr2[1]=new Person("李四",24);
arr2[2]=new Person("王五",25);
//第三种 创建匿名对象,把匿名对象赋值给静态数组
Person[] arr3={new Person("张三",23),new Person("李四",24),new Person("王五",24)};
//第四种 创建对象,把对象赋值给静态数组
Person pe1=new Person("张三",23);
Person pe2=new Person("李四",24);
Person pe3=new Person("王五",25);
Person[] arr4={pe1,pe2,pe3};
}
}
========================================================================================================================================================
习题 :
第一题:分析以下需求并实现
按要求定义方法:
(1) 定义public static int[] getNums ( int[] arr, int num)方法, 实现以下功能:获取数组中, 被num整除的数放到一个新数组中,把新的数组的方式返回。
(2) 定义main方法, 要求:
创建一个int[] arr数组,在定义一个变量num(num的值自己随意给);
调用getNums方法获得方法的返回值int[] returnArr,遍历打印返回值数组中的所有元素到控制台上。
public class Test01 {
public static void main(String[] args) {
/*按要求定义方法:
定义public static int[] getNums ( int[] arr, int num)方法, 实现以下功能:
获取数组中, 被num整除的数放到一个新数组中,把新的数组的方式返回。
定义main方法, 要求:
创建一个int[] arr数组,在定义一个变量num(num的值自己随意给);
调用getNums方法获得方法的返回值int[] returnArr
遍历打印返回值数组中的所有元素到控制台上。*/
int[] arr = {1, 24, 85, 65, 15, 2, 52, 2, 55};
int num = 2;
int[] returnArr = getNums(arr, num);
for (int i = 0; i < returnArr.length; i++) {
System.out.println(returnArr[i]);
}
}
public static int[] getNums(int[] arr, int num) {
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % num == 0) {
count++;
}
}
int index = 0;
int[] arr2 = new int[count];
for (int i = 0; i < arr.length; i++) {
if (arr[i] % num == 0) {
arr2[index] = arr[i];
index++;
}
}
return arr2;
}
}
============================================================================
第二题:
查看以下代码,输出的结果为:( )
int[] arr = new int[10];
arr[0] = 1;
arr[1] = 2;
System.out.println(arr[10]);
A:0
B:1
C:2
D:运行报错,数组索引越界异常
解析
长度为10的数组,索引最大取到9,因此运行报错,索引越界异常,选D
============================================================================
第三题:
以下关于数组描述错误的是:( )
A:数组是一个容器
B:数组只能保存基本数据类型的数据
C:集合只能存储引用类型数据
D:定义数组可以采用动态初始化和静态初始化
解析:
A正确
B错误,数组可以存储基本类型和引用类型的数据。
C正确,集合可以存储引用类型数据。
D正确。
============================================================================
第四题:
(1):定义 getNewArr()静态方法:要求传入一个int类型的数组arr,遍历数组,将数组中等于15的元素替换成998,然后返回修改之后的数组
在main方法中完成:
(1). 定义一个长度为5的int类型的数组
(2). 数组内容(15,34,56,15,67)
(3). 调用getNewArr方法,在控制台打印返回后的数组中的元素定义 getNewArr()静态方法:要求
传入一个int类型的数组arr,遍历数组,将数组中等于15的元素替换成998,然后返回修改
之后的数组
public class Test {
public static void main(String[] args) {
int[] arr=new int[]{15,34,56,15,67};
int[] newArr = getNewArr(arr);
System.out.println(Arrays.toString(newArr));
}
public static int[] getNewArr(int[] arr){
for (int i = 0; i < arr.length; i++) {
if(arr[i]==15){
arr[i]=998;
}
}
return arr;
}
}
============================================================================
第五题
(1)定义一个静态方法:getIndex( int num,String[] arr)在方法中输出要查询的数字在数组中最后出现的索引位置;
如元素在数组中不存在,就输出在数组中不存在;
(2)在main方法里面定义一个整数数组包含如下元素:{17 , 12 , 13 , 12 , 18, 14, 13, 17},再自己给一个int数num=17,
(3)调用getIndex()方法,将num和数组作为参数传入,在控制台打印出返回值
第一种解法:
倒着遍历:有则直接结束;没有的话当到最后一个索引0判断一下也不是就都不可以
public class Test {
public static void main(String[] args) {
int[] arr={17 , 12 , 13 , 12 , 18, 14,13, 17};
int num=10;
getIndex(num,arr);
}
public static void getIndex(int num,int [] arr){
for (int i = arr.length-1; i >=0;i--) {
if(arr[i]==num){
System.out.println(num+"在数组中最后出现的位置是"+i+"号索引位置");
break;
}
if(i==0){
if(arr[0]!=num){
System.out.println("不存在");
}
}
}
}
}
第二种解法:
倒着遍历并且做标记:有则【改变标记】【记录索引】直接结束;没有的话循环结束;出循环判断一下标记值
public class Test {
public static void main(String[] args) {
int[] arr={17 , 12 , 13 , 12 , 18, 14,13, 17};
int num=10;
getIndex(num,arr);
}
public static void getIndex(int num,int [] arr){
//定义俩个标记
int mark = -1;//判断存在标记
int index = 0;//存在获取出现的最大索引标记
for (int i = arr.length - 1; i >= 0; i--) {
if (arr[i] == num) {
index = i;
mark = 1;
break;
}
}
if (mark < 0) {
System.out.println("不存在");
} else {
System.out.println(num + "在数组中最后出现的位置是" + index + "号索引位置");
}
}
}
第三种解法
顺着遍历并且做标记:有则改变标记继续遍历完;没有的话循环结束;出循环判断一下标记值
public class Test {
public static void main(String[] args) {
int[] arr = {17, 12, 13, 12, 18, 14, 13, 17};
int num = 1;
getIndex(num, arr);
}
public static void getIndex(int num, int[] arr) {
//定义一个标记
int index = -1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == num) {
index = i;
}
}
if(index>0){
System.out.println(num + "在数组中最后出现的位置是" + index + "号索引位置");
}else {
System.out.println("不存在");
}
}
}
============================================================================
第六题:
定义一个静态方法: int getIndex( int num,int[] arr)在方法中输出要查询的数字在数组中出现的索引位置:
如元素在数组中不存在,返回-1;
在main方法里面定义一个整数数组包含如下元素:{17 , 12 , 13 , 12 , 18, 14, 13},再自己给调用getIndex()方法,将num和数组作为参数传入,获得返回值,判断返回值结果,
是-1:打印:不存在 不是-1:打印索引就行。
public class Test {
public static void main(String[] args) {
int[] arr = {17, 12, 13, 12, 18, 14, 13};
int num = 13;
ArrayList<Integer>arrayList=new ArrayList<>();
int index = getIndex(num, arr,arrayList);
if(index==-1){
System.out.println("不存在");
}else {
System.out.print("存在的索引位置是有:");
for (int i = 0; i < arrayList.size(); i++) {
if(i==arrayList.size()-1){
System.out.print(arrayList.get(i)+"。");
}else {
System.out.print(arrayList.get(i)+",");
}
}
}
}
public static int getIndex(int num, int[] arr,ArrayList arrayList) {
int index = -1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == num) {
index=i;
arrayList.add(i);
}
}
return index;
}
}
============================================================================
第七题:
按要求在main方法中完成以下功能:
a.定义一个长度为5的int型数组arr,数组元素为1-99(范围包含1和99)之间的随机数
b.提示用户输入2-5之间的一个数字num(num范围包括2和5,不需要代码判断)
c.遍历数组arr,筛选出数组中元素是num倍数的数组元素并输出
public class Test {
public static void main(String[] args) {
Random random = new Random();
Scanner scanner = new Scanner(System.in);
int[] arr = new int[5];
for (int i = 0; i < 5; i++) {
arr[i] = random.nextInt(99) + 1;
}
System.out.println("随机的5个元素是" + Arrays.toString(arr));
System.out.println("请输入一个2-5之间的数字");
int i = scanner.nextInt();
System.out.println("符合要求的数字有:");
for (int i1 = 0; i1 < arr.length; i1++) {
if (arr[i1] % i == 0) {
System.out.println(arr[i1]);
}
}
}
}
============================================================================
第八题:分析以下需求并实现
1.通过键盘录入一个数字,作为数组的长度
2.根据录入的数字,创建一个长度为该数字的数组
3.通过随机数为数组中的每个元素进行赋值。随机数的范围在1-100之间
4.求出数组中最大数字
5.求出数组中的数字平均值
public class Teat {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个数字昨晚数组的长度");
int i = scanner.nextInt();
int[] arr=new int[i];
Random random=new Random();
for (int j = 0; j < arr.length; j++) {
arr[j]=random.nextInt(100)+1;
}
System.out.println(Arrays.toString(arr));
int max=arr[0];
int sum=0;
double avg=0;
for (int g = 0; g < arr.length; g++) {
if(arr[g]>arr[0]){
max=arr[g];
}
sum+=arr[g];
}
System.out.println("最大是"+max);
System.out.println("平均是"+sum/(arr.length));
}
}