当前位置: 首页 > 知识库问答 >
问题:

用整数1-10填充数组,同时检查该整数是否已在数组中

慕朝明
2023-03-14

我正在用随机整数1-10填充数组,但是当我这样做的时候,我需要检查整数是否已经在数组中。我用整数填充数组没有问题,但是我检查重复整数的代码不能正常工作。

  package arrayPackage;
  import java.util.Arrays;
  import java.util.Random;
  public class BruteForce 
  {
//declare an integer array with 10 numbers.
int[] array = new int[10];
Random randomInt = new Random();    //random number generator


public void shuffle()
{ 
    //int prevInt=0;
    for(int i = 0; i < array.length; i++)   //for each integer in the array pick a random integer and place in array
    {
        int temp = 1 + randomInt.nextInt(array.length);
        for(int j = i; j < array.length; j++)
        {
            if(temp != array[j] && temp!= array[i])
            {
                array[i] = temp; 
            }
        }

    }
}

public void displayArray()
{
    System.out.println(Arrays.toString(array));
}

}

共有3个答案

蓝星辰
2023-03-14

这是很容易编写一个有缺陷的洗牌算法,这就是为什么存在一个良好的洗牌内置:

http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.List)

孔瑾瑜
2023-03-14

如果你的目标是拥有一个1到10的整数数组,然后将它们洗牌,那么试试以下方法:

private static int[] array = new int[10];

public static void main(String[] args){     
    // Fill the array
    for(int i = 0; i < array.length; i++)
        array[i] = i + 1;

    shuffle(array);
    System.out.println(Arrays.toString(array));
}

private static void shuffle(int[] array){
    if(array != null && array.length > 2){
        Random randomGenerator = new Random();
        for(int i = array.length - 1; i > 0; i--){
            int randomIndex = randomGenerator.nextInt(i + 1);
            // swap
            int a = array[randomIndex];
            array[randomIndex] = array[i];
            array[i] = a;
        }
    }
}

如果你的目标是拥有一个int数组,并且每次你想添加一个随机int检查,无论它是否还不存在,尝试使用这个算法获得一个带有排除项的随机int:

public int getRandomWithExclusion(Random rnd, int start, int end, int... exclude) {
    int random = start + rnd.nextInt(end - start + 1 - exclude.length);
    for (int ex : exclude) {
        if (random < ex) 
            break;

        random++;
    }
    return random;
}

有关如何使用它的信息,请参见此处的SO回答。唯一的问题是排除数组,它每次都应该改变大小,所以它只包含排除的int,而不是在创建大小为10的int数组时默认的0。否则exclude.length总是返回10,使算法毫无用处。

娄森
2023-03-14

似乎你想要一个1,2,3,。。。,10个随机分布。

以下解决方案更好,因为它只需要正好10个随机调用

int array = new int[10];

for (int i = 0; i < 10; i++)
{
  array[i] = i + 1;
}

for (int i = 0; i < 10; i++)
{
  int to = randomInt.nextInt(array.length - i) + i; // get random swap target between i and 9
  swap(array[i], array[to]); // I assume Java has swap function
}
 类似资料:
  • 到目前为止,这就是我得到的,但我不太确定接下来该怎么办。我(认为)这里发生的是,它到达数组的第一个位置,在0,0处,并生成一个数字。然后转到1,1和2,2,依此类推。我不确定该从那里开始,我相信有一种更有效的方法可以一次填充整行或整列。 此外,我的编译器不允许我像平时一样使用cout或endl?它坚持我使用std::cout,我只是想知道为什么。

  • @PeterLawrey我稍微调整了代码如下,因为我只需要洗牌,这是一个享受,我会弹出卡片的堆栈来处理 感谢彼得和所有其他贡献者。M.

  • 问题内容: 如何检查Java整数是否为另一个数字的倍数?例如,if 是4的倍数。 问题答案: 使用余数运算符(也称为模运算符),该运算符返回除法的余数,并检查其是否为零:

  • 问题内容: 我有一个数组,其中填充了6个随机生成的数字。首先,它生成一个介于1和49之间的随机数,然后将其与数组中的数字进行比较。如果发现重复,则应再次生成一个随机数,然后再次执行检查。如果没有重复项,则将数字添加到数组中。 这是代码: 但是,由于某种原因,它仍然允许重复,尽管很少(大约50个数组中的1个),例如。但是,当我尝试通过取出随机数元素并使用30这样的数字来重复此操作时,我无法重现结果。

  • 我必须用奇数的范围(这里是)填充数组:1,3,5,7,9...但我总是在每个奇数之间有一个0,我不明白为什么。 注:注释中大写字母下的代码是由我们的教授给出的... 输出:

  • 这可能吗?如果可能,我该如何正确地做到这一点?希望能够检查它是否包含1和2,如果是,继续与程序。