Значение вызова вне цикла while в Java - PullRequest
0 голосов
/ 25 июня 2018

У меня есть два файла данных.Данные двойного типа.Файл один состоит из 3 столбцов и нескольких строк, а файл два состоит из 4 столбцов и нескольких строк.Я читаю данные из обоих файлов по отдельности в одной Java-программе, и данные первого столбца файла File1 сопоставляются с данными первого столбца файла File2, после чего появляется сообщение о том, что данные совпадают, иначе данные не совпадают.Мой код такой:

import java.io.File;
import java.util.Scanner;

public class F1 {
public static void main(String args[])throws Exception{
    Scanner Y =new Scanner(new File("C:\\R5_M.txt"));
    Scanner X =new Scanner(new File("C:\\R5_O.txt"));
    double a=0.0,b=0.0,c,d=0.0,e=0.0,f,g,h;
    if(a==d) {
        while (X.hasNext()) {
            a = X.nextDouble();
            b = X.nextDouble();

            c = X.nextDouble();
        }


        while (Y.hasNext()) {
            d = Y.nextDouble();
            e = Y.nextDouble();

            f = Y.nextDouble();
            g = Y.nextDouble();

        }

        System.out.println("They are matched");
    }
 else{
        System.out.println("Not Matched");
    }

}

}

Его вывод They are matched только один раз.Но он должен записать вывод, равный количеству строк.Если у меня есть 10 строк в обоих файлах данных, и 6 данных совпадают, а 4 не совпадают, то я получаю вывод: Они сопоставляются 6 раз, а не сопоставляются 4 раза.

Одной очевидной причиной является то, что оба цикла заканчиваются в пределах этой области. Так что значения, которые изменяются для a, b, c, d, e, f, g, остаются в области действия, или я должен сказать, что они перезаписаныв каждой итерации и если я вызываю a и d за пределами цикла while, он возвращает только последнее значение в этом случае 10-е значение.Так, где я должен записать оператор if, чтобы сравнить каждое значение?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Одним из эффективных методов является использование карты для хранения каждой записи из обоих файлов, а затем сравнение двух:

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws Exception {

        Scanner Y = new Scanner(new File("C:\\R5_M.txt"));
        Scanner X = new Scanner(new File("C:\\R5_O.txt"));
        double a = 0.0, b = 0.0, c, d = 0.0, e = 0.0, f, g, h;

        // Create a map to hold the values from each file
        HashMap<String, Double> yList = new HashMap<>();
        HashMap<String, Double> xList = new HashMap<>();

        // Read in the data from both files
        while (Y.hasNext()) {
            // This will place the values into the HashMap. The first value is whatever "key"
            // you want to use, the second is the value itself.
            yList.put("a", Y.nextDouble());
            yList.put("b", Y.nextDouble());
            yList.put("c", Y.nextDouble());
        }

        while (X.hasNext()) {
            xList.put("a", X.nextDouble());
            xList.put("b", X.nextDouble());
            xList.put("c", X.nextDouble());
        }

        // Now, you can compare values in both maps
        // The HashMap has a list called entrySet that allows you to iterate over all
        // of the entries in the list
        for (Map.Entry<String, Double> entry : yList.entrySet()) {
            // This will check if the current entry's key/value pair matches the identical
            // key/value pair in the xList map.
            if (entry.getValue() == xList.get(entry.getKey()).doubleValue()) {
                System.out.println(entry.getKey() + " matches!");
            } else {
                System.out.println(entry.getKey() + " does NOT match!");
            }
        }

    }
}

Это также может быть адаптировано для считывания неизвестного количества записей из каждого файла.

0 голосов
/ 25 июня 2018

Вам нужно сделать вот так

 public static void main(String args[])throws Exception{
        Scanner Y =new Scanner(new File("C:\\R5_M.txt"));
        Scanner X =new Scanner(new File("C:\\R5_O.txt"));
        double a=0.0,b=0.0,c,d=0.0,e=0.0,f,g,h;
        while(X.hasNext() && Y.hasNext()){
                a = X.nextDouble();
                b = X.nextDouble();

                c = X.nextDouble();

                d = Y.nextDouble();
                e = Y.nextDouble();

                f = Y.nextDouble();
                g = Y.nextDouble();

          if(a==d) {
            System.out.println("They are matched");
              }
          else{
            System.out.println("Not Matched");
           }
     }
...