0

在我的代码中,我从控制台获取输入并像这样读取它:

InputStreamReader sc = new InputStreamReader(System.in);
BufferedReader bufRead = new BufferedReader(sc);

但是当我无法读取最后一行输入时?

例如:如果我想读取 c 并且控制台输入如下所示,

当 c 之后什么都没有时,它没有得到

a
b
c(EOF)

但是对于像这样的输入控制台,在 c 之后有一行可以读取 c

a
b
c
(EOF)

实际代码:

        InputStreamReader sc = new InputStreamReader(System.in);
        BufferedReader bufRead = new BufferedReader(sc);
        String s = bufRead.readLine();
        int t = Integer.parseInt(s);
        int k = 0; // no. of city

        for (int l = 0; l < t; l++) {
            s = bufRead.readLine();
            k = Integer.parseInt(s);
            cityDetails = new String[3][k];

            for (int j = 0; j < k; j++) {
                s = bufRead.readLine();
                StringTokenizer st = new StringTokenizer(s);
                cityDetails[0][j] = st.nextToken();
                cityDetails[1][j] = st.nextToken();
                cityDetails[2][j] = st.nextToken();
            }
            s = bufRead.readLine();
            dist = Double.parseDouble(s);
             System.out.println(dist);

}
4

1 回答 1

0

您需要阅读直到BufferedReader不返回 null。它需要在一个循环中。
这是Mykong的一个例子

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderExample {

    public static void main(String[] args) {

        BufferedReader br = null;

        try {

            String sCurrentLine;

            br = new BufferedReader(new FileReader("C:\\testing.txt"));

            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)br.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

    }
}  

忽略文件部分。重要的是如何使用BufferedReader. 键盘输入和文件保持不变。

或者,您可以使用java.util.Scanner具有读取不同类型原始数据的方法的方法。

于 2013-10-23T19:14:59.577 回答