我正在尝试用Java生成一个5位数的int
数组,并且无法从哪里开始。数组中的数字都不能重复。我可以为它生成随机数,但是无法弄清楚如何将数字相互比较并替换任何重复项。
答案 0 :(得分:10)
您可以使用java.util.Set而不是数组,因为它保证只有唯一元素。
答案 1 :(得分:4)
如果我理解正确,你想要一个随机的5位数字,没有数字重复?
如果是这样,一种方法是随机抽取数字0-9的列表,然后选择前5个元素。
修改强>
Integer[] digits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Random random = new Random();
public Integer[] generateId() {
List<Integer> id = Arrays.asList(digits);
Collections.shuffle(id, random);
return id.subList(0, 5).toArray(new Integer[0]);
}
答案 2 :(得分:2)
您可以通过将数组转换为TreeSet(也将对它们进行排序)来删除重复项:
int numbers[] { 4 5 7 6 5 7 5 89 847 7 94 093 02 10 11 10 11 };
TreeSet set new TreeSet(Arrays.asList(numbers));
for (int no : set)
System.out.println(no);
答案 3 :(得分:2)
这会以O(数字位数)生成它,没有内部循环,没有洗牌&lt; - 如果选择的数量变得非常大,这可能会很昂贵
int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Random random = new Random();
int[] generateId() {
int[] choices = digits.clone();
int[] id = new int[5];
for (int i = 0; i < 5; i++) {
// one less choice to choose from each time
int index = random.nextInt(choices.length - i);
id[i] = choices[index];
// "remove" used item by replacing it with item at end of range
// because that index at the end won't be considered in next round
choices[index] = choices[choices.length - i - 1];
}
return id;
}
答案 4 :(得分:1)
试试这个:
int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Random random = new Random();
int[] generateId() {
int[] clone = digits.clone();
int[] id = new int[5];
for (int i = 0; i < 5; i++) {
int candidate;
do {
candidate = random.nextInt(10);
} while (clone[candidate] == -1);
id[i] = clone[candidate];
clone[candidate] = -1;
}
return id;
}
答案 5 :(得分:1)
作为替代方案,只需对数组进行排序并迭代它。
List<int> myList = new List<int>() { 1, 1, 2, 3, 4, 5, 5, 7 , 1, 7};
myList.Sort();
for (int i = myList.Count - 1; i > 0; i--)
{
if (myList[i] == myList[i - 1])
myList.RemoveAt(i);
}
但当然最好不要重复开始。
答案 6 :(得分:0)
首先,我要感谢所有人的帮助,我真的很感激。
我让这个程序以我想要的方式工作,但似乎应该有一个更简单的方法。这就是我做的。任何更多的评论都会很棒。
do
{
for (int i = 0; i < 5; i++)
{
iNumber = generator.nextInt(9) + 1;
numbers[i] = iNumber;
}
}
while(numbers[0] == numbers[1] || numbers[0] == numbers[2] || numbers[0] == numbers[3] || numbers[0] == numbers[4] || numbers[1] == numbers[2] || numbers[1] == numbers[3] || numbers[1] == numbers[4] || numbers[2] == numbers[3] || numbers[2] == numbers[4] || numbers[3] == numbers[4]);
答案 7 :(得分:0)
/**
* findDuplicate method return map where key is unique no and value as the
* repitation
*
* @param a
* : arrays of Objects
* @return map
*/
public Map findDuplicate(T[] a) {
Map<T, Integer> map = new HashMap<T, Integer>();
Set<T> unique = new HashSet<T>(Arrays.asList(a));
int count = 0;
for (T integer : unique) {
for (T integer1 : a) {
if (integer == integer1) {
++count;
}
}
map.put(integer, count);
count = 0;
}
return map;
}