好的,我的第一个问题搞砸了,请立即查看。
这是我的错误
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()或类似的东西。从来没有使用它,我没有经验。如果有人可以向我展示一个例子,或者如何在这个编码中使用它,那就太好了。
答案 0 :(得分:3)
nextByte()
获取keyboard
缓冲区中的第一个字节,但它不使用换行\n
字符,这是在第二个字符调用nextByte()
时使用的时间。
你应该释放缓冲区
keyboard.nextLine();
之后
keyboard.nextByte();
以及之后
keyboard.next();
为了告诉您的扫描仪直接丢弃剩下的行并从下一行读取
答案 1 :(得分:1)
修改为
if(keyboard.hasNextByte())
a = keyboard.nextByte();
和
if(keyboard.hasNext())
Team = keyboard.next();
适用的地方。在阅读之前清除新行的缓冲区。
答案 2 :(得分:1)
问题出现是因为你打电话给keyboard.close()
,我不认为你应该这样做。
在getSearch
方法退出之前,请关闭正在使用的扫描仪。调用close
method of the Scanner class也会关闭扫描仪正在读取的流。在您的情况下,这是System.in
。下次getMenu
调用keyboard.nextByte()
时,它会询问扫描程序(不是getSearch
使用的扫描程序)对下一个字节。此扫描仪也在从System.in
读取。但是,System.in
现已关闭,因此不会有下一个字节要读取。这就是你获得NoSuchElementException
。
一般来说,关闭完成的东西是一种好习惯。例如,如果您正在读取文件,则应在完成文件后始终关闭该文件。但是,在程序退出之前,您还没有完成System.in
,因此在此之前关闭它是错误的。
至少我会删除keyboard.close()
内getSearch
的来电。我也不担心在getMenu
结束时关闭扫描仪。