数组(day05)——遍历数组 、 对象数组 、 数组习题

遍历数组

数组的特点:
(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));
    }
}

版权声明:本文为qq_43775310原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。