Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 如何使一个数字不产生两次?_Java_Android - Fatal编程技术网

Java 如何使一个数字不产生两次?

Java 如何使一个数字不产生两次?,java,android,Java,Android,在我的程序中,我使用一个随机生成器 Random random = new Random(); //How i use it int i = random.nextInt(numberNeeded); 问题是,我需要找到一种方法,每个数字只生成一次。所以我猜它不是完全随机的…例如…当数字1生成时,我不希望它再次被调用,而是调用其他数字中的一个…例如2,3或4…然后当调用4时,它只能调用2或3 然后下一次数字被洗牌,然后它重复这个过程 首先,请确保在应用程序首次启动时只执行一次new Rand

在我的程序中,我使用一个随机生成器

Random random = new Random();

//How i use it
int i = random.nextInt(numberNeeded);
问题是,我需要找到一种方法,每个数字只生成一次。所以我猜它不是完全随机的…例如…当数字1生成时,我不希望它再次被调用,而是调用其他数字中的一个…例如2,3或4…然后当调用4时,它只能调用2或3

然后下一次数字被洗牌,然后它重复这个过程


首先,请确保在应用程序首次启动时只执行一次
new Random()

其次,记住变量中的最后一个值,并永远循环,直到它不匹配为止

Random random = new Random();

int lastNumber = -1;

while (true)
{
  int i = random.nextInt(numberNeeded);
  if (i == lastNumber) continue;
  lastNumber = i;
  break;
}

在要从中选择的元素列表上使用它可能会容易得多:

ArrayList<Integer> numbers = new ArrayList<Integer>();
for (int i=4; i<=16; i++)
    numbers.add(i);
Collections.shuffle(numbers);
// numbers is now in a random order and contain the numbers 4 through 16
ArrayList number=new ArrayList();

对于(int i=4;i将数字4到16添加到ArrayList,然后将其与集合一起洗牌。洗牌(…)。然后按ArrayList顺序返回它们。您可以使用集合。洗牌

            //Setup your list as needed...
    final List<Integer> list = new ArrayList<Integer>(); 
    list.addAll(Arrays.asList(new Integer[] {
            1, 2, 3, 4 }));


    // Randomizes the list
    Collections.shuffle(list);

    for (Iterator<Integer> i = list.iterator(); i.hasNext();) {
        System.out.println(i.next());
                    //Removes from the list...
        i.remove();
    }
//根据需要设置您的列表。。。
最终列表=新的ArrayList();
list.addAll(Arrays.asList)(新整数[]){
1, 2, 3, 4 }));
//将列表随机化
集合。洗牌(列表);
for(迭代器i=list.Iterator();i.hasNext();){
System.out.println(i.next());
//从列表中删除。。。
i、 删除();
}

也许不是最好的方法,但最直接的方法是使用布尔数组

//create an array of boolean values set to TRUE
boolean[] isavailable = new boolean[somesize];
Arrays.fill(isavailable, Boolean.TRUE);

//Get a random number
Random r = new Random();
int myrandomnumber=r.nextInt()%25; //Im just going to use 25 for example

if (isavailable[myrandomnumber])
{
   isavailable[myrandomnumber]=false;
   //do whatever you want with the number here
}
else
{
     //Generate another random number here
}

老实说,最好将其放入一个while循环,这样,如果您在一行中生成两个以上的不可用数字,您就可以得到覆盖,但这应该给出基本思路。

那么我如何从中生成随机数?例如int=random.nextInt()@生命编码器22-第一个随机数将是
数字。get(0)
第二个数字。get(1)
,等等。如果第一次迭代的i=4,则在第一次迭代时失败。如果(i==lastNumber)返回false作为i=4,lastNumber=-1,则循环中断