我正在尝试编写一个小程序,在数组中打印出不同的数字。例如,如果用户输入1,1,3,5,7,4,3,程序将只打印出1,3,5,7,4。
我在函数checkDuplicate
中的else if行上收到错误。
到目前为止,这是我的代码:
import javax.swing.JOptionPane;
public static void main(String[] args) {
int[] array = new int[10];
for (int i=0; i<array.length;i++) {
array[i] = Integer.parseInt(JOptionPane.showInputDialog("Please enter"
+ "an integer:"));
}
checkDuplicate (array);
}
public static int checkDuplicate(int array []) {
for (int i = 0; i < array.length; i++) {
boolean found = false;
for (int j = 0; j < i; j++)
if (array[i] == array[j]) {
found = true;
break;
}
if (!found)
System.out.println(array[i]);
}
return 1;
}
}
答案 0 :(得分:10)
最简单的方法是将所有元素添加到Set<Integer>
,然后只打印Set
的内容。
答案 1 :(得分:4)
首先,“else if
”语句不正确,因为你没有为if提供任何条件(如果你想要if,你需要写“if (condition) ...
”)。
其次,你不能在内部循环中决定,如果要打印一个值:代码的工作方式你为每个值数组写一个值数组[i] [j] 与array [i]!
不同第三:内部循环只需要从0到外部索引i-1
:对于每个元素,您只需要决定,如果它是第一次出现(即,如果在任何先前出现相同的值)索引与否)。如果是,请将其打印出来,如果没有,请忽略它。
CheckDuplicate()
的正确实施将是:
public static void checkDuplicate(int array []) {
for (int i = 0; i < array.length; i++) {
boolean found = false;
for (int j = 0; j < i; j++)
if (array[i] == array[j]) {
found = true;
break;
}
if (!found)
System.out.println(array[i]);
}
}
但是,当然,对于更大的数组,某种Set
会更有效......
编辑:当然, mmyers (请参阅评论)是正确的,因为CheckDuplicate()
没有返回任何值,它应该有返回类型void
(而不是int
)。我在上面的代码中纠正了这个......
答案 2 :(得分:3)
将它们放入按插入时间排序的集合中,然后在必要时转换回数组。
new LinkedHashSet<Integer>(array).toArray()
答案 3 :(得分:2)
尝试将所有整数抛出到Set中。副本将永远不会添加到集合中,您将留下一组唯一的整数。
答案 4 :(得分:2)
你想要的东西可以使用Java集合API来完成,但不完全是一行,因为事实收集方法适用于Object
而不是基元。 J2SE缺少将int[]
转换为Integer[]
的方法,但Apache Commons Lang library包含ArrayUtils.toObject()和ArrayUtils.toPrimitive()等有用的方法。
使用它们,从整数数组中删除重复元素的方法如下所示:
public static int[] removeDuplicates(int... array) {
Integer[] ints = ArrayUtils.toObject(array);
Set<Integer> set = new LinkedHashSet<Integer>(Arrays.asList(ints));
return ArrayUtils.toPrimitive(set.toArray(new Integer[set.size()]));
}
如果您的应用程序可能包含更多的数组/集合操作,我建议您查看该库,而不是从头开始实现。但是,如果你是为了学习目的而做的,那就去吧!
答案 5 :(得分:1)
将每个数字添加到Set实现而不是数组可能会更好。集合专门用于存储要过滤掉重复项的元素集合。
答案 6 :(得分:1)
使用其他人建议的Set或使用List兼容类。使用列表兼容类只需使用Contains方法检查它是否已存在于数组中。
答案 7 :(得分:0)
import java.util.Scanner; 公共类PrintDistinctNumbers {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int [] numberArray = createArray();
System.out.println("The number u entered are: ");
displayArray(numberArray);
getDistinctNumbers(numberArray);
}
public static int[] createArray() {
Scanner input = new Scanner(System.in);
int [] numberCollection = new int [10];
System.out.println("Enter 10 numbers");
for(int i = 0; i < numberCollection.length; i++){
numberCollection[i] = input.nextInt();
}
return numberCollection;
}
public static void displayArray(int[] numberArray) {
for(int i = 0; i < numberArray.length; i++){
System.out.print(numberArray[i]+" ");
}
}
public static void getDistinctNumbers(int[] numberArray) {
boolean isDistinct = true;
int temp = 0;
int [] distinctArrayNumbers = new int [10];
for ( int i = 0; i < numberArray.length; i++){
isDistinct = true;
temp = numberArray[i];
for( int j = 0; j < distinctArrayNumbers.length; j++){
if( numberArray[i] == distinctArrayNumbers[j] ){
isDistinct = false;
}
}
if(isDistinct){
distinctArrayNumbers[temp]=numberArray[i];
temp++;
}
}
displayDistinctArray(distinctArrayNumbers);
}
public static void displayDistinctArray(int[] distinctArrayNumbers) {
for( int i = 0; i < distinctArrayNumbers.length; i++){
if(distinctArrayNumbers[i] != 0){
System.out.println(distinctArrayNumbers[i]);
}
}
}
}