Java 跳过要求使用扫描仪输入字符串的行之前的StringIndexOutOfBoundsException
我的代码是:Java 跳过要求使用扫描仪输入字符串的行之前的StringIndexOutOfBoundsException,java,string,java.util.scanner,Java,String,Java.util.scanner,我的代码是: 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++) {
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);
}
}
这很奇怪,因为之前的那行,它不会提示扫描器请求字符串,只是抛出异常,所以我对给出异常的那行进行了注释,是的,它会提示扫描器请求字符串
我有点困惑它为什么会发生。似乎
nextLine()
的结果是空字符串”
所以索引0处没有字符,所以charAt(0)
抛出StringIndexOutOfBoundsException
如果caracter
被扫描,我怀疑您在像nextInt
这样的操作之后使用了nextLine()
,它不会在用户数据之后使用新行字符
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()
之后添加nextLine()
以使用新行字符。之后,您可以再次使用nextLine()
,并从用户处获取下一个数据
看一看,并寻找类似的问题 似乎
nextLine()
的结果是空字符串”
所以索引0处没有字符,所以charAt(0)
抛出StringIndexOutOfBoundsException
如果caracter
被扫描,我怀疑您在像nextInt
这样的操作之后使用了nextLine()
,它不会在用户数据之后使用新行字符
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()
之后添加nextLine()
以使用新行字符。之后,您可以再次使用nextLine()
,并从用户处获取下一个数据
看一看,并寻找类似的问题 正如Pshemo所指出的,caracter似乎等于“”。 当您在控制台中点击Enter键,并因此向扫描仪发送一条空行时,就会发生这种情况。 我不确定你想要完成什么,但是像这样的一个小检查应该可以阻止这个错误
if (!caracter.isEmpty())
m1[fila][col] = caracter.charAt(0);
除非您还希望在用户发送新行时进行存储。就像Pshemo指出的那样,caracter似乎等于“”。 当您在控制台中点击Enter键,并因此向扫描仪发送一条空行时,就会发生这种情况。 我不确定你想要完成什么,但是像这样的一个小检查应该可以阻止这个错误
if (!caracter.isEmpty())
m1[fila][col] = caracter.charAt(0);
除非您还希望在用户发送新行时进行存储。JAVADOC中对
scanner.nextLine()
的行为描述如下:
使扫描器前进超过当前行并返回
被跳过了。此方法返回当前行的其余部分,
不包括结尾处的任何行分隔符。该位置设置为
下一行的开头
我想您正在尝试在执行System.out.printl(无论您在做什么)
之后立即按Enter
。正如文档建议的那样,尝试插入新行将被视为新行输入,忽略行分隔符,因此caracter
字符串将导致空字符串“”
立即执行
System.out.println()
后,尝试在控制台上单击鼠标以查看插入符号并插入输入。你会看到它正在工作 JAVADOC中对scanner.nextLine()的行为描述如下:
使扫描器前进超过当前行并返回
被跳过了。此方法返回当前行的其余部分,
不包括结尾处的任何行分隔符。该位置设置为
下一行的开头
我想您正在尝试在执行System.out.printl(无论您在做什么)
之后立即按Enter
。正如文档建议的那样,尝试插入新行将被视为新行输入,忽略行分隔符,因此caracter
字符串将导致空字符串“”
立即执行
System.out.println()
后,尝试在控制台上单击鼠标以查看插入符号并插入输入。你会看到它正在工作 是的,但是程序跳过了要求输入字符串的部分,我知道,我是在问为什么它会跳过nextLine()
,或者为什么它会返回空字符串…@rokimoki很难说为什么它会发生在你发布的代码中。我们甚至不知道什么是teclado(BufferedReader,Scanner,其他东西)。您应该发布我们可以用来重现您的问题的代码,并提供我们应该与此代码一起使用的输入数据。然后我们可以从问题开始看。它只有几行,很抱歉teclado
,它是Scanner-teclado=new Scanner(System.in)
@rokimoki检查我编辑的答案。我不确定这是否是问题所在,但这似乎是可能的。@Pshemo,对不起,我搞错你了。但是你想要的关于nextLine()。我们甚至不知道什么是teclado(BufferedReader,Scanner,其他东西)。您应该发布我们可以用来重现您的问题的代码,并提供我们应该与此代码一起使用的输入数据。然后我们可以从问题开始看。它只有几行,很抱歉teclado
,它是Scanner-teclado=new Scanner(System.in)
@rokimoki检查我编辑的答案。我不确定这是否是问题所在,但这似乎是可能的。@Pshemo,对不起,我搞错你了。但是我想,你想要的关于nextInt()
的答案并不是@rokimoki的答案。有没有办法清理缓冲区?我的意思是有一个“干净”的下一行()请你换一句话好吗。你说的干净ne是什么意思