Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从数组列表中提取唯一值_Java_Loops_Text Extraction - Fatal编程技术网

Java 从数组列表中提取唯一值

Java 从数组列表中提取唯一值,java,loops,text-extraction,Java,Loops,Text Extraction,我对Java编程非常陌生,我想制作一个程序,从文件中打印出一些值。我想从包含大量重复数字的文件中导入数组列表。程序应只打印一个唯一的集合编号 例如,数组包含以下数字: 0,0,0,0,2,2,2,2,2,3,3,3,5,5,5,8,8,10,2,2,2,2,3,3,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,1.89,2.56,2

我对Java编程非常陌生,我想制作一个程序,从文件中打印出一些值。我想从包含大量重复数字的文件中导入数组列表。程序应只打印一个唯一的集合编号

例如,数组包含以下数字:

0,0,0,0,2,2,2,2,2,3,3,3,5,5,5,8,8,10,2,2,2,2,3,3,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,1.89,2.56,2.56,2.56,2.56,2.56,3.13

输出应为:

0.23、1.89、2.56、3.13

有人对如何构建循环有什么建议吗


提前感谢

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

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();
}
代码

    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 
说明

    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 
在通过后,使用数组的第一个值设置current 循环。在循环内,如果当前值等于每个元素 而且flag fount是假的,这意味着没有看到副本,并且 您现在已经看到了,所以找到变量的标志 已设置为true,表示已找到或看到重复项 没什么

对于else部分,如果数组的元素不等于current 变量表示不存在重复项,右当前变量表示 包含控制台上以前看到的副本。更新 发现具有新副本的变量current,并将标志设置为false,其中 节目没有看到新的重复。继续这样做,直到最后 完成循环遍历时复制变量


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

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

publicstaticvoidmain(字符串[]args){
Set temp=newlinkedhashset(Arrays.asList(0,0,0,0,2,2,2,
3, 3, 3, 3, 3, 5, 5, 5, 5, 8, 8, 10, 10, 2, 2, 2, 3, 3, 7, 7));
系统输出打印(温度);
}

请注意,数字“2”应该只出现在列表中一次。请更正您的问题样本。

您自己尝试过什么?你能给我们一些你试过的示例代码吗?可能就是这个的重复!但是,如何修改int[]arr={}部分以从文本文件中输入数字列表,而不知道其长度?@IvnBubrov有三个选项。1.使用
ArrayList
一次或两次动态获取它。使用两个过程并计算第一个过程中的元素数,或3个。在文件中存储元素的数量。比你多得多!我真的很感谢你的解释。我不得不编辑这个问题以获取更多信息。如果数据包含浮点数而不是整数,您会更改什么?过程是相同的。只需将数组的类型更改为double,将当前变量也更改为double即可:)@IvnBubrov效果如何?它工作得很好!!!:)谢谢!现在,我将尝试学习如何从文本文件中导入数字列表,程序将完成我需要的所有操作。我不确定我是否可以在这里使用集合,因为需要在一段时间后重复数字,因此2被正确写入,并且输出应为:0,2,3,5,8,10,2,3,7