Java 从数组列表中提取唯一值
我对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
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