繁体   English   中英

Java扫描仪异常

[英]A Java Scanner Exception

我试图编写一个程序,将文本文件复制到另一个文件中。 在另一个文件中,我希望第一行有一个单词,第二行有两个单词,第三行有三个单词,依此类推。

我在使用Scanner类时遇到了一些麻烦。 在下面的程序中,我继续获得第14行的NoSuchElementException。我认为这是因为我在while循环中关闭了Scanner之类的东西,但是即使我省略了“ in.close()”,我仍然遇到相同的错误。

有人可以帮我吗?

提前致谢。

import java.io.*;
import java.util.*;

public class WordPyramid {
   public static void main(String[] args) throws FileNotFoundException {
      File inputFile = new File(args[0]);
      Scanner in = new Scanner(inputFile);
      PrintWriter out = new PrintWriter(args[1]);
      int s = 1;
      int i = 0;
      while (in.hasNext()) {
        if (s >= i) {
           for (i = 1; i <= s; i++) {
              out.print(in.next());
              out.print(" ");
            }
        out.println("");
        s++;
        }
    }
  in.close();
  out.close();
  }
}

如果没有next()元素,则抛出NoSuchElementException 在检查金字塔的每一层的开头是否具有hasNext()文件的同时,还需要在for循环中调用next()之前对其进行检查。 您的异常会在for循环中抛出,因为金字塔的下一层可能需要的单词数量比文件中剩余的单词数量多,从而导致next()尝试获取不存在的元素。

要修复它,请使用if(in.hasNext())将您的内部包裹起来for循环。

hasNext()检查扫描器流中是否还有一个令牌。 您正在检查是否还有一个令牌,然后假设您的for循环中甚至有多个令牌。 我将修改您的for循环,如下所示:

for (i = 1; i <= s && in.hasNext(); i++)

我想建议您的循环可能过于复杂。

我认为这是一个更简单的答案,并且避免了您的例外情况:

File inputFile = new File(args[0]);
Scanner in = new Scanner(inputFile);
PrintWriter out = new PrintWriter(args[1]);
int s = 1;
int i = 0;
while (in.hasNext()) {
  out.print(in.next() + " ");
  i++;
  if (i == s)
  {
     // Start the next line
     out.println();
     s++;
     i = 0;
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM