当我读入每行有数字的 txt.file 时的输出

Output when I read in a txt.file with numbers in each line

我想从以下文本文件中读取数字:

5
8
-2
11
3
-5
2
10

这是我的 java 代码:

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        InputStream inStream = null;
        ArrayList<Integer> arrayList = new ArrayList<>();

        try {
            String userInput = bufferedReader.readLine();
            inStream = new FileInputStream(userInput);
            BufferedReader readerFile = new BufferedReader(new InputStreamReader(inStream));

            while(readerFile.ready()) {
//                System.out.println(Integer.parseInt(readerFile.readLine()));
                int number = Integer.parseInt(readerFile.readLine());
                arrayList.add(number);
            }
            System.out.println("Foreach print:");

            for(int number:arrayList) {
                System.out.println(number);
            }
        }

        catch (Exception e) {
            System.out.print(e.getClass().getSimpleName());
        }

        finally {
            bufferedReader.close();
            inStream.close();
        }

    }
}

像这样,代码可以完美运行。 我不明白的是,当我使用行 System.out.println(Integer.parseInt(readerFile.readLine())); 作为我的代码的一部分以查看他阅读的内容时。其余保持不变。我得到这个结果:

为什么我会得到这个结果?我完全糊涂了。提前致谢!

来自Vienna/Austria

的问候

法比安

据我所知,您调用了 readLine 两次.. 一次有打印,一次没有打印。

要避免这种情况,请使用以下代码:

while(readerFile.ready()) {
   int number = Integer.parseInt(readerFile.readLine());
   System.out.println(number);
   arrayList.add(number);
}

每次调用 readerFile.readLine() 时,它都会读取一行。因此,当您取消注释您已注释的行时,该代码会占用一半的行,而其后的行会占用一半的行。

while(readerFile.ready()) {
    String line = readerFile.readLine();
    System.out.println(Integer.parseInt(line));
    int number = Integer.parseInt(line);
    arrayList.add(number);
}

会修复它。或者更好:

while(readerFile.ready()) {
    int number = Integer.parseInt(readerFile.readLine());
    System.out.println(number);
    arrayList.add(number);
}

出现该输出是因为,当您取消注释 System.out.println(Integer.parseInt(readerFile.readLine())) 行时,您在 while 循环中一次阅读 两行

按照建议,将数字读入一个变量,然后将这个变量添加到列表中并打印出来:

while(readerFile.ready()) {
    int number = Integer.parseInt(readerFile.readLine());
    arrayList.add(number);
    System.out.println(number);
}

问题出在 readerFile.readLine(),因为每次调用 readerFile.readLine() 时,它都会指向下一行。每次调用它时,您只是在使用参考。用于修复上述代码。更改代码如下。

int number = Integer.parseInt(readerFile.readLine());    
System.out.println(number);
            

readerFile.readLine()

  1. return String - 当前行指向
  2. 然后指向下一行 (同样有迭代器接口)

这意味着调用 .readLine() 两次将使您跳过第 1、3、5 行 .....您将仅获得第 2、4、6 行 .... (如果我们从 1 开始计数)

我会推荐这个:

        String sCurrentLine;

       while ((sCurrentLine = readerFile.readLine()) != null) {
               int number = Integer.parseInt(sCurrentLine);
               System.out.println(number);
               arrayList.add(number);
            }