扫描仪和方法出现Java异常问题



我在java中遇到了一些问题,在while循环中将scanner放在输出之后。扫描仪扫描要使用的方法,然后在返回循环开始时进行扫描重置变量。

我已经尝试过了,但没有找到任何可以理解的解决方案(我对java真的很陌生,这对我来说很难(,或者自己解决。这是完整的代码(我知道代码效率不高(:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int con = 1;
System.out.println("Hey!,welcome to my games!");
Scanner scanner = new Scanner(System.in);
String game;
while (con == 1) {
System.out.println(
"Here Some games i have(Enter the text for the one you want):nto stop=0n1)calculator=1n2)!Soon! Random numbers");
game = scanner.nextLine();
calculator();
scanner.reset();
System.out.println(game);
//          if(game.equals("0")) {
//              con=0;
//          }
//          else if(game.equals("1")) {
//              System.out.println("Welcome Back!");
//          }
//          else {
//              System.out.println("There is a mistake in your text");
//          }
}
scanner.close();
}
static void calculator() {
int num1, num2, con = 1, stop = 1;
String op, ad = "add", su = "sub", mul = "multi", di = "div";
Scanner af = new Scanner(System.in);
while (con == 1) {
stop = 1;
System.out.println("Write number 1");
num1 = af.nextInt();
System.out.println("Write number 2");
num2 = af.nextInt();
System.out.println(
"Write an operation (one of these):nAddition=addnSubtraction=subnMultiplication=multinDivision=div");
op = af.next();
op = op.toLowerCase();
int minus = num1 - num2;
int plus = num1 + num2;
if (op.equals(ad)) {
System.out.println("The Operation is:Additionn" + num1 + "+" + num2 + "=" + plus);
} else if (op.equals(su)) {
System.out.println("The Operation is:Subtractionn" + num1 + "-" + num2 + "=" + minus);
} else if (op.equals(mul)) {
System.out.println("The Operation is:Multiplicationn" + num1 + "*" + num2 + "=" + num1 * num2);
} else if (op.equals(di)) {
System.out.println("The Operation is:Divisionn" + num1 + "/" + num2 + "=" + num1 / num2);
} else {
System.out.println("Um,Did you make a mistake in your text?nDo you want the calculator again?");
String yn = af.next();
yn = yn.toLowerCase();
if (yn.equals("yes") || yn.equals("yep")) {
stop = 0;
}
}
if (stop == 1) {
con = 0;
}
}
af.close();
}
}

正如你所看到的,我试着解决它,甚至对一些代码发表了评论,但当它运行到方法并返回时,它失败了,因为扫描仪认为存在在我写东西之前先扫描一下。这是一个例外-

Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1478)
at Main.main(Main.java:12)
  1. 您需要一种机制来循环(即要求用户再次输入数据(,以防出现无效条目。最常见的方法之一是使用do-while循环,它保证至少执行一次其主体。查看本教程了解更多信息
  2. 使用Scanner::nextLine而不是Scanner::nextScanner::nextInt等,因为它们不使用通过从输入中点击Enter键创建的换行符。查看此讨论以了解更多信息
  3. 最后但同样重要的是,永远不要为System.in关闭Scanner,因为它也会关闭System.in,如果不重新启动JVM,就无法再次打开它注意:如果使用Scanner扫描File,请确保关闭它以释放资源

演示:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int option;
boolean valid;
Scanner input2 = new Scanner(System.in);
do {
valid = true;
System.out.println("Choose an option:n" + "1-Additionn" + "2-Subtractionn" + "3-Exit");
try {
option = Integer.parseInt(input2.nextLine());
if (option < 1 || option > 3) {
throw new IllegalArgumentException();
}
// ...Place here the rest of code (which is based on the value of option)
} catch (IllegalArgumentException e) {
System.out.println("This is an invalid entry. Please try again.");
valid = false;
}
} while (!valid);
}
}

样本运行:

Choose an option:
1-Addition
2-Subtraction
3-Exit
x
This is an invalid entry. Please try again.
Choose an option:
1-Addition
2-Subtraction
3-Exit
10.5
This is an invalid entry. Please try again.
Choose an option:
1-Addition
2-Subtraction
3-Exit
1

您记得导入java.util.Scanner吗?或者如何编译源文件?我在用gradle编译时也收到了同样的错误消息,并且在gradle构建文件中缺少了一行。

最新更新