我正在尝试使用从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]);
}
}
}
答案 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);