我的代码就是这个:
Scanner teclado = new Scanner(System.in);
System.out.println("Rellena con un caracter cada elemento de la primera matriz m1(" + filas1 + "," + cols1 + "), escribe sólo la letra.");
for (int fila = 0; fila < m1.length; fila++) {
for (int col = 0; col < m1[fila].length; col++) {
caracter = teclado.nextLine();
m1[fila][col] = caracter.charAt(0);
}
}
这里有例外 m1 [fila] [col] = caracter.charAt(0);
Java.StringIndexOutOfBoundsException
这很奇怪,因为之前的行,它没有提示扫描器要求一个字符串,只是抛出异常,所以我评论了提供异常的行,是的,它提示扫描器要求字符串。
我有点困惑为什么会这样。
答案 0 :(得分:2)
似乎nextLine()
的结果为空字符串""
,因此索引0处没有字符,因此charAt(0)
会抛出StringIndexOutOfBoundsException
。
如果caracter
是扫描程序,我怀疑您在nextLine()
等操作后使用nextInt
,这将不会消耗用户数据后的新行字符。
Scanner scanner = new Scanner(System.in);
System.out.println("Write some number");
int i = scanner.nextInt();
System.out.println("Write anything");
String data = scanner.nextLine(); // this will not wait for users data
// because it will read data
// before new line mark that user
// passed by pressing enter
System.out.println(i + ">" + data);
要解决此问题,您可以在nextLine()
之后添加nextInt()
以消费换行符。之后,您可以再次使用nextLine()
并从用户处获取下一个数据。
答案 1 :(得分:1)
像Pshemo所指出的那样,它似乎是相同的“”。 只需在控制台中按Enter键就会发生这种情况,因此会向扫描仪发送一个空行。 我不确定你要完成什么,但像这样的小支票可以阻止这个错误。
if (!caracter.isEmpty())
m1[fila][col] = caracter.charAt(0);
除非您还想在用户发送新行时存储。
答案 2 :(得分:1)
scanner.nextLine()
的行为在JAVADOC中描述如下:
使此扫描程序超过当前行并返回该输入 被跳过了。此方法返回当前行的其余部分, 最后排除任何行分隔符。该职位设定为 下一行的开头。
我认为您在执行Enter
后正试图按System.out.printl(whaever you were doing)
。正如文档所示,尝试插入新行将被视为省略行分隔符的newLine输入,因此caracter
字符串将导致空字符串""
。
caracter = teclado.nextLine(); // press an ENTER
System.out.println(caracter.equals(""));
// it will print true if you press ENTER while it was asking for input
m1[fila][col] = caracter.charAt(0);
// asking to get index `0` while it is empty!
立即执行System.out.println()
后,尝试鼠标单击控制台以查看插入符并插入输入。你会看到它正在工作!