Java 如何从阵列中删除重复项?

Java 如何从阵列中删除重复项?,java,arrays,duplicates,Java,Arrays,Duplicates,我试图使其成为这样,在方法中,随着填充数组的增加,它会检查上面的索引值是否相同。然而,我不知道如何在不逐个检查每个索引的情况下做到这一点,这使得它效率非常低。我试着做一个for循环,其中I值为0,增加1,在for循环内是另一个for循环,b值为1,也增加1。在第二个for循环中,我有一个if语句,如果I索引等于b索引,则I索引将再次重新评估 public class CH7Ass { public static void main(String[] args) { in

我试图使其成为这样,在方法中,随着填充数组的增加,它会检查上面的索引值是否相同。然而,我不知道如何在不逐个检查每个索引的情况下做到这一点,这使得它效率非常低。我试着做一个for循环,其中I值为0,增加1,在for循环内是另一个for循环,b值为1,也增加1。在第二个for循环中,我有一个if语句,如果I索引等于b索引,则I索引将再次重新评估

public class CH7Ass {

    public static void main(String[] args) {
        int user;
        int[] array;
        int checkUserNum;
        int tries=0;
        System.out.println("I bet you can't guess my six numbers");     
        array=populate();
        do{
            tries++;
            user=getUserNum();
            checkUserNum=checkUserNum(user,array);
            array=removeFromArray(array,checkUserNum);
        }while(tries<6);
    }

    public static int[] populate(){
        int[] populate;
        populate= new int [6];
        int random;

        for(int i=0;i<populate.length;i++){
            random=(int) ((Math.random())*50);      //goes from 0-49
            populate[i]=random;
            System.out.println(populate[i]);
            for(int b=1;b<populate.length;b++){
                if(populate[b]==populate[i]){
                    populate[i]=random;
                }
            }
        }
        return  populate;
    }


    public static int getUserNum(){
        int getUserNum;

        do{
            System.out.println("Please input a number from 1 to 49:");
            getUserNum=TextIO.getInt();
        }while((getUserNum<1)||(getUserNum>49));

        return getUserNum;
    }

    public static int checkUserNum(int getUserNum,int[] array){
        boolean check=false;
        int checkUserNum = 0;
        for(int i=0;i<array.length;i++){
            if(array[i]==getUserNum){
                check=true;
                System.out.println("You got it");
                checkUserNum=i;
            }
        }
        if(check==false){
            checkUserNum=-1;
            System.out.println(checkUserNum);
        }

        return checkUserNum;
    }


    private static int[] removeFromArray(int[] array,int checkUserNum){
        int[] removeFromArray;
        if(checkUserNum!=-1){
            array[checkUserNum]=0;
            removeFromArray=array[checkUserNum];
        }
        return removeFromArray;
    }
}
公共类CH7Ass{
公共静态void main(字符串[]args){
int用户;
int[]数组;
int checkUserNum;
int=0;
System.out.println(“我打赌你猜不出我的六个数字”);
数组=填充();
做{
尝试++;
user=getUserNum();
checkUserNum=checkUserNum(用户,数组);
array=removeFromArray(array,checkUserNum);

}虽然(尝试我绝对不是算法专家,但我认为一个简单且易于实现的修改可以是以下内容


在算法的每次迭代中,您可以在
b=1
处启动内环,而不是在
b=i+1
处启动内环。这将产生一个等效的结果,因为如果您在外环的索引i处,您已经将所有小于i的索引与数组的其余部分进行了比较。

您可以通过设置这样做me最小最大值随着for循环的工作而增加。这样,您可以为随机数设置边界,并强制它们位于不同的边界内

public static int[] populate(){
   int[] populate = new int [6];
   int random = 0;
   double maximum = 0.0;
   for(int i=0;i<populate.length;i++){
      maximum += ( 50 / 6 ); 
      random =   ( Math.random()  *  (  maximum  - (8 * i )  ) +  (8 * i ) ) ;      
      populate[i] = random;
   }
   return  populate;
}
publicstaticint[]populate(){
int[]填充=新int[6];
int随机=0;
双倍最大值=0.0;

对于(int i=0;i考虑重写您的描述。如果random==populate[b]==populate[i]?我将重新考虑您使用数组的方式。提示:想想hashtable数据结构。在populate()中,内部for循环完全不起作用。populate[i]在循环之前已被随机分配。我猜您是错分配了。@dbustosp我只编写了大约6个月的代码,所以我不知道这是什么,但我仍然感谢您的评论。@Shiping重新分配不意味着如果填充[b]等于填充[I],它将被重新分配另一个随机值吗好吧,假设我们有{1,2,2,4,6,7}如果索引[1]被随机分配到1,4,6,7中的任何一个,会怎么样?我已经在这个问题上停留了一段时间,每当我认为我有它时,我就会再次跌入困境。