每次我编译我的程序时,我都会得到以下错误:
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 Pokedex.addPokemon(Pokedex.java:58)
at PokemonProgram.Menu(PokemonProgram.java:93)
at PokemonProgram.main(PokemonProgram.java:32)类PokemonProgram包含我的main方法,这似乎是导致此问题的代码部分
(PokemonProgram类)
case 3:
species = "";
pokedex.addPokemon(species)
Menu(scnr);
break;(Pokedex类)
public boolean addPokemon(String species) {
boolean success = true; //BOOLEAN FOR SUCCESSFULLY ADDING POKEMON
dontWannaBeTheVeryBest++;
if (dontWannaBeTheVeryBest > (Pokemons.length - 1)) { //TEST FOR EXCEEDING POKEMONS SIZE
success = false;
System.out.println("Error: Pokedex is full!");
dontWannaBeTheVeryBest--;
System.out.println("");
}
if (success) { //CONTINUES ADDING OBJECT TO ARRAY IF MAX AND DUPLICATE CONDITIONS ARE FALSE
System.out.print("Enter the name of the species to add: ");
Scanner scanner = new Scanner(System.in); //Calls Pakuri constructor depended upon string
while (true) {
if (!scanner.hasNext()) { //SOLUTION TO COMPILER ERROR
scanner.next();
} else {
species = scanner.next();
break;
}
System.out.println("Please enter a valid size."); //BOOLEAN FOR INVALID INPUT
System.out.print("Enter max capacity of the Pokedex: ");
}
Pokemon store = new Pokemon(species);
Pokemon[dontWannaBeTheVeryBest] = store; //STORES OBJECTS TO ARRAY
size++;
System.out.println("Pokemon species " + species + " successfully added!");
System.out.println("");
}
return success;
//RETURNS WHETHER OR NOT ADDING POKEMON WAS SUCCESSFUL
}我尝试过使用.next()和.nextLine(),但它们似乎都不能解决我的问题,我的扫描仪出了什么问题?
发布于 2018-07-20 06:59:22
如果接受多个输入,则使用while(scanner.hasNext()){species = scanner.nextLine()}。如果只寻找一个输入(不管是什么),只需使用species = scanner.nextLine()即可。如果只想要输入行的第一个单词,请改用scanner.next()
发布于 2018-07-20 07:01:30
下面是问题代码:
if (!scanner.hasNext()) { //SOLUTION TO COMPILER ERROR
scanner.next();
} else {
species = scanner.next();
break;
}"if“语句的"then”部分肯定会抛出java.util.NoSuchElementException。您调用scanner.hasNext(),当它返回false时,您无论如何都要调用next()。
我不知道您在//SOLUTION TO COMPILER ERROR中指的是什么,但这不是正确的解决方案。
我已经尝试过使用.next()和.nextLine() ...
一般来说,“胡闹”不是设计/实现好代码的好方法。您需要做的是仔细考虑代码要做的事情。在以下情况下,将以什么顺序提出什么问题,以及您的代码到底应该做什么:
在输入不可接受的情况下(例如,需要整数时为非整数),您需要跳过输入。当您只需要输入一个单词时,还需要处理输入多个“单词”的情况。
https://stackoverflow.com/questions/51432663
复制相似问题