关于如何将一个一维数组的内容存放到另外一个一维数组中

本文讨论了如何在Java中使用随机数和不同的数据结构(数组、哈希集合和while循环)来避免数组元素重复,作者分享了解决数组去重问题的过程和心得。
摘要由CSDN通过智能技术生成

这个对于多数人来说是一个非常简单的问题,但是一稍稍的不注意,这个问题可就不是这么简单了,就我而言这个问题我整整思考了一天才发现的漏洞,期间问过kimi,找过gtp都是无功而返,最后突然想到解决办法。

话不多说先上代码

 public static void main(String[] args) {
        //创建一个随机数
        Random sc =new Random();
        //创建两个数组分别存放
        int [] arr ={1,2,3,4,5,6};
        int [] arr1= new int[arr.length];
        for (int i = 0; i <arr.length;) {
            int c =sc.nextInt(arr.length);
             // 定义一个变量来存放数组随机数
            int price = arr[c];
            //利用循环把price和新数组中的每一个数进行比较
            boolean flag= false;              // 如果此处为flag =true
            for (int i1 = 0; i1 < arr.length; i1++) {
                if(price==arr1[i1]){
                    flag =true;               // flag = false  ,不存在flag仍为false
                }
            }
            //如果flag 变为true 说明arr1数值中已经存在了price需要换一个
            if(!flag){                        //!flag  ,为!true 则为flase,因此此if语句一直并未执行
                arr1[i]= price;
                i++;
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr1[i]);
        }
    }

或者利用哈希来完美解决

     public static void main(String[] args) {
            int[] tempArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
            Set<Integer> usedValues = new HashSet<>(); // 使用HashSet来存储已选取的值
            int[] newTempArr = new int[tempArr.length];
            Random rand = new Random();
            for (int i = 0; i < newTempArr.length; i++) {
                int price;
                do {
                    price = tempArr[rand.nextInt(tempArr.length)];
                } while (usedValues.contains(price)); // 如果已选取过,重新生成

                newTempArr[i] = price;
                usedValues.add(price); // 将已选取的值加入HashSet
            }

            for (int i1 = 0; i1 < newTempArr.length; i1++) {
                System.out.println(newTempArr[i1]);
            }
        }
    }

以及使用while循环

    public static void main(String[] args) {
        int[] tempArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
        //创建一个新的数组来存储打乱顺序后的数据
        int[] newTempArr = new int[tempArr.length];
        //创建一个随机数,使得随机数的范围在数组tempArr中
        Random rand = new Random();
        int i =0;
        while (true) {
            int random = rand.nextInt(tempArr.length);
            //使tempArr数组中的随机一个值赋值给price
            int price = tempArr[random];
            //创建方法如果price在newTempArr数组中那么需要重新获取随机数
            boolean flag = check(price,newTempArr);
            if(!flag){
               continue;
            }
            else {
                //如果price不存在于newTempArr数组中
                newTempArr[i] = price;
                i++;
                if (i == newTempArr.length - 1) {
                    break;
                }
            }
            }
        for (int i1 = 0; i1 < newTempArr.length; i1++) {
            System.out.println(newTempArr[i1]);
        }
        }
    public static boolean check(int price, int[] newTempArr) {
            for (int i = 0; i < newTempArr.length; i++) {
                if (price == newTempArr[i]) {
                    return false;
                }
            }
        return true;
    }
}

实不相瞒,本人便是卡在了while循环里面时对boolean的判断之中导致今日郁郁不得志,整天思考此件事,最终获解真是如释重负,个人建议不会的代码不会的逻辑,就要死磕,必须整明白的,不然会特别难受,好了去吃火锅了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值