Java扫描程序异常

Java扫描程序异常,java,java.util.scanner,Java,Java.util.scanner,我正在尝试编写一个程序,其中我获取一个文本文件并将其复制到另一个文件。在另一个文件中,我希望第一行有一个单词,第二行有两个单词,第三行有三个单词,依此类推 但是,我在Scanner类中遇到了一些问题。在下面的程序中,我一直得到第14行的NoTouchElementException。我以为这是因为我在while循环中关闭了扫描仪,但即使我忽略了“in.close()”,我仍然会收到相同的错误 有人能帮我吗 提前谢谢 import java.io.*; import java.util.*; p

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

但是,我在Scanner类中遇到了一些问题。在下面的程序中,我一直得到第14行的NoTouchElementException。我以为这是因为我在while循环中关闭了扫描仪,但即使我忽略了“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();
  }
}
import java.io.*;
导入java.util.*;
公共类字金字塔{
公共静态void main(字符串[]args)引发FileNotFoundException{
File inputFile=新文件(args[0]);
扫描仪输入=新扫描仪(输入文件);
PrintWriter out=新的PrintWriter(参数[1]);
int s=1;
int i=0;
while(在.hasNext()中){
如果(s>=i){

对于(i=1;iA
NoSuchElementException
在没有
next()
元素时被抛出。当您检查文件
hasNext()
是否位于金字塔的每一层的开头时,您还需要在调用
next()之前检查它
for
循环中。您的异常将在
for
循环中引发,因为金字塔的下一层可能需要比文件中剩余的更多的字,从而导致
next()
尝试获取不存在的元素


若要修复它,请使用
if(in.hasNext())
for
的内部包装为
if(in.hasNext())

当没有
next()
元素时,将抛出
NoTouchElementException
在金字塔的每一层的开头,在调用
for
循环中的
next()
之前,您还需要检查它。您的异常会在
for
循环中抛出,因为金字塔的下一层可能需要的字数比文件中剩余的字数更多,从而导致
next()
尝试获取不存在的元素

若要修复此问题,请使用
if(in.hasNext())
hasNext()
for
循环的内部包装起来,以检查扫描仪的流中是否还有一个令牌。您正在检查是否还有一个令牌,然后假设for循环中甚至有多个令牌。我会将for循环修改为如下:

for (i = 1; i <= s && in.hasNext(); i++)
for(i=1;i
hasNext()
检查扫描程序流中是否还有一个令牌。您正在检查是否还有一个令牌,然后假设for循环中甚至有多个令牌。我将修改for循环,使其如下所示:

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

for(i=1;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;
  }
}

我想建议你的循环可能过于复杂了

以下是我认为更简单的答案,避免了您的例外:

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;
  }
}

添加了一个“修复它”以提高答案的清晰度。你们应该尝试使这项工作,它会很有趣。非常感谢。非常感谢添加了一个“修复它”为了提高答案的清晰度。你们应该努力使这项工作,这将是非常有趣的。非常感谢。非常感谢,我正在尝试这项工作。谢谢,我正在尝试这项工作。我知道我的代码没有真正的“意义”。但当我第一次尝试不起作用时,我倾向于“附加”而不是重新开始。糟糕的做法就我而言,ce我猜不,这不是不好的做法。这就是改进的方式。谢谢,我知道我的代码没有真正的“意义”。但当我的第一次尝试不起作用时,我倾向于“附加”而不是重新开始。我猜不,这不是不好的做法。这就是改进的方式。