0

好的,所以我似乎无法让它工作,尽管很多人告诉我语法和逻辑是正确的。谁能告诉我我可能做错了什么?

public Scanner in = new Scanner(System.in);

public void movePlayer() {
    System.out.print("move: ");
    String str = in.nextLine();

    in.nextLine();

    char c = str.charAt(0);

    if (c == 'l' || c == 'L') {
        player.moveLeft();
    }
 }

程序被 char 捕获c = str.charAt(0);

我被退回这个错误:

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0(在 java.lang.String 中)

4

7 回答 7

5

您没有通过控制台输入任何内容,因此str为空。这就是chatAt(0)抛出异常的原因

于 2012-04-30T11:26:08.900 回答
3

你不想使用nextLine(). 你想用next().

String str = in.next();

这是 JavadocnextLine()

将此扫描器前进到当前行并返回被跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。位置设置为下一行的开头。

你想要next()

从此扫描器中查找并返回下一个完整的令牌。一个完整的标记前后是匹配分隔符模式的输入。此方法可能会在等待输入扫描时阻塞,即使先前调用 hasNext() 返回 true。

这将阻止您使用空行并引发异常。

于 2012-04-30T11:26:48.357 回答
0

那是ryt ..因为当你尝试到达char第0个位置时,它会抛出一个异常,因为f数组的大小为0。

可能你读这个是为了从命令行获取 I/O

于 2012-04-30T11:32:44.357 回答
0

添加对 Empty String 和 Null 的检查。你会避免很多头痛。

于 2012-04-30T11:35:36.810 回答
0

如果在控制台中按 Enter 键Scanner,无论是否输入文本,都将被视为完整行。

在行首按 Enter,将 String 返回""到方法Scanner.nextLine()

str.lenght () > 0使用before添加检查str.charAt(0)

于 2012-04-30T11:47:28.197 回答
0

这意味着它str是空的。您应该检查它是否null不是空的。

if (str != null && !str.isEmpty()) {
...
}
于 2012-04-30T11:26:40.637 回答
0

改为使用in.next()。无论出于何种原因,有时nextLine()都不起作用。CharAt()

于 2020-03-19T09:31:04.617 回答