我有一个数据文件名称Test_1.txt。该数据文件由12行和3列组成。最左的列称为ID列。该ID具有冗余ID。我想编写一个Java程序来删除该多余的ID。
如果一个Id第一次遇到,那么第二个同一个Id不会被接受。
我的数据文件看起来像这样
86.0 1.2356 -0.6325
86.0 0.2356 0.86982
25.0 1.0512 0.97852
30.0 2.6581 2.25147
86.0 2.3412 1.23456
18.0 -0.2358 1.5689
90.0 3.5687 -0.8974
88.0 1.9852 -0.1478
30.0 1.2365 -0.2356
70.0 2.0789 -1.2564
87.0 9.2547 1.1120
55.0 -4.1254 1.3611
所以根据我的问题ID:86和30是多余的。
我为此写下了一个Java代码:
import Jama.Matrix;
import java.io.*;
import java.util.Scanner;
public class Redundant {
public static void main(String args[])throws IOException{
Scanner x= new Scanner(new File("D:\\Test_1.txt"));
Matrix A=new Matrix(3,1);
double a=0.0,b=0.0,c=0.0;
while(x.hasNext()) {
a = x.nextDouble();//Here it can read the ID value perfectly
b = x.nextDouble();
c = x.nextDouble();
A=new Matrix(new double[][]{{a},{b},{c}});//This is Jama Matrix where I store those values. But I want to store ID 86 only one time first time it can encounter 86. Same is true for ID No:30
A.print(9,6);
}
}
}
那应该采取什么方法来消除冗余?
Java中是否有任何数据结构可以在一天内消除它?
先谢谢您。
答案 0 :(得分:0)
您可以使用Set<Double>
来存储以前见过的a
值来解决此问题:
Set<Double> set = new HashSet<>();
然后,在您的循环中:
a = x.nextDouble();
b = x.nextDouble();
c = x.nextDouble();
if (set.add(a)) {
A=new Matrix(new double[][]{{a},{b},{c}});
A.print(9,6)
}
之所以可行,是因为set.add
仅在该值先前不在集合中时才返回true。
请注意,在此处使用JAMA是非常多余的。只需使用System.out.format
。