java基础语法(数组练习题下)

需求1:

把一个数组的元素逆序交换,
int[] a = { 5, 11, 15, 24, 36, 47, 59, 66 };
交换元素后
int[] b = { 66 ,59 ,47 ,36 ,24,15 ,11 ,5 };

解答:

1.根据题目要求,要使a[i]存放到b[a.length-1]的位置。可以写一个for循环,使i从a.length-1开始减小直到0,把对应的按照索引从小到大的顺序依次数据放到b数组中。

代码实现:

package 数组.练习;

import java.util.Arrays;
import java.util.Collections;

public class demo4 {
    public static void main(String[] args) {
        int[] a ={1,23,4,24,224,9};
        int[] b =new int[a.length];
        int c=0;
        System.out.println(Arrays.toString(a));
        for (int i = a.length-1; i >=0 ; i--) {

            b[i]=a[c++];
        }
        System.out.println(Arrays.toString(b));
    }
}

运行结果:

 2.java中有一个降序的方法,如果a数组的数据是从小到大排序的,可以直接用降序方法。

代码实现:

  class method2 {
    public static void main(String[] args) {
        Integer[] arr={1,2,3,4,5,6,7,8};
        for (int i:arr){
            System.out.print(i+" ");
        }
        System.out.println();
        Arrays.sort(arr, Collections.reverseOrder());
        for(int i:arr){
            System.out.print(i+" ");
        }
    }
}

运行结果:

        

需求2:

现在有如下一个数组:

 int a[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};

 要求将以上数组中的0项去掉,将不为0的值存入一个新的数组.

解答:

1.要创建一个新数组,得先知道这个新数组的长度。首先要统计出旧数组非0项的个数,然后创建一个非0项长度的新数组,最后再把旧数组非0项依次存入新数组。

代码实现:

package 数组.练习;

import java.util.Arrays;

//现在有如下一个数组:
// int a[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
// 要求将以上数组中的0项去掉,将不为0的值存入一个新的数组.
public class demo5 {
    public static void main(String[] args) {
        int[] a={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
        int  zero= 0 ;  // 统计0的个数
        for ( int  i= 0 ;i<a.length;i++){
            if (a[i]== 0 ){
                zero++;
            }
        }
        int[] b=new int[a.length-zero];//新数组长度定义为旧数组长度减去zero
        int c=0;
        for (int i = 0; i < a.length; i++) {
            if (a[i]!=0) {
                b[c++] = a[i];//将旧数组非0项存入新数组,新数组索引自增
            }
        }
        System.out.println("旧数组:"+Arrays.toString(a));
        System.out.println("新数组:"+Arrays.toString(b));
    }
}

 运行结果:

 2.为了节省空间,可以试着不创建新数组,直接提取出旧数组中的非0项(题目要求创建新数组,这里只是一种延伸方法,并不作答此题)。

代码实现:

class demo5_method2 {
    public static void main(String[] args) {
        int oldArr[] = {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
        int[] arr = new int[oldArr.length];
        int index = 0;
        for (int i = 0; i < oldArr.length; i++) {
//           将当前元素不等于0的数,存入新数组
            if (oldArr[i] != 0) {
                arr[index] = oldArr[i];
                index += 1;
            }
        }
        System.out.println(Arrays.toString(arr));
        System.out.println("数组中有 " + ((oldArr.length) - (index)) + "个0");
        System.out.println("数组中不为0的数共有:" + index + " 个 ");
//         遍历获得不为0 的数的,新数组
        for (int i = 0; i < index; i++) {
            //我只输入大于0 的数
            System.out.print(arr[i] + ",");
        }
    }
}

运行结果:

需求3:

定义一个长度为10的int数组,自定义一组数据,统计数组中的总和、平均值、最大值、最小值、以及奇数和偶数的个数.

