随机数获取数组,然后升序排列,获取数组中最小的五个奇数

import java.util.Arrays;
import java.util.Random;

/**
 * 1:按要求完成如下功能
 * A 定义方法public static int[] getNums(int[] arr),实现一下功能,获取arr中最小的5个奇数,
 * 并按照升序排列后,以数组的方式返回.
 * B 定义main方法,要求:
 * 1.定义一个长度为50的int数组arr,数组元素为2-199之间的随机数字,包括2和199.
 * 2.调用getNums()方法,将数组arr传入,接收返回数组,并将结果打印到控制台.
 */
public class Assign04 {
    public static void main(String[] args) {
        int[] arr = new int[50];
        int[] randomArr = randomArr(arr);
//        System.out.println(Arrays.toString(randomArr));
        System.out.println(Arrays.toString(getNums(arr)));
    }

    /**
     * 获得数组中最小的五个奇数
     * @param arr
     * @return
     */
    public static int[] getNums(int[] arr) {

        Arrays.sort(arr);
        int count_odd = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % 2 != 0) {
                count_odd++;//获取奇数数组的长度
            }
        }
        int[] Odd = new int[count_odd];
        System.out.println(Arrays.toString(arr));
        int index=0;//定义索引,不随奇数数组的索引变化而变化
        for (int j = 0; j < arr.length; j++) {
            if (arr[j]%2!=0) {
               Odd[index]=arr[j];
               index++;//当元数组元素为奇数是将他赋给奇数数组
                //然后奇数数组索引加1
            }
        }
//        for (int i = 0,j=0; i < arr.length; i++) {//将index变成j定义在循环里面也是一样的
//            if (arr[i] % 2 != 0) {
//                    Odd[j] = arr[i];
//                    j++;
//            }
//        }
//        System.out.println(Arrays.toString(Odd));
        int[] ultimate=new int[5];
        for (int i = 0; i < 5; i++) {
            ultimate[i]=Odd[i];
        }
        return ultimate;
    }

    /**
     * 获取随机数数组
     * @param arr
     * @return
     */
    public static int[] randomArr(int[] arr) {
        Random rd = new Random();

        for (int i = 0; i < arr.length; i++) {
            arr[i] = rd.nextInt(198) + 2;
        }
        return arr;
    }
}

这道题当时我做的时候,问题出现在没有将新数组和老数组的索引分开,所以获得的奇数元素无法正确的赋给新数组.后来通过同学指导,和自己摸索,定义了一个index.只有当赋值成功的时候,索引再加一,这样就不会冲突了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值