Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我不能用双扫描仪(System.in)阅读整行文字?_Java_String - Fatal编程技术网

Java 为什么我不能用双扫描仪(System.in)阅读整行文字?

Java 为什么我不能用双扫描仪(System.in)阅读整行文字?,java,string,Java,String,这里到底发生了什么? 为什么我不能存储一个名称为空格的字符串? 我试过使用分隔符,但没有成功。有没有一种方法可以产生期望的输出? 我知道.next()可以工作,但我们可能需要存储一个带空格的字符串。只是好奇 Scanner input=new Scanner(System.in); System.out.print("Enter number of Students:"); double [] scores = new double[input.nextInt()];

这里到底发生了什么? 为什么我不能存储一个名称为空格的字符串? 我试过使用分隔符,但没有成功。有没有一种方法可以产生期望的输出? 我知道.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();
      }
扫描仪输入=新扫描仪(System.in);
System.out.print(“输入学生人数:”);
double[]分数=新的double[input.nextInt()];
字符串[]名称=新字符串[scores.length];

对于(int i=0;i当您调用
input.nextInt()
时,它不会使用该行上的新行字符,因此对
input.nextLine();
的以下调用将使用该新行并返回空字符串。
nextDouble()
将正常工作

解决此问题的一种方法是在for循环之前立即调用
input.nextLine();
,以使用额外的新行字符

编辑:

String[]name=新字符串[scores.length];
input.nextLine();//直接在此处添加调用
对于(int i=0;i,根据:

一个简单的文本扫描器,可以使用正则表达式解析原语类型和字符串。 扫描器使用定界符模式将其输入拆分为标记,默认情况下,定界符模式与空白相匹配。然后,可以使用各种next方法将生成的标记转换为不同类型的值

如果将默认分隔符替换为“\n”会怎样:

Scanner s = new Scanner(input).useDelimiter("\\\\n");

这就是它的工作原理!谢谢大家的关心!:)


for(int i=0;我能告诉我我们怎么做吗?我很高兴看到它工作!)
Scanner s = new Scanner(input).useDelimiter("\\\\n");
  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();
  }