JAVA 错误:线程“main”中的异常 java.util.NoSuchElementException

Posted

技术标签:

【中文标题】JAVA 错误:线程“main”中的异常 java.util.NoSuchElementException【英文标题】:JAVA ERROR: execption in thread"main" java.util.NoSuchElementException 【发布时间】:2020-11-11 14:22:23 【问题描述】:

我正在学习 Java 编程入门课程,所以请原谅我对编程概念/术语的无知。我目前的部分任务是创建一个程序来计算和显示游戏角色在特定级别的攻击速度。

我有这个问题总是说:

输入基础攻击速度: 输入额外攻击速度%: 线程“主”java.util.NoSuchElementException 中的异常 在 java.base/java.util.Scanner.throwFor(Scanner.java:937) 在 java.base/java.util.Scanner.next(Scanner.java:1594) 在 java.base/java.util.Scanner.nextDouble(Scanner.java:2564) 在 Characterattackspeed.main(Characterattackspeed.java:15)

我这里有代码:

public class Characterattackspeed

public static void main(String args[]) 
    Scanner in = new Scanner(System.in);
    double base;
    double bonus;
    double current;
    int level;
    
    System.out.println("Enter the base attack speed: ");
    base = in.nextDouble();
    System.out.println("Enter the bonus attack speed %: ");
    bonus = in.nextDouble();
    System.out.println("Enter the level: ");
    level = in.nextInt();
    
    bonus = bonus / 100;
    current = base * (1 + (bonus * (level - 1)));
    
    System.out.printf("current attack speed is %.3f.", current);
    
    
    
    

【问题讨论】:

Scanner#nextInt() 和 Scanner#nextDouble() 抛出 NoSuchElementException - 如果输入用尽。你能指定你的输入吗? 嘿伙计。对于这种抛出错误的情况,如果您将整个错误日志放入您的问题并通过代码 按钮将其包装起来,这对我们有很大帮助。 至于错误,根据 maloomeister 的评论...当使用 .nextInt().nextDouble() 时,您可能会遇到 Scanner 可能发生的常见错误。发生的情况是这些方法不会清除整个输入,它们只针对他们找到的第一个 Int 或 Double 。这意味着一些剩余的数据可能会干扰。我建议使用.nextLine() 来获取所有数据,然后尝试通过Integer.parseInt(input);Double.parseDouble(input); 方法将其转换为Int/Double。 【参考方案1】:

使用正确的导入运行(在此处测试并运行正常):

import java.util.Scanner;

import static java.lang.System.*;

public class Characterattackspeed 

    public static void main(String args[]) 
        Scanner in = new Scanner(System.in);
        double base;
        double bonus;
        double current;
        int level;

        out.println("Enter the base attack speed: ");
        base = in.nextDouble();
        out.println("Enter the bonus attack speed %: ");
        bonus = in.nextDouble();
        out.println("Enter the level: ");
        level = in.nextInt();

        bonus = bonus / 100;
        current = base * (1 + (bonus * (level - 1)));

        out.printf("current attack speed is %.3f.", current);


    



示例输出:

Enter the base attack speed: 
12
Enter the bonus attack speed %: 
12
Enter the level: 
1
current attack speed is 12,000.
Process finished with exit code 0

您可能希望增强代码以使用方法和对象,但这不是最初的问题。

【讨论】:

以上是关于JAVA 错误:线程“main”中的异常 java.util.NoSuchElementException的主要内容,如果未能解决你的问题,请参考以下文章

如何修复运行时错误-线程“main”java.util.NoSuchElementException中的异常

为啥我在代码中的线程“main”java.lang.StringIndexOutOfBoundsException 错误中收到异常?

线程“main”java.lang.IllegalStateException中的异常:驱动程序可执行文件必须存在使用Selenium ChromeDriver和Java的错误[重复]

Kotlin 协程单元测试错误:线程“main @coroutine#1 @coroutine#2”中的异常 java.lang.NullPointerException

我的代码上的线程“main”java.util.NoSuchElementException 中的异常?

int 错误:线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间