从数组列表中提取唯一值

问题描述:

我对Java编程非常新颖,我想创建一个将从文件中打印出一些值的程序。我想从包含大量重复数字的文件中导入数组列表。该程序应该只打印出一组唯一的数字。从数组列表中提取唯一值

例如,数组包含这些数字:

0,0,0,0,2,2,2,2,2,3,3,3,3,3,5,5,5,5,8,8,10,10,2,2,2,3,3,7,7

什么,我应该把它弄出来是这样的:

0,2,3,5,8,10,2,3,7 

同样将需要如果阵列WASN” t包含整数,但浮点数:

0.23, 0.23, 0.23, 0.23, 1.89, 1.89, 1.89, 1.89, 1.89, 2.56, 2.56, 2.56, 2.56, 2.56, 3.13, 3.13

输出应该是:

0.23, 1.89, 2.56, 3.13

有没有人一些建议,我应该如何构建循环?

在此先感谢

+2

你有什么试过自己?你能给我们一些你已经尝试过的示例代码吗? – 2014-09-22 00:42:29

+0

[重复数组中的元素比较]可能的重复(http://*.com/questions/1011344/compare-elements-in-an-array-for-duplicates) – 2014-09-22 14:03:29

代码

int[] input = new int[]{0, 0, 0, 0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 5, 5, 5, 5, 8, 8, 10, 10, 2, 2, 2, 3, 3, 7, 7}; 
    int current = input[0]; 
    boolean found = false; 

    for (int i = 1; i < input.length; i++) { 
     if (current == input[i] && !found) { 
      found = true; 
     } else if (current != input[i]) { 
      System.out.print(" " + current); 
      current = input[i]; 
      found = false; 
     } 
    } 
    System.out.print(" " + current); 

输出

0 2 3 5 8 10 2 3 

说明

之后你设定的电流与数组的第一个值,你通过 去loop.Inside循环,如果相等元素 和标志源泉当前值为false这意味着复制一直没有看到,你现在已经看到了 ,所以发现变量的标志已经被设置为true,这表明已经找到了重复或者看到了一个do 什么都没有。

对于其他部分,如果数组的元素不等于当前的 变量意味着没有重复,并且右边的当前变量 包含之前在控制台上看到的副本。更新 可变电流与新的复制和设置标志发现错误哪些 显示没有看到新的看到重复。继续这样做,直到完成遍历循环后,重复变量 。

+0

比你非常!我非常感谢你的解释。我必须编辑问题以获取更多信息。如果数据包含浮点数而不是整数,您会改变什么? – 2014-09-22 01:11:29

+0

的过程是一样的。只需要将数组的类型更改为double并将当前变量加倍即可:) – 2014-09-22 01:12:54

+0

@IvnBubrov它怎么样? – 2014-09-22 01:27:24

好像要防止非连续重复。我首先将一个变量设置为数组中的第一个值,输出该值,然后迭代该数组,直到遇到新的唯一值。我会输出一个逗号和新值(将其存储在值变量中),然后继续循环(直到我到达数组的末尾)。也就是说,像 -

public static void main(String[] args) { 
    int[] arr = { 0, 0, 0, 0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 5, 5, 5, 5, 8, 
      8, 10, 10, 2, 2, 2, 3, 3, 7, 7 }; 
    int v = arr[0]; 
    System.out.print(v); 
    for (int i = 1; i < arr.length; i++) { 
     if (arr[i] != v) { 
      v = arr[i]; 
      System.out.printf(", %d", v); 
     } 
    } 
    System.out.println(); 
} 

输出是请求

0, 2, 3, 5, 8, 10, 2, 3, 7 
+0

正是这样!但是,如何修改int [] arr = {}部分以输入文本文件中的数字列表,而不必知道它的长度? – 2014-09-22 00:48:50

+0

@IvnBubrov三个选项。 1.使用'ArrayList '动态获取它,或者2.使用两遍并计算第一遍中元素的数量,或者3.在文件中存储元素的数量。 – 2014-09-22 00:50:36

+0

非常感谢!我会尽力以三种方式完成它。 – 2014-09-22 00:52:16

最简单的解决方案是创建临时LinkedHashSet并将所有值放在那里。

import java.util.Arrays; 
import java.util.LinkedHashSet; 
import java.util.Set; 

...

public static void main(String[] args) { 
    Set<Integer> temp = new LinkedHashSet<Integer>(Arrays.asList(0, 0, 0, 0, 2, 2, 2, 2, 2, 
     3, 3, 3, 3, 3, 5, 5, 5, 5, 8, 8, 10, 10, 2, 2, 2, 3, 3, 7, 7)); 
    System.out.print(temp); 
} 

请注意,数字 “2” 应该是在列表中只有一次。请更正您的问题示例。

+1

我不知道我可以在这里使用集合,因为需要一段时间后重复的数字,所以2被正确写入,并且输出应该是:0,2,3,5,8,10,2, 3,7 – 2014-09-22 15:23:44