从数组列表中提取唯一值
我对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
有没有人一些建议,我应该如何构建循环?
在此先感谢
代码:
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 什么都没有。
对于其他部分,如果数组的元素不等于当前的 变量意味着没有重复,并且右边的当前变量 包含之前在控制台上看到的副本。更新 可变电流与新的复制和设置标志发现错误哪些 显示没有看到新的看到重复。继续这样做,直到完成遍历循环后,重复变量 。
比你非常!我非常感谢你的解释。我必须编辑问题以获取更多信息。如果数据包含浮点数而不是整数,您会改变什么? – 2014-09-22 01:11:29
的过程是一样的。只需要将数组的类型更改为double并将当前变量加倍即可:) – 2014-09-22 01:12:54
@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
正是这样!但是,如何修改int [] arr = {}部分以输入文本文件中的数字列表,而不必知道它的长度? – 2014-09-22 00:48:50
@IvnBubrov三个选项。 1.使用'ArrayList
非常感谢!我会尽力以三种方式完成它。 – 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” 应该是在列表中只有一次。请更正您的问题示例。
我不知道我可以在这里使用集合,因为需要一段时间后重复的数字,所以2被正确写入,并且输出应该是:0,2,3,5,8,10,2, 3,7 – 2014-09-22 15:23:44
你有什么试过自己?你能给我们一些你已经尝试过的示例代码吗? – 2014-09-22 00:42:29
[重复数组中的元素比较]可能的重复(http://*.com/questions/1011344/compare-elements-in-an-array-for-duplicates) – 2014-09-22 14:03:29