我正在尝试编写一个程序,它将生成一个随机的十个整数数组(1到6之间的整数)然后我必须形成另一个数组,删除所有重复项。所以{1,3,5,5,3,4,2,2,2,1}应该返回{1,3,5,4,2}。 问题是我得到了答案,但输出数组在重复项所在的地方包含0,我不知道如何减少临时数组的长度(如果可能的话)。 这是我的计划。:
import java.util.*;
public class Lab9Tut12{
public static void main (String[]args){
int [] numbers = new int[10];
//int length = 10;
int[] temp = new int[length];
for(int i=0;i<10;i++){
numbers [i] = (int)(Math.random()*6+1);
System.out.print(numbers [i]);
System.out.println();
}
for(int i=1;i<10;i++){
if(numbers[i-1]!=numbers[i]){
temp[i]= numbers[i];
//length--;
}
}
System.out.println(Arrays.toString(temp));
}
}
答案 0 :(得分:7)
这样做的好方法是使用Set。这是一个只包含唯一值的结构。
Set<Integer> set = new HashSet<Integer>();
int[] array = {1,1,2,2,2,3,3,4,5,6,8};
for (int num : array) {
set.add(num);
}
System.out.println(set);
输出:
[1, 2, 3, 4, 5, 6, 8]
要将集转换为数组,您可以使用set.toArray()
。
答案 1 :(得分:3)
请改用Set
。将所有数组值放在一个集合中,然后转换回数组。
Set<Integer> numbersSet = new HashSet<>(Arrays.asList(numbers));
Integer[] uniqueNumbers = numbersSet.toArray(new Integer[0]);
Set将消除所有重复项,您无需为此做任何事情。把数字放在那里。
答案 2 :(得分:1)
您可以使用Set
存储您的唯一随机数。 Set API
Set<Integer> set = new HashSet<Integer>();
set.add(randomNumber);
...
稍后转换为列表:
List<Integer> list = new ArrayList<Integer>(set);
答案 3 :(得分:1)
尝试使用这段代码。 Set不允许你放置2个相同的对象。
import java.util.HashSet;
import java.util.Set;
public class MyClass {
public static void main(String[] args) {
int size = 10;
Set<Integer> numbers = new HashSet<Integer>();
for (int i = 0; i < size; i++) {
numbers.add((int) (Math.random() * 6 + 1));
}
System.out.println(numbers);
}
}
答案 4 :(得分:1)
使用Set
很不错,但是您会遇到问题:.toArray()
会返回Integer[]
,而不是int[]
(并且您不能拥有一个Set<int>
)。
这是一个仍然使用集合的解决方案,但不同:
public static int[] onlyUniqueElements(final int[] inputArray)
{
final Set<Integer> set = new HashSet<>();
final int[] tmp = new int[inputArray.length];
int index = 0;
for (final int i: inputArray)
if (set.add(i))
tmp[index++] = i;
return Arrays.copyOfRange(tmp, 0, index);
}