在数组中打印不同的整数

我正在尝试编写一个小程序,在数组中打印出不同的数字。 例如,如果用户输入1,1,3,5,7,4,3,程序将只打印1,3,5,7,4。

我在函数checkDuplicate的else上遇到错误。

到目前为止,这是我的代码:

 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; } } 

首先,“ else if ”语句是不正确的,因为你没有为if提供任何条件(如果你想要if,你需要写“ if (condition) ... ”)。

其次,你不能在内循环决定是否应该打印一个值:代码的工作方式你为每个值数组[j]写一个值数组[i ] ,它不同于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]); } } 

但是当然,对于更大的arrays来说,某种Set会更有效...


编辑:当然, mmyers (参见注释)是正确的,因为CheckDuplicate()不返回任何值,它应该返回类型void (而不是int )。 我在上面的代码中纠正了这一点......

最简单的方法是将所有元素添加到Set ,然后只打印Set的内容。

将它们放入按插入时间排序的集合中,然后在必要时转换回数组。

 new LinkedHashSet(array).toArray() 

尝试将所有整数抛出到Set中。 副本将永远不会添加到集合中,您将留下一组唯一的整数。

您想要的是使用Java集合API实现的,但不完全是单行,因为事实收集方法适用于Object而不是基元。 J2SE缺少将int[]转换为Integer[] ,但Apache Commons Lang 库包含有用的方法,如ArrayUtils.toObject()和ArrayUtils.toPrimitive() 。

使用它们,从整数数组中删除重复元素的方法如下所示:

 public static int[] removeDuplicates(int... array) { Integer[] ints = ArrayUtils.toObject(array); Set set = new LinkedHashSet(Arrays.asList(ints)); return ArrayUtils.toPrimitive(set.toArray(new Integer[set.size()])); } 

如果您的应用程序可能包含更多的数组/集合操作,我建议您查看该库,而不是从头开始实现。 但是,如果你是为了学习目的而做的,那就去吧!

将每个数字添加到Set实现而不是数组可能会更好。 集合专门用于存储要过滤掉重复项的元素集合。

要么像其他人建议的那样使用Set,要么使用List兼容类。 使用列表兼容类只需使用Contains方法检查它是否已存在于数组中。

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]); } } } 

}