我正在进行一个计算分数的项目,然而这个程序只是用来读取用户输入并返回其中的一部分,但结果如下:
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)
预期行为
代码应该读取用户输入,然后返回它的第二部分,我称之为"操作2">
当前行为
代码导致错误:
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;
}
}
您忘记了放置基本情况。在流中的某个点上,scanner
没有任何可获得的东西。这就是它给出的原因
java.util.NoSuchElementException
String phrase = a.next();
在将令牌传递到方法之前,只从扫描程序变量a
中获取一个令牌。您目前正在尝试从扫描仪中获取3个令牌,但扫描仪在初始化时只获得1个令牌,这会导致异常。您需要更改为String phrase = a.nextLine();
才能获得整行令牌。
您还需要将String answer = produceAnswer(phrase);
更改为其他内容,因为您当前正在无限递归循环中调用produceAnswer(phrase)
,这将导致StackOverflowException。