Java扫描程序异常
我正在尝试编写一个程序,其中我获取一个文本文件并将其复制到另一个文件。在另一个文件中,我希望第一行有一个单词,第二行有两个单词,第三行有三个单词,依此类推 但是,我在Scanner类中遇到了一些问题。在下面的程序中,我一直得到第14行的NoTouchElementException。我以为这是因为我在while循环中关闭了扫描仪,但即使我忽略了“in.close()”,我仍然会收到相同的错误 有人能帮我吗 提前谢谢Java扫描程序异常,java,java.util.scanner,Java,Java.util.scanner,我正在尝试编写一个程序,其中我获取一个文本文件并将其复制到另一个文件。在另一个文件中,我希望第一行有一个单词,第二行有两个单词,第三行有三个单词,依此类推 但是,我在Scanner类中遇到了一些问题。在下面的程序中,我一直得到第14行的NoTouchElementException。我以为这是因为我在while循环中关闭了扫描仪,但即使我忽略了“in.close()”,我仍然会收到相同的错误 有人能帮我吗 提前谢谢 import java.io.*; import java.util.*; p
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;iANoSuchElementException
在没有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;ihasNext()
检查扫描程序流中是否还有一个令牌。您正在检查是否还有一个令牌,然后假设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我猜不,这不是不好的做法。这就是改进的方式。谢谢,我知道我的代码没有真正的“意义”。但当我的第一次尝试不起作用时,我倾向于“附加”而不是重新开始。我猜不,这不是不好的做法。这就是改进的方式。