Java扫描器空命令问题

Java扫描器空命令问题,java,Java,我使用扫描器从Java项目的控制台获取以下简单代码的输入: char com = ' '; Scanner sc = new Scanner(System.in); com = sc.nextLine().charAt(0); 当我输入预期的命令(a、b、c、d…)时,它工作正常,但如果我在未输入命令的情况下按下键盘的enter按钮,则会出现此错误消息,应用程序崩溃: 线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范

我使用
扫描器
从Java项目的控制台获取以下简单代码的输入:

char com = ' ';
Scanner sc = new Scanner(System.in);
com = sc.nextLine().charAt(0);
当我输入预期的命令(a、b、c、d…)时,它工作正常,但如果我在未输入命令的情况下按下键盘的enter按钮,则会出现此错误消息,应用程序崩溃:

线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范围:0


如何解决此问题?

捕获字符串并独立解析它

Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
while(line.equals("")) {
    System.out.println("Nothing entered - try again!");
    line = sc.nextLine();
}
com = line.charAt(0);
失败的原因是
nextLine
使用换行符;如果不输入任何内容,则字符串将被视为空,因为它是由
nextLine
读取的。您希望检测到这一点,并允许用户重新输入值,直到他们输入非空字符串的内容

sc.nextLine().charAt(0);
这是字符串的第0个字符(字符串的第一个字母)


如果您不输入任何内容,字符串显然将为空,因此当尝试访问索引0时,它将抛出StringIndexOutOfBoundsException。

您需要定义一个与用户输入相等的单个变量

i、 e:

然后,使用
individualvariable
with.equals比较字符串。简单来说,您不能只做
com=sc.nextLine()
首先定义com(string,int,boolean),然后定义
sc.nextLine()
等于(x,y等)的变量然后比较这两个变量

这使代码易于阅读,因此以我前面的示例为例,将其拆分为:

String individualvariable;

com = sc.nextLine();

while(individualvariable .equals (com))
{

}
我给你的第二段代码应该是最容易阅读的,也是最简单的

String individualvariable;

com = sc.nextLine();

while(individualvariable .equals (com))
{

}