Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用for循环从数组中删除重复项_Java_Arrays_Random - Fatal编程技术网

Java 如何使用for循环从数组中删除重复项

Java 如何使用for循环从数组中删除重复项,java,arrays,random,Java,Arrays,Random,在这段代码中,我从一个数组中找到了重复项,我想删除它们。然后,输出将是唯一生成的数字。我被要求使用math.random和modulo。有人有线索吗?我试图将它们存储在一个数组中,但是原始数组有0,并且0是随机数生成(从0到52)的域的一部分 公共类组{ 公共静态void main(字符串[]args){ 生成(); } 公共静态void generate(){ int deckOfCard[]=新int[52]; 用于(整数计数=0;计数

在这段代码中,我从一个数组中找到了重复项,我想删除它们。然后,输出将是唯一生成的数字。我被要求使用math.random和modulo。有人有线索吗?我试图将它们存储在一个数组中,但是原始数组有0,并且0是随机数生成(从0到52)的域的一部分

公共类组{
公共静态void main(字符串[]args){
生成();
}
公共静态void generate(){
int deckOfCard[]=新int[52];
用于(整数计数=0;计数<52;计数++){
deckOfCard[counts]=(int)(Math.random()*51);
}
for(int i=0;i
为什么不尝试使用HashSet而不是数组?正如您所知,集合只存储唯一的值,这样您就不会有任何重复。

您必须在生成随机数的过程中验证生成的数字,如下所示:

import java.util.Random;
public class Decks {
    public static void main(String[] args) {

        Random myRandom = new Random();

        int[] num = new int[53];

        boolean[] check = new boolean[53];
        int all = 0;
        int ranNum;

        while (all < 53) {
            ranNum = myRandom.nextInt(53);
            if (!check[ranNum]) {
                check[ranNum] = true;
                num[all] = ranNum;
                all++;
            }
        }
        for (int i = 0; i < 53; i++) {
            System.out.println(num[i]);
        }
    }
}
import java.util.Random;
公务舱甲板{
公共静态void main(字符串[]args){
Random myRandom=新的Random();
int[]num=新的int[53];
布尔[]检查=新布尔[53];
int all=0;
int ranNum;
而(全部<53){
ranNum=myRandom.nextInt(53);
如果(!检查[ranNum]){
检查[ranNum]=true;
num[所有]=ranNum;
全部++;
}
}
对于(int i=0;i<53;i++){
System.out.println(num[i]);
}
}
}

我建议不要包含数字
0
,因为它不存在于真正的一副牌中(ACE是数字值为1的最低值).我之所以将其包括在这里,是因为据我所知,
0
包含在您所需的输出中。

考虑到时间复杂性,您可以先对它们进行排序,最好是等待登录时间,然后使用O(1)查找重复的元素。

您可以使用列表,也可以使用负数表示“已删除”的元素你的目标是:先生成52个数字,然后删除重复的数字?或者,精确生成52个唯一的数字?我的目标是精确生成52个唯一的数字,但我必须使用math.random和modules来创建它们并将它们存储在数组中。好建议,但我必须遵循我愚蠢的courses对此赋值的指导方针完全没有效率。我绑定到数组并使用模…在这种情况下,您可以创建一个大小为52的新数组Uniquelem,并将所有索引初始化为-1。现在,对于deckOfCard[I]中的每个元素,将元素存储在中,以便
Uniquelem[deckOfCard[I]=deckOfCard[I]
因此,您的Uniquelem将看起来像:{-1,-1,-1,…-1,-1}更新Uniquelem后,它将看起来像:{-1,-1,2,-1,…-1,51}谢谢,经过几个小时的尝试,这仍然是最好的方法。很高兴它对您有所帮助。请选择此作为答案
import java.util.Random;
public class Decks {
    public static void main(String[] args) {

        Random myRandom = new Random();

        int[] num = new int[53];

        boolean[] check = new boolean[53];
        int all = 0;
        int ranNum;

        while (all < 53) {
            ranNum = myRandom.nextInt(53);
            if (!check[ranNum]) {
                check[ranNum] = true;
                num[all] = ranNum;
                all++;
            }
        }
        for (int i = 0; i < 53; i++) {
            System.out.println(num[i]);
        }
    }
}