随机生成1和0作为队列

时间:2016-09-17 05:51:06

标签: java random queue

我希望我的程序随机生成1和0,但它应该看起来像是在队列中。 1由一个人代表,0代表没有人。它应该像0 0 0 0 1 1 1 1 1 1一样生成随机1和0,如果该行在左边,反之亦然,如果它在右边,而不是像1 1 1 0 0 1 0 0 1 1那样。

public void randPeople(){
    int person1 = rand.nextInt((1 - 0) + 1) + 0;
    int person2 = rand.nextInt((1 - 0) + 1) + 0;
    int person3 = rand.nextInt((1 - 0) + 1) + 0;
    int person4 = rand.nextInt((1 - 0) + 1) + 0;
    int person5 = rand.nextInt((1 - 0) + 1) + 0;
    int person6 = rand.nextInt((1 - 0) + 1) + 0;
    int person7 = rand.nextInt((1 - 0) + 1) + 0;
    int person8 = rand.nextInt((1 - 0) + 1) + 0;
    int person9 = rand.nextInt((1 - 0) + 1) + 0;
    int person10 = rand.nextInt((1 - 0) + 1) + 0;

    EntryFloor1.setText(Integer.toString(person1) + " " + Integer.toString(person2) + " " + 
                           Integer.toString(person3) + " " + Integer.toString(person4) + " " + 
                           Integer.toString(person5) + " " + Integer.toString(person6) + " " + 
                           Integer.toString(person7) + " " + Integer.toString(person8) + " " + 
                           Integer.toString(person9) + " " + Integer.toString(person10));
}

3 个答案:

答案 0 :(得分:1)

实现了一个简单的随机函数来生成0和1

    int[] queue = new int[10];
    Random r = new Random();
    int rand = r.nextInt(queue.length);
    int r1 = 1 - rand % 2;
    int r2 = rand % 2;
    for (int i = 0; i < queue.length; i++) {
        if (i <= rand) {
            queue[i] = r1;
        } else {
            queue[i] = r2;
        }
    }
    System.out.println("Queue " + Arrays.toString(queue));

输出

Queue [1, 1, 1, 0, 0, 0, 0, 0, 0, 0]

使用Java8生成器

    final int size = 10;
    final Random random = new Random();
    boolean order = random.nextBoolean();
    Object[] arr = IntStream.generate(() -> random.nextInt(size) % 2).limit(size).boxed().sorted((i1, i2) -> order ? i1 - i2 : i2 - i1).toArray();
    System.out.println("Arrays " + Arrays.toString(arr));

输出

Arrays [1, 1, 1, 1, 1, 0, 0, 0, 0, 0]

答案 1 :(得分:0)

试试这个:

    Random r = new Random();

    boolean b = r.nextBoolean(); // left or right
    int l = r.nextInt(11); // breakpoint to change from 0 to 1 or other way
    System.out.println(b + " " + l);
    int person[] = new int[10];
    for (int i = 0; i < 10; i++) {
        if (b) {
            if (i < l)
                person[i] = 1;
            else
                person[i] = 0;

        } else {
            if (i < l)
                person[i] = 0;
            else
                person[i] = 1;
        }
    }
    System.out.println(Arrays.toString(person));

答案 2 :(得分:0)

我相信这会做你想要的。正如旁注 - 如果你只关心一个人是否存在,我会建议使用布尔值来表示人。因为你特意说了1和0我写了下面的代码来产生那个输出。您会注意到我确实使用了nextBoolean()类的Random方法,因为它更简单,更易于理解我正在做的事情。

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class RandPeopleMain {

    public static void main(String[] args) {
        System.out.println(lineUpLeft(10));
        System.out.println(lineUpRight(10));
    }

    public static List<Integer> lineUpLeft(int numPeople){
        Random rand = new Random();
        List<Integer> list = new ArrayList<Integer>();

        for(int i=0; i < numPeople; i++){
            boolean person = rand.nextBoolean();
            if(person){
                list.add(1);
            }
        }
        for(int i=list.size(); i < numPeople; i++){
            list.add(0);
        }

        return list;
    }

    public static List<Integer> lineUpRight(int numPeople){
        Random rand = new Random();
        List<Integer> list = new ArrayList<Integer>();

        for(int i=0; i < numPeople; i++){
            boolean person = rand.nextBoolean();
            if(person){
                list.add(1);
            }
        }
        for(int i=list.size(); i < numPeople; i++){
            list.add(0, 0);
        }
        return list;
    }

}

示例输出:

[1,1,1,1,1,1,0,0,0,0]

[0,0,0,1,1,1,1,1,1,1]

我提供了上述方法来说明左右对齐的类似方式。这是一个更通用的版本,它使用带有附加参数的单个方法来指定对齐方式。

public static List<Integer> lineUpPeople(int numPeople, boolean alignLeft){
        Random rand = new Random();
        List<Integer> list = new ArrayList<Integer>();

        for(int i=0; i < numPeople; i++){
            boolean person = rand.nextBoolean();
            if(person){
                list.add(1);
            }
        }
        for(int i=list.size(); i < numPeople; i++){
            if(alignLeft)
                list.add(0);
            else
                list.add(0,0);
        }

        return list;
    }

最后,这是解决问题的另一种方法。而不是为每个潜在的人生成随机值,只需生成人数,然后适当填写列表/队列。

public static List<Integer> lineUp(int maxPeople, boolean alignLeft){
        Random rand = new Random();
        int numPeople = rand.nextInt(maxPeople+1);
        List<Integer> list = new ArrayList<Integer>();

        for(int i=0; i < maxPeople; i++){
            if(i < numPeople)   
                list.add(1);
            else if(alignLeft)
                list.add(0);
            else
                list.add(0,0);
        }
        return list;
    }