为什么我不能使用Scanner(System.in)读取整行和双倍?

时间:2013-12-05 04:21:52

标签: java string

这里究竟发生了什么? 为什么我不能存储名称之间带空格的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();
      }

3 个答案:

答案 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();
  }