从arraylist中提取唯一值

时间:2014-09-22 00:39:47

标签: java loops text-extraction

我在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

如果数组不包含整数,则需要相同的但是浮点数:

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

有没有人建议如何构建循环?

提前致谢

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

<强>代码

    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循环,如果当前值等于每个元素   并且标志fount是false,表示没有看到副本   你现在已经看到了,所以发现变量的旗帜有   已设置为true,表示已找到或看到重复   没有。

     

对于else部分,如果数组元素不等于current   变量意味着没有重复,而右边是当前变量   包含之前在控制台看到的副本。更新   变量当前有新的重复和设置标志被发现为false   节目没见过新见过的重复。继续这样做,最后一次   完成遍历循环后重复变量。

答案 2 :(得分:0)

最简单的解决方案是创建临时的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);
}

请注意号码&#34; 2&#34;应该只在列表中一次。请更正您的问题样本。