0

好的,我的第一个问题搞砸了,请立即查看。

这是我的错误

 java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextByte(Unknown Source)
at java.util.Scanner.nextByte(Unknown Source)
at Filename.getMenu(Filename.java:38)
at Filename.main(Filename.java:23)

这是我的代码

  import java.util.Scanner;
public class asdasdasd {

    public static void main(String[] args){


        short[] time = {2008, 2009};


        String[] champs = {"Mouths", "Mouths"};

        getMenu(time, champs);
    }

        public static void getMenu(short[] time, String[] champs){
            Scanner keyboard = new Scanner(System.in);
            byte a;

            do{
                System.out.println("\t\t\tMain Menu");
                System.out.println("Select an Option || Example: Type '1' for Seach\n\n");
                System.out.println("\t\t1.Search\n");
                System.out.print("Input the number: ");
                a = keyboard.nextByte();
                if(a == 1){
                    getSearch(time, champs);
                }
              } while(a < 5);
            keyboard.close();
        }

        public static void getSearch(short[] time, String[] champs){
            Scanner keyboard = new Scanner(System.in);
            String Team;
            byte b;
            do{
                System.out.print("\n\nEnter the name of the team: ");
                Team = keyboard.next();
                if("Mouths".equals(Team) || "mouths".equals(Team)){
                    Team = "mouths";

                }
                System.out.print("Start a new Search?\nInput 1 for Yes or any other number to return to the main menu: ");
                b = keyboard.nextByte();

            }
            while(b == 1);

            keyboard.close();                                           


        }
    }

好的,所以基本上输入是 1,然后是嘴巴,然后是 2。然后出现错误。

很抱歉所有愿意提供帮助的人,我没有提供太多信息。我只是害怕因为抄袭而被贬低。

我已经被告知要使用 hasNext() 或类似的东西。从来没有使用过它,我也没有任何经验。如果有人可以向我展示一个示例或如何在此编码中使用它,那就太好了。

4

3 回答 3

3

nextByte()获取缓冲区中的第一个字节keyboard,但不消耗换行符\n,该换行符nextByte()在第二次调用时获取。

你应该释放缓冲区放置一个

keyboard.nextLine();

keyboard.nextByte();

以及之后

keyboard.next();

为了告诉您的扫描仪直接丢弃该行的其余部分并从它找到的下一行读取

于 2013-04-17T17:45:29.587 回答
1

修改为

if(keyboard.hasNextByte()) 
  a = keyboard.nextByte();

 if(keyboard.hasNext())
 Team = keyboard.next();

适用的地方。并在读取之前清除换行符的缓冲区。

于 2013-04-17T17:48:44.510 回答
1

出现问题是因为您正在调用keyboard.close(),我认为您不应该这样做。

在您的getSearch方法退出之前,您关闭您正在使用的扫描仪。调用closeScanner 类的方法也将关闭扫描仪正在读取的流。在你的情况下,这是System.in. 下一次getMenu调用时keyboard.nextByte(),它会向它拥有的扫描仪(与 使用的扫描仪不同getSearch)询问下一个字节。该扫描仪也在读取System.in. 但是,System.in现在已经关闭,因此将没有下一个字节要读取。这就是为什么你得到一个NoSuchElementException.

通常,关闭已完成的事情是一种很好的做法。例如,如果您正在读取文件,则应始终在完成后关闭该文件。但是,在程序退出之前您还没有完成System.in,因此在此之前关闭它是错误的。

至少我会删除对keyboard.close()within的调用getSearch。我也不担心在getMenu.

于 2013-04-17T18:08:57.030 回答