java练习,求帮助

java练习,遇到了问题,求指教
问题应该在13行和14行。


package 作业;

import java.util.Random;

public class price {
    public static void main(String[] args) {
        int arr[]={1,10,300,1000,2000};//设立一个数组,求元素随机的排列
        int arr1[]=new int[5];
        Random r=new Random();//随机数作为索引
        int m=0;
        for (int i = 0; i < arr1.length;) {//这里循环是判断抽的数是否重复
           m=r.nextInt(arr.length);
             arr1[i]=arr[m];//如果把这行改成int price=arr[m]下一行改为judge(arr1,price)就没有问题
           if(!judge(arr1,arr1[i])){//
               arr1[i]=arr[m];
               i++;
           }
        }
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]+" ");
        }
    }
    public static boolean judge(int arr1[],int price){//这个方法是用于判断抽的数是否重复。
        for (int i = 0; i < arr1.length; i++) {
            if(arr1[i]==price){
                return true;
            }
            }
        return false;
        }

    }
//最终idea会让你一直输入,无法得到想要的打印结果。


你在14行还没判断重复呢,就先放入了arr1中。
而你的15行是判断数组arr1中有没有重复存在刚刚放入的arr1[m],如果不重复,才进入if中,才执行i++
因为你第一次放入的肯定不重复,所以他就一直不会i++,这肯定无限死循环了,一直卡在了12行的for循环中了
修改如下后能正确运行



for (int i = 0; i < arr1.length;) {
            //随机生成一个数组下表
            m = r.nextInt(arr.length);
            //直接判断随机取得数是否再目标数组中重复了
            if (!judge(arr1, arr[m])) {
                //如果不重复,才放入,并执行i++;
                arr1[i] = arr[m];
                i++;
            }
        }