数组,数组扩容,求最大值,数组内存分配和返回值的相关习题解答

本文介绍了如何在Java中找到整型数组的最大值及其下标,展示了两种方法合并数组并根据元素数量动态扩容。第一种方法涉及使用`Arrays.copyOf`,第二种方法则涉及排序和数组复制。同时,还讨论了两种添加元素并处理数组长度变化的方法。
摘要由CSDN通过智能技术生成

1.现有int[] arr 输出其中最大值,和下标

public static void main(String[] args) {
        int[] arr = {4, 3, 5, 1, 2};
        int max = arr[0];
        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
                index = i;
            }
        }
        System.out.println("这个数组的最大值为:" + max + " 下标为:" + index);
    }

2.现有两个数组如下,要将arr变成{7,6,5,4,3,2,1}

int [] arr={4,3,2};
int [] arr1={7,6,5,1}
//第一种方法:
public static void main(String[] args) {
        int[] arr = {4, 3, 2};
        int[] arr1 = {7, 6, 5, 1};

        arr1= Arrays.copyOf(arr1,arr.length+arr1.length);
        System.arraycopy(arr,0,arr1,3,arr.length);
        arr1[arr1.length-1]=1;
        for (int i=0;i<arr1.length;i++){
            System.out.println(arr1[i]);
        }
    }
//第二种方法:
public static void main(String[] args) {
        int[] arr = {4, 3, 2};
        int[] arr1 = {7, 6, 5, 1};
        //定义一个新数组,长度为两个数组之和
        int[] arr2 = new int[arr.length + arr1.length];
        //将旧数组赋值给新数组
        System.arraycopy(arr, 0, arr2, 0, arr.length);
        System.arraycopy(arr1, 0, arr2, arr.length, arr1.length);
        /*for (int i=0;i<arr2.length;i++){
            if (i<arr.length){
                for (int j =0;j<arr.length;j++)
                    arr2[j]=arr[j];
            }else {
                for (int j=0;j<arr1.length;j++)
                    arr2[j+arr.length]=arr1[j];
            }
            System.out.println(arr2[i]);
        }*/
        System.out.println("-------------");
        //排序
        for (int i = 0; i < arr2.length - 1; i++) {
            for (int j = 0; j < arr2.length - i - 1; j++) {
                if (arr2[j] < arr2[j + 1]) {
                    int t = arr2[j];
                    arr2[j] = arr2[j + 1];
                    arr2[j + 1] = t;
                }
            }
        }
        //把新数组arr2的地址赋值给arr
        arr = arr2;
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

3.设计一个添加元素的方法 在方法中初始化 长度为16的int数组 当添加的元素个数 大于 长度 的一半的时候 扩容,扩容为原来数组长度的一倍,并且返回新数组(需要借助一个全局变量维护数组中添加进去的元素个数)

//第一种方法 
static int count = 0;          //全局
static int[] arr=new int[16];  //全局
    public static void main(String[] args) {
        int[] arr1 = add(8);
        System.out.println(arr[0]);
    }
    public static int[] add(int k){
        if(count>arr.length/2){
            arr=Arrays.copyOf(arr,arr.length*2);
        }
        for (int i=0;i<arr.length;i++){
            if (arr[i]==0){
                arr[i]=k;
                count++;
                break;
            }
        }
        return arr;
    }
//第二种方法:
static int n=9;//全局
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] arr=new int[n];
        for (int i=0;i<arr.length;i++){
            System.out.println("输入你添加的第"+(i+1)+"个元素:");
            arr[i]=sc.nextInt();
        }
        for (int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
        System.out.println("--------------");
        arr=add(arr);
        for (int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
    
	public static int[] add(int[] arr){
        int[] arr2=new int[16];
        if (n>arr2.length/2){
            return Arrays.copyOf(arr,arr2.length*2);
        }else{
            return Arrays.copyOf(arr,arr2.length);
        }
    }
  1. 以下代码分别打印什么值? (1 2 1)
public static void main(String args[]){
	int [] arr={1,2,3};
	m1(arr);
	System.out.println(arr[2]);			//1
    
    int [] arr1=m2(arr);
    System.out.println(arr1.length);	//2
    
    arr=m2(arr1);
    System.out.println(arr.length);		//1
}


public static void m1(int [] arr){
	arr[2]=1;
}

public static int[] m2(int [] arr){
	return Arrays.copyOf(arr,arr.length-1);
}

5.以下代码分别打印什么值?

public static void main(String args[]){

        int i =10;
        m1(i);
        //输出的是上面定义的i,所以是10
        System.out.println(i);          	//10

        i=m1(i);
        //i++,先赋值,再自加,所以为10
        System.out.println(i);				//10

        i=m2(i);
        //--i,先自减,再赋值,所以为9
        System.out.println(i);				//9

        System.out.println("---------------");
        byte [] arr={7,5,6,9,8,4,1};
        m3(arr);
        System.out.println(arr[0]);			//7
        System.out.println(arr.length);		//7

        System.out.println("---------------");

        arr=m3(arr);
        System.out.println(arr[1]);			//9
        System.out.println(arr.length);		//9

    }
    public static byte[] m3(byte [] arr){
        byte[] arr1=Arrays.copyOf(arr,arr.length+2);
        System.arraycopy(arr,2,arr1,0,3);
        return arr1;
    }

    public static int m1(int i){
        return i++;
    }

    public static int m2(int i){
        return --i;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熱愛。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值