Почему этот java вложен, пока цикл не работает?

Sienna спросил: 28 марта 2018 в 03:34 в: java

Теперь я пытаюсь читать txt-файлы и создавать массив в arraylist с этими данными. Я хочу прочитать два файла txt и сравнить их, но я не могу понять, почему внутри цикла while не работает.

(я использовал переменную count для проверки внутри цикла while, но когда я напечатал счетную переменную, она напечатала только 0.)

(Также я знаю, что try ~ catch ~ не является хорошим решением forNullPointerException error .. но я не смог найти другое решение вместо try ~ catch ~)

import java.io.*;
import java.util.*;public class Warehouse {
    static private String[] eachStockElem = new String[5];
    static private String[] eachInputElem = new String[5];    public static void main(String[] args) throws Exception {
        Scanner str = new Scanner(new File("a.txt"));
        Scanner ip = new Scanner(new File("b.txt"));
        PrintStream st_w = new PrintStream("a.txt");
        PrintStream tx = new PrintStream("c.txt");
        ArrayList<String[]> stockArrayList = new ArrayList<>();
        ArrayList<String[]> inputArrayList = new ArrayList<>();
        ArrayList<String[]> txArrayList = new ArrayList<>();
        String eachTxElem[] = new String[6];
        int tx_id=0;
        int temp_quantity=0;
        int count=0;
        try {
            while (ip.hasNextLine()) {
                eachInputElem = ip.nextLine().split(",");
                inputArrayList.add(eachInputElem);
                while (str.hasNextLine()) { //this while not working!
                    eachStockElem = str.nextLine().split(",");
                    stockArrayList.add(eachStockElem);
                    count++;
                    //do comparing operation
                    break;  
                }
            }
        }
        catch(NullPointerException e){
            System.out.print("");
        }
        System.out.println(count);
        str.close();
        ip.close();
        tx.close();
    }
}

2 ответа

George Zougianos ответил: 28 марта 2018 в 03:51

Угадывая, что означают слова "этот цикл не работает", я рискую опубликовать то, что, по моему мнению, является проблемой в вашем случае.

PrintStream в документах:

Имя файла, который будет использоваться в качестве места назначения этого потока печати. ​​Если файл существует, он будет обрезан до нулевого размера; в противном случае будет создан новый файл. Вывод будет записан в файл и буферизован.

Проблема (и ответ "почему это не работает"):

Scanner str = new Scanner(new File("a.txt"));
PrintStream st_w = new PrintStream("a.txt"); //Cleans the text file,
// so scanner has no lines to read.
Paul92 ответил: 28 марта 2018 в 04:06

В этой строке

PrintStream st_w = new PrintStream("a.txt");

программа записывает вывод в один и тот же входной файл. Измените имя этого выходного файла и выполните тестовый набор.