这里究竟发生了什么? 为什么我不能存储名称之间带空格的String? 我尝试了分隔符,但没有奏效。有没有办法产生所需的输出? 我知道.next()有效但我们可能需要存储一个带空格的字符串。好奇......
Scanner input=new Scanner(System.in);
System.out.print("Enter number of Students:");
double [] scores = new double[input.nextInt()];
String [] names=new String[scores.length];
for(int i=0;i<names.length;i++){
System.out.println("Enter the students name: ");
names[i] = input.nextLine();
System.out.println("Enter the student scores : ");
scores[i]=input.nextDouble();
}
答案 0 :(得分:3)
当你调用input.nextInt()
时,它不会消耗该行上的新行字符,因此以下对input.nextLine();
的调用将使用换行符,并返回空字符串。 nextDouble()
将正常运作。
解决此问题的一种方法是在for循环之前立即调用input.nextLine();
以消耗额外的新行字符
编辑:
String [] names=new String[scores.length];
input.nextLine(); //literally add the call right here
for(int i=0;i<names.length;i++){
答案 1 :(得分:0)
根据Javadoc:
一个简单的文本扫描程序,可以使用正则表达式解析基本类型和字符串。 扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。然后可以使用各种下一种方法将得到的标记转换为不同类型的值。
如果您使用“\ n”替换默认分隔符,如下所示:
Scanner s = new Scanner(input).useDelimiter("\\\\n");
答案 2 :(得分:0)
这是它的工作原理!谢谢你的关注! :)
for(int i=0;i<names.length;i++){
if(input.nextLine().equals("")){
System.out.println("Enter students name : ");
names[i] = input.nextLine();
}
System.out.println("Enter the student scores : ");
scores[i]=input.nextDouble();
}