 解答:

1.可以先创建一个新数组(和旧数组等长),将旧数组从小到大排好序存放到新数组中,最大值就是新数组的最后一个数据,最小值就是第一条数据。然后遍历该数组,将遍历出的每一项相加就得到数组和,然后用数组和除以数组长度(设成double类型)就可以得到平均数。再遍历一次,如果能被2整除就是偶数,然后统计一次,遍历完就可以得到偶数个数,然后用数组长度减去偶数个数就可以得到奇数个数。

代码实现:

package 数组.练习;

import java.util.Arrays;
import java.util.Scanner;

import static sun.swing.MenuItemLayoutHelper.max;

//4.定义一个长度为10的int数组,自定义一组数据,统计数组中的总和、平均值、最大值、最小值、以及奇数和偶数的个数.
public class demo6 {
    public static void main(String[] args) {
        int[] a={3,42,52,39,18,38,57,15,18,32};
        int[] b=array(a);//创建一个新数组b,用来存放排好序的数据
        int max=0,min=0,avg=0,sum=0,odd=0,even=0;//odd:奇数,even:偶数
        int c=a.length;
        System.out.println(Arrays.toString(b));
        System.out.println("a数组的元素总和为:"+Sum(b));
        System.out.println("a数组的平均数为:"+(double)Sum(b)*1.0/b.length);
        System.out.println("a数组中最大值为:"+b[b.length-1]);
        System.out.println("a数组中最小值为:"+b[0]);
        System.out.println("a数组中奇数个数为:"+get_odd(b));
        System.out.println("a数组中偶数个数为:"+(c-get_odd(b)));
    }
//定义一个array方法,用于从小到大排序数组
    private static int[] array(int[] a) {
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a.length-1-i; j++) {
              if (a[j]>a[j+1]){
                  int temp=a[j+1];
                  a[j+1]=a[j];
                  a[j]=temp;
              }
            }
        }
        return a;
    }
    private static int Sum(int[] a){
        int num=0;
        for (int i = 0; i < a.length; i++) {
            num+=a[i];
        }
        return num;
    }
    private static int get_odd(int[] a){
        int odd_number=0;
        for (int i = 0; i < a.length; i++) {
            if (a[i]%2!=0) {
                odd_number++;
            }
        }
        return odd_number;
    }


}

运行结果:

2.其实,java中有一个sort方法,可以直接排序数组。为了节省空间,我们可以直接对旧数组进行排序,这样就减少了空间复杂度。

代码实现:

 class demo6_method2 {
        public static void main(String[] args) {
            int[] a={3,42,52,39,18,38,57,15,18,32};
            Arrays.sort(a);
            int max=0,min=0,avg=0,sum=0,odd=0,even=0;//ocdd:奇数,even:偶数
            int c=a.length;
            System.out.println(Arrays.toString(a));
            System.out.println("a数组的元素总和为:"+Sum(a));
            System.out.println("a数组的平均数为:"+(double)Sum(a)*1.0/a.length);
            System.out.println("a数组中最大值为:"+a[a.length-1]);
            System.out.println("a数组中最小值为:"+a[0]);
            System.out.println("a数组中奇数个数为:"+get_odd(a));
            System.out.println("a数组中偶数个数为:"+(c-get_odd(a)));
        }

        private static int Sum(int[] a){
            int num=0;
            for (int i = 0; i < a.length; i++) {
                num+=a[i];
            }
            return num;
        }
        private static int get_odd(int[] a){
            int odd_number=0;
            for (int i = 0; i < a.length; i++) {
                if (a[i]%2!=0) {
                    odd_number++;
                }
            }
            return odd_number;
        }
    }

运行结果:

3.通过分析可以知道,只需要遍历一遍数组,可以同时进行求数组和以及统计奇数偶数个数 ,这样可以降低时间复杂度。

代码实现:

class demo6_method3{

    public static void main(String[] args) {
//        int[] num=new int[] {64,91,96,82,94,67,91,90,83,76};
        int[] num={1,2,3,4,5};
        Arrays.sort(num);//进行排序
        System.out.println(Arrays.toString(num));
        int evensum=0,oddsum=0,sum=0,avg=0;
        for(int i=0;i<num.length ;i++) {
            sum+=num[i];
            if(num[i]%2==0)evensum++;
              else   oddsum++;
        }
        System.out.println("数组总和为:"+sum);
        System.out.println("数组平均数为:"+(double)sum*1.0/ num.length);
        System.out.println("max="+num[num.length-1]+",min="+num[0]);
        System.out.println("奇数的个数为:"+oddsum+",偶数的个数为:"+evensum);
    }

}

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值