连续输入中,第一个字符串录入失败的问题(Java初学者入门)

139 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Java中录入数据出错的问题解决方法

 在Java中,当两个不同的数据在先后录入的过程中,数据的录入可能会失败。  现就此问题给出详细的案例和解决方案。

例题:要求录入一组字符串,先输入待录入数组的个数n,而后依次给出待录入的字符串。

 我们给出一般情况下此问题的解决方法,具体代码如下

		Scanner obj = new Scanner(System.in);
		int i;
		System.out.println("请输入待输入字符串的个数");
		int n = obj.nextInt();
		String[] array = new String[n];
		for(i=0;i<n;i++) {
			System.out.println("请输入第"+(i+1)+"个字符串");
			array[i] = obj.nextLine();
		}
		System.out.print("字符串数组输出为[");
		for(i=0;i<n;i++) {
			if(i!=n-1)
				System.out.print(array[i]+",");
			else
				System.out.print(array[i]+"]");
		}
		obj.close();

编译器输出

请输入待输入字符串的个数
3
请输入第1个字符串
请输入第2个字符串
CSDN
请输入第3个字符串
CSDN
字符串数组输出为[,CSDN,CSDN]

问题产生

  • 这种情况,通过我们的输入及编译器的输出可以看出,在系统提示输入第一个字符串时,我们并没有录入任何数据,但系统自动跳过或者说自动录入了一个空的字符到第一个字符串(实际上是录入了一个换行符'n'),让我们就直接开始输入第二个字符串,我们按照要求完成下去,连续输入两个CSDN后,控制台输出发现,第一个字符串所在位置什么都没有输出。

分析

重点来喽 以下是详细的解释

  • 这里为什么系统会直接跳过第一个输入并且最终输出的第一个字符串什么都没有呢?因为当我们在录入第一个数据n的时候,输入了一个回车符('\n'),在nextLine()方法中,它是以换行符作为此行录入结束的标记的,因此!它会自动将你输入的数字n后面跟着的这个换行符给当作第一个字符串录入进入了。实际上,最终输入 的第一个字符串并不是空,而是一个换行符,只不过我们无法通过输出得之这是一个换行符所以才会认为它里面是空的,但实际上并不是!(这个问题和C里面也会出现的一个问题几乎如出一辙,学过C的小伙伴应该都很清楚)

解决方法

解决办法 解决这个问题的方法其实非常非常简单!!!下面给出解决此问题的办法

String temporary = obj.nextLine();
  • 我们只需要在String[] array = new String[n];(第5行)这一行后边添加上面一行代码即可完美解决此问题!添加的这一行代码的作用是==用来接收在输入数字n之后的那个回车符。==

结果

修改后结果

请输入待输入字符串的个数
3
请输入第1个字符串
CSDN
请输入第2个字符串
CSDN
请输入第3个字符串
CSDN
字符串数组输出为[CSDN,CSDN,CSDN]

好啦,问题到这里就完美解决了~有什么疑问或者有什么不对的地方欢迎批改[抱拳/]。