所以,我一直有这个问题。我试图让这个方法返回给它的字符串的第一个字符,但我一直得到java.util.NoSuchElementException ...我想我可能会使用一些语法错误,但我真的不知道。有什么帮助吗?
public static char nthChar (){
Scanner sc = new Scanner(in);
String input = sc.nextLine();
char [] userCharArray = new char[input.length()];
userCharArray = input.toCharArray();
sc.close();
return userCharArray[0];
}
请注意,我导入了java.lang.System的静态成员 我把它改成了......
public static char nthChar (){
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
char [] userCharArray = input.toCharArray();
sc.close();
return userCharArray[0];
}
仍然无效。
答案 0 :(得分:6)
这看起来像是我的嫌疑人:
sc.close();
关闭该扫描程序时,您也关闭了System.in。从System.in读取的新扫描程序的后续读取将抛出NoSuchElementException,因为基础流已关闭。
所以你需要删除它并查看你的代码并确保你没有在其他地方关闭System.in。虽然通常你应该在完成它们时关闭你的流,但System.in是一个特例,你不需要(也不应该)关闭从中读取的流。
例如,这将抛出NoSuchElementException:
Scanner in1 = new Scanner(System.in);
in1.close();
Scanner in2 = new Scanner(System.in);
String line = in2.nextLine(); // throws the exception