【问题标题】:Assigning values in the predicate of a while loop - BufferedReader在 while 循环的谓词中赋值 - BufferedReader
【发布时间】:2013-12-21 16:29:31
【问题描述】:

我有一段代码如下所示:

public void cinemaFromFile(String fileName) throws IOException {

    BufferedReader reader = new BufferedReader(new FileReader(fileName));
    String line;
    while ((line = reader.readLine()) != null) {

        if (line.equals("Movies")) {

            while ((line = reader.readLine()) != null 
                    && !line.equals("Theaters")) {

                String currentline = line; 
                String[] parts = currentline.split(":");
                String part1 = parts[0]; 
                String part2 = parts[1]; 
                movies.add(new Movie(part1, part2));
            }
        }

    reader.close();
}

如您所见,我在 while 循环的终止子句中为 line 赋值。

我是 BufferedReaders 的新手,我正在寻找替代方法。 IE,我想将赋值语句(“line = reader.readLine()”)放在while循环终止子句之外的单独语句中。

我尝试将“line = reader.readLine()”移动到 while 循环的主体中,但这不起作用。我也试过把它放在while循环之前,这也不起作用。

我认为我从根本上误解了 BufferedReaders 的工作原理,它们只能遍历 while 循环中的行吗?

【问题讨论】:

  • 你能举一个你的输入文件的例子和你想要达到的目标的描述吗?

标签: java while-loop variable-assignment bufferedreader


【解决方案1】:
BufferedReader reader = new BufferedReader(new FileReader(fileName));
String line;
while (true) {
    line = reader.readLine();
    if(line == null)
        break;

    if (line.equals("Movies")) {

【讨论】:

    【解决方案2】:

    要将赋值从while 循环条件中提取出来,您必须了解while 循环条件在第一次迭代之前和每次迭代结束之后都会被评估一次。

    您可以通过在 while 循环开始之前放置赋值来模拟这一点,并将其添加到 while 循环体的末尾。

    line = reader.readLine();
    while (line != null) {
        // Rest of body is untouched
    
        // Read again at the end.
        line = reader.readLine();
    }
    

    这将是相同的操作。它甚至可能比在while 循环的条件下进行分配更清晰一些,即使它不那么简洁。

    BufferedReader 在这方面与 while 循环没有什么特别的关系。它只是在调用 readLine() 并且没有输入时返回 null

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-25
      • 2014-12-19
      • 2015-03-22
      • 2013-02-17
      • 2010-11-11
      • 1970-01-01
      • 2015-07-13
      • 2016-09-10
      相关资源
      最近更新 更多