嘿伙计我需要帮助我正在进行的这个项目,我想限制我用来循环和do / while循环的东西。我已经做了一段时间,我仍然对我正在做的事情感到困惑。这是我到目前为止所拥有的。
public class Array2
{
public static void main(String[] args)
{
int[] array1= new int[10];
int x=0;
int num=0;
do
{
for(int i=0; i<array1.length; i++)
{
int j= 2 + (int)(Math.random() * (99-1));
if(i==0)
{
array1[i]=j;
}
else
{
if(j==array1[i-1])
{
x++;
}
else
array1[i]=j;
}
System.out.println(array1[i]);
num++;
}
}while(x==0&&num<array1.length);
}
我知道这段代码不起作用,我正在寻找一个解决方案,这样当x设置为1时,它只是设置j等于不同的随机数,并再次检查它是否是重复数字。我也想知道如何检查j的重复数而不是if(j == array1 [i-1],因为它只检查前面的数组插槽。请帮忙!
编辑: 我现在的主要问题是如何检查j是否等于array1中的任何数字,现在我有if(j == array1 [i-1])但是只检查前一个槽。感谢
答案 0 :(得分:3)
如果您只是想解决主要问题以在10
和1
之间生成一系列100
个不同的数字,请使用Java 8并且不要&# 39;重新发明轮子
final Collection<Integer> intList = IntStream.rangeClosed(1, 100) // generate an infinite list of numbers between 1 and 100
.distinct() // avoid duplicates in that list
.limit(10) // take only 10 numbers from that list
.boxed() // cast them to Integer
.collect(Collectors.toList()); // collect them in a Collection<Integer>
如果它仍然是一个数组,那么添加以下行:
Integer[] intArray = intList.toArray(new Integer[intList.size()]);
<强> ADDITION 强>
如果你想要一个解决方案,它不像上面的例子那么简单,但可能更容易掌握,请考虑一下:
1:只需生成一个数字为1到100的列表,所以每个数字只有一次。
final List<Integer> baseIntegers = new ArrayList<>(100);
for (int i = 0; i < 100; i++) {
baseIntegers.add(i + 1); // to get 1 to 100
}
你应该做的第二件事就是洗牌,这样你就得到了随机的订单。
Collections.shuffle(baseIntegers);
最后一步是在你的情况10中只需要你需要的元素数量:
final int numbersToExtract = 10;
final int[] finalArray = new int[numbersToExtract];
for (int i = 0; i < numbersToExtract; i++) {
finalArray[i] = baseIntegers.get(i);
}
答案 1 :(得分:1)
对于10个非重复数字1-100的数字,我会使用Random.nextInt(int)
和LinkedHashSet
(因为它保留了插入顺序并防止重复)等等,
int[] arr = new int[10];
Random rand = new Random();
Set<Integer> set = new LinkedHashSet<>();
while (set.size() < arr.length) {
set.add(rand.nextInt(100) + 1);
}
// Copy the Set to the array.
int pos = 0;
for (Integer v : set) {
arr[pos++] = v;
}
System.out.println(Arrays.toString(arr));
修改强>
根据您的评论,首先编写一个contains
方法,将数组从左侧循环到右侧的给定索引,查找类似
private static boolean contains(int[] arr, int v, int pos) {
for (int i = 0; i < pos; i++) {
if (arr[i] == v) {
return true;
}
}
return false;
}
然后使用它确保在数组调用contains
中不再输入一次相同的值,如
int[] arr = new int[10];
Random rand = new Random();
int pos = 0;
while (pos < arr.length) {
int val = rand.nextInt(100) + 1;
if (!contains(arr, val, pos)) {
arr[pos++] = val;
}
}
答案 2 :(得分:0)
如果你正在寻找一个数组,比如1-100中的10个非重复数字就行了。