当前位置: 首页 > 面试题库 >

调用.next()方法时出现扫描仪NoSuchElementException

华修永
2023-03-14
问题内容

在Java中,出现此异常:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at com.reading.text.Activity3.readFile(Activity3.java:22)
    at com.reading.text.Activity3.main(Activity3.java:10)

从此Java代码:

public static void main(String args[])
{
    readFile("C:/Users/forsakendoll/Desktop/boom.txt");
}

public static void readFile(String path) {
    Scanner file = null;
    try {
        file = new Scanner(new File (path));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
        while (file.hasNext()) {
            for(int counter = 0 ; counter < file.next().length(); counter ++) {
                System.out.println(file.next().charAt(counter));    
            }
        }
    }
}

抛出异常

System.out.println(file.next()。charAt(counter));

异常是什么意思?


问题答案:

.next()在循环的每次迭代中都调用两次,因此,当您快要结束时,您会跳出列表的末尾,编译器会告诉您那里什么也没有。

代替这个:

for(int counter = 0 ; counter < file.next().length(); counter ++) {
    System.out.println(`file.next()`.charAt(counter));    
}

改为这样做:

String temp = file.next();
for(int counter = 0 ; counter < next.length(); counter ++) {
    System.out.println(temp .charAt(counter));    
}

看这里



 类似资料:
  • 问题内容: 我试图了解这三种方法是如何工作的。这是我对它们的理解: 读取当前行的其余部分,即使它为空。 读取一个整数,但不读取转义序列“ \ n”。 读取当前行,但不读取“ \ n”。 假设我有以下代码: 如果我的输入是: 然后,我在屏幕上得到以下输出: 为什么会有“ HI”的值? 这是否意味着即使没有读取第一行的转义字符,该方法也会读取下一行? 问题答案: nextLine()读取当前行的其余部

  • 我试图了解这三种方法是如何工作的。我是这样理解他们的: 读取当前行的剩余部分,即使该行为空 假设我有以下代码: 如果我的输入是: 然后我在屏幕上得到以下输出: 为什么的值为“HI”? 这是否意味着方法读取下一行,即使第一行的转义字符尚未被读取?

  • 问题内容: boolean z = false; do { try { a = sc.nextInt(); z = true; } catch(Exception e) { } } while(!z); 试试这个。如果您第一次尝试整数,则整数将正确执行。但是,如果您输入错误的文本类型,即使您接下来输入int并跳过将布尔值分配为true的情况,也会变成无限循环。为什么是这样? 问题答案: 您的问题出

  • 问题内容: 我的Java作业有问题。我遇到了意外的异常,特别是: java.util.NoSuchElementException:找不到行 我正在使用,该程序不断读取任何内容,并重复“无效格式”异常文本。如果输入正确的值,则第一部分通过,然后该部分立即进入此异常。如果输入的值不正确,则它将开始循环异常。 这是我的代码: 问题答案: 您关闭了多个库,这些库关闭了底层库,因此另一个库将不再从同一库和

  • 嗨,我正在编写一个程序,它使用Scanner从用户那里获取输入,然后使用布尔方法检查输入的长度是否不超过六个字符。问题是,如果长度小于六个,我使用了while循环来不断请求输入;但是在第一次错误输入后,如果你插入一串六个字母或更长的字符串,循环仍然会继续。这是程序: 谢谢

  • < b >想改进这个问题?更新问题,以便通过编辑此帖子用事实和引用来回答问题。 我知道使用nextInt()方法不会消耗新行字符,所以为了处理这个问题,我需要使用一个空的nextLine()方法继续。 我的问题是,作为一种替代解决方案,程序是否会对任何类型的运行时错误开放以使用两个扫描仪,一个用于字符串输入,一个用于整数? 感谢您的任何帮助! (经过编辑,因此问题不那么主观)