java - 使用扫描仪添加两个文件中的值不起作用

标签 java arrays file while-loop java.util.scanner

我有两个数据文件,Text1_txtText2_txt。这些文件的结构和数据如下。

Text_1.txt:

86.0    1.2356    -0.6325

25.0    1.0512  0.97852

30.0    2.6581  2.25147

18.0    -0.2358 1.5689

90.0    3.5687  -0.8974

88.0    1.9852  -0.1478

70.0    2.0789  -1.2564

87.0    9.2547  1.1120

55.0    -4.1254 1.3611

左侧列是此数据文件中的重要列。假设这是一个身份证号码。在我的程序中,我根据此列创建搜索。

现在是第二个文件 Text_2.txt 的数据:

3.57323240   -3.33283870     2.34080000 

3.57322470   -3.33283680     2.34070000 

3.57323800   -3.33286720     2.34080000 

3.57324670   -3.33288070     2.34080000 

3.57323740   -3.33292520     2.34100000 

3.57322660   -3.33292540     2.34110000 

3.57318870   -3.33289200     2.34110000 

3.57319510   -3.33287860     2.34110000 

3.57327090   -3.33284380     2.34070000 

这两个文件之间的主要相似之处在于它们具有相同数量的列和行。我的程序是添加这两个文件的值。添加取决于关键属性ID。我的程序中有一个包含 ID 值的数组。我将这些数组值与 Text_1 中的值进行比较。如果 ID 列的值与数组中的 ID 值相同,我会将此行与 Text_2 文件的相应行相加。这意味着 Text_1.txt 的第 4 行与 Text_2.txt 的第 4 行相加。这应该发生在下面的代码中。但是这段代码将 Text_2.txt 第一行的值与 Text1_txt 的所有行相加,但这不是我想要的。

import Jama.Matrix;
import java.io.File;
import java.util.Arrays;
import java.util.Scanner;


public class T5 {
public static void main(String args[])throws Exception{
    double arr[]= new double[]{86.0,12.0,55.0,90.0,77.0,22.0,25.0,33.0,45.0,20.0,23.0};// The array with which the value of file Text_1 compare
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));
    Scanner x= new Scanner(new File("D:\\Text_1.txt"));
    Scanner y=new Scanner(new File("D:\\Text_2.txt"));
    while(y.hasNext()) {
        double x1=y.nextDouble();
        double y1=y.nextDouble();
        double z1=y.nextDouble();
        Matrix ini_x=new Matrix(new double[][]{{x1},{y1},{z1}});
        while (x.hasNext()) {
            double d = x.nextDouble();
            double e = x.nextDouble();
            double f = x.nextDouble();
            double index = Arrays.binarySearch(arr, d);
            if (index >= 0 && index <= arr.length) {
               System.out.println("Element within the array" + d);//output those number which are both in array and file
                Matrix A = new Matrix(new double[][]{{d}, {e}, {f}});
                ini_x.print(9,6);
                Matrix c=ini_x.plus(A);// Matrix addition (add the first row of Text_2.txt with all the four rows which found using binarySearch.
                c.print(9,6);
            }

        }
    }

}
}

欢迎对此事提出任何建议。 提前致谢

最佳答案

也许这就是你想要的......

public static void main(String[] args)
{
    double arr[] = new double[]{
            86.0,
            12.0,
            55.0,
            90.0,
            77.0,
            22.0,
            25.0,
            33.0,
            45.0,
            20.0,
            23.0
    };// The array with which the value of file Text_1 compare
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));
    Scanner t1 = new Scanner(TestJama.class.getResourceAsStream("/Text_1.txt"));
    Scanner t2 = new Scanner(TestJama.class.getResourceAsStream("/Text_2.txt"));
    while (t1.hasNext())
    {
        double t1_id    = t1.nextDouble();
        double t1_col2    = t1.nextDouble();
        double t1_col3    = t1.nextDouble();
        Matrix t1_matrix = new Matrix(new double[][]{
                {t1_id},
                {t1_col2},
                {t1_col3}
        });

        //read the same row from Text_2.txt
        double t2_col1 = t2.nextDouble();
        double t2_col2 = t2.nextDouble();
        double t2_col3 = t2.nextDouble();

        double index = Arrays.binarySearch(
                arr,
                t1_id
        );
        if (index>0){
            Matrix t2_matrix = new Matrix(new double[][]{
                    {t2_col1},
                    {t2_col2},
                    {t2_col3}
            });
            System.out.print("Text_1 matrix(before add)");
            t1_matrix.print(9,6);
            System.out.print("Text_1 matrix(after add)");
            t1_matrix.plus(t2_matrix).print(9,6);
            System.out.println("=============================================================");
        }

    }
}

输出结果:

[12.0、20.0、22.0、23.0、25.0、33.0、45.0、55.0、77.0、86.0、90.0]

Text_1矩阵(相加前) 86.000000 1.235600 -0.632500

Text_1矩阵(相加后) 89.573232 -2.097239 1.708300

========分割线=========

Text_1矩阵(相加前) 25.000000 1.051200 0.978520

Text_1矩阵(相加后) 28.573225 -2.281637 3.319220

========分割线=========

Text_1矩阵(相加前) 90.000000 3.568700 -0.897400

Text_1矩阵(相加后) 93.573237 0.235775 1.443600

========分割线=========

Text_1矩阵(相加前) 55.000000 -4.125400 1.361100

Text_1矩阵(相加后) 58.573271 -7.458244 3.701800

========分割线=========

如果根据您的代码进行修改,我会评论第 19 行,即

while (x.hasNext())) {

第 32 行是

}

那么它也会运行良好;原因是:您不应该在此处进行另一个内部循环,当外部循环读取 Text2.txt 的第一行后,它将读取 Text_1.txt 中的所有行从 Text_2.txt 读取第二行或其余行,x.hasNext() 将始终返回 false,因为它到达了 Text_1.txt 的末尾已经。

关于java - 使用扫描仪添加两个文件中的值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50929046/

相关文章:

java - 我想从textView保存数据。它可以保存数据,但是在文件中只有一个数据

php - 将数组数据作为对象附加到 json 文件

bash - 如何在 Chef 中运行 bash 脚本文件?

c - Linux 文件创建大小

java - 有没有办法在一个媒体播放器对象中播放 mp3 文件?

java - 为什么在java中与pip行的字符串连接不返回任何内容(空字符串)?

Java Servlet Filter重定向问题

Java:检查两个 double 值是否匹配特定的小数位数

java - 在小于 O(n^2) JAVA 中对数组的绝对值进行排序

javascript - 如何更新 Javascript 对象数组中每个对象的值?