首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoSuchElementException错误

NoSuchElementException错误
EN

Stack Overflow用户
提问于 2018-07-20 06:42:08
回答 2查看 698关注 0票数 1

每次我编译我的程序时,我都会得到以下错误:

代码语言:javascript
复制
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类)

代码语言:javascript
复制
case 3:                                   
    species = "";
    pokedex.addPokemon(species)
    Menu(scnr);
    break;

(Pokedex类)

代码语言:javascript
复制
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(),但它们似乎都不能解决我的问题,我的扫描仪出了什么问题?

EN

回答 2

Stack Overflow用户

发布于 2018-07-20 06:59:22

如果接受多个输入,则使用while(scanner.hasNext()){species = scanner.nextLine()}。如果只寻找一个输入(不管是什么),只需使用species = scanner.nextLine()即可。如果只想要输入行的第一个单词,请改用scanner.next()

票数 0
EN

Stack Overflow用户

发布于 2018-07-20 07:01:30

下面是问题代码:

代码语言:javascript
复制
        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() ...

一般来说,“胡闹”不是设计/实现好代码的好方法。您需要做的是仔细考虑代码要做的事情。在以下情况下,将以什么顺序提出什么问题,以及您的代码到底应该做什么:

  • an at value
  • an at value
  • no;即EOF

在输入不可接受的情况下(例如,需要整数时为非整数),您需要跳过输入。当您只需要输入一个单词时,还需要处理输入多个“单词”的情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51432663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档