使用随机值创建数组

时间:2014-10-13 18:42:13

标签: java arrays random

我正在尝试使用从0到6的随机int值填充数组。为了控制我的代码,我打印出我生成的随机值。我尝试在for循环中的嵌套if语句中排除重复项,但是当我运行代码时,我得到了七个值,但其中一些仍然是重复的。有人可以帮帮我吗? 这是我的代码:

import java.util.Random;
public class TesterArrayer 
{
    public static void main(String[] args) 
    {
        int size = 7;
        Random randomNumber = new Random();
        int randomArray[] = new int[size];

        for(int x =0; x < size; x++)
        {                                               
            int randomValue = randomNumber.nextInt(6);
            if (randomValue != randomArray[x])
            {
                randomArray[x] = randomValue;
            }

        }//End for-loop

        for (int y = 0; y < size; y++)
        {
            System.out.println(randomArray[y]);
        }
    }
}

5 个答案:

答案 0 :(得分:1)

public static void main(String[] args) {
        int size = 7;
        boolean add = true;
        int counter = 0;
        Random randomNumber = new Random();
        int randomArray[] = new int[size];
        for(int j = 0; j < size; j++)
        {
            randomArray[j] = -1;
        }
        while (counter < size) {
            add = true;
            int randomValue = randomNumber.nextInt(7);
            for (int x = 0; x < size; x++) {
                if (randomValue == randomArray[x]) {
                    add = false;
                }
            }// End for-loop
            if(add)
            {
                randomArray[counter] = randomValue;
                counter++;
            }
        }

        for (int y = 0; y < size; y++) {
            System.out.println(randomArray[y]);
        }
    }

尝试这样的事情。您不想添加号码,除非它不在列表中。同样对于你的随机你需要7而不是6如果你想要0-6。

此代码将使用0-6填充数组,不重复任何数字。

答案 1 :(得分:0)

如果您只想以随机顺序输入数字0..length-1,您可以执行以下操作:

    int length = 7;
    List<Integer> list = new ArrayList<>(length);
    for(int i=0; i<length; i++){
        list.add(Integer.valueOf(i));
    }
    //list is now in order, need to randomly shuffle it
    Collections.shuffle(list);
    //now list is shuffled, convert to array        

    int array[] = new int[length];
    for(int i=0; i<length; i++){
        array[i] = list.get(i);
    }

答案 2 :(得分:0)

更改 minLimit maxLimit noOfItems 以获取随机数

public class RandomIntegers
{
    public static final Random random = new Random();
    public static final int maxLimit = 6;
    public static final int minLimit = 0;
    public static final int noOfItems = 7;
    public static void main( String[] args )
    {
        Set<Integer> uniqueRandomIntegerSet = new HashSet< Integer >(); 
        
        while(uniqueRandomIntegerSet.size() < noOfItems)
            uniqueRandomIntegerSet.add( random.nextInt( maxLimit - minLimit + 1 ) + minLimit );  
        
        Integer[] randomUniqueIntegers = uniqueRandomIntegerSet.toArray( new Integer[0] );
    }
}

答案 3 :(得分:0)

正如您应该为此方法使用更优化的数据结构,如其他答案和注释中所述,您仍然可以使用数组来完成此操作。由于您已经定义了问题,因此您需要将int randomValue = randomNumber.nextInt(6);更改为int randomValue = randomNumber.nextInt(7);,否则这将无限循环,因为没有可能的方法在只有6个值的7号数组中没有重复项。

您可以执行以下操作来修改代码以使其正常工作:

boolean flag = false;

for(int x = 0; x < size; x++)
{                                               
    int randomValue = randomNumber.nextInt(7);

    for (int i = 0; i < x; i++)
    {            
        if (randomValue == randomArray[i])
        {
            //randomArray[x] = randomValue;
            flag = true;
            x--;
        }
    }
    if (!flag)
        randomArray[x] = randomValue;

    flag = false;

}//End for-loop

此代码只是在它看到数组中的重复值时标记,并且会跳过此值并decrement x值,这样它将为数组中的这个点创建另一个随机值

答案 4 :(得分:-2)

byte[] source = new byte[1024];

Random rand = new Random();
rand.nextBytes(source);