需要有关扫描仪错误java.util.NoSuchElementException的帮助

时间:2018-11-06 06:07:48

标签: java java.util.scanner

我正在研究一个计算分数的项目,但是该程序仅用于读取用户输入并返回其中的一部分,但结果如下:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at fracCalc.fracCalcCheckUno.produceAnswer(fracCalcCheckUno.java:21)
    at fracCalc.fracCalcCheckUno.main(fracCalcCheckUno.java:14)

预期行为

代码应读取用户输入,然后返回它的第二部分,我称之为“ operand2”

当前行为

代码导致错误:

Exception in thread "main" 
    java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at fracCalc.fracCalcCheckUno.produceAnswer(fracCalcCheckUno.java:21)
    at fracCalc.fracCalcCheckUno.main(fracCalcCheckUno.java:14)

上下文

由于此错误,我无法接收任何用户输入。

复制步骤(针对错误)

package fracCalc;

import java.util.Scanner;

public class fracCalcCheckUno{
    public static void main(String[] args) {
        Scanner a = new Scanner(System.in);
        System.out.print("Input fraction expression: ");
        String phrase = a.next();
        String b = produceAnswer(phrase);
        System.out.println(b);
    }    
    public static String produceAnswer(String phrase) {
        Scanner console = new Scanner(phrase);
        String operand1 = console.next();
        String operator = console.next();
        String operand2 = console.next();
        String answer = produceAnswer(phrase);
        System.out.println(answer);

        return operand2;
    }
}

2 个答案:

答案 0 :(得分:0)

String phrase = a.next();仅将扫描器变量a中的单个令牌传递给方法。您当前正在做的是尝试从扫描仪获取3个令牌,但是在初始化时仅给扫描仪1个令牌,这会导致您的异常。您需要更改为String phrase = a.nextLine();才能获得完整的令牌行。

您还需要将String answer = produceAnswer(phrase);更改为其他内容,因为您当前正在无限递归循环中调用produceAnswer(phrase),这会导致StackOverflowException。

答案 1 :(得分:0)

您忘了放下基本情况了。 在流程的某个时刻,scanner毫无用处。 这就是为什么它给

java.util.NoSuchElementException