我正在研究一个计算分数的项目,但是该程序仅用于读取用户输入并返回其中的一部分,但结果如下:
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;
}
}
答案 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