当我读入每行有数字的 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()
- return String - 当前行指向
- 然后指向下一行
(同样有迭代器接口)
这意味着调用 .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);
}
我想从以下文本文件中读取数字:
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()
- return String - 当前行指向
- 然后指向下一行 (同样有迭代器接口)
这意味着调用 .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);
}