Scanner方法的使用
1、关于对象.nextLine();的使用
正确代码
package test;
import java.util.*;
public class Test
{
public static void main(String []args)
{
Scanner scan=new Scanner(System.in);
double a=scan.nextDouble();
int b=scan.nextInt();
scan.nextLine(); //吸收回车键
String s=scan.nextLine();
scan.close();
System.out.println("数据:"+a);
System.out.println("数据:"+b);
System.out.println("数据:"+s);
}
}
错误代码
package test;
import java.util.*;
public class Test
{
public static void main(String []args)
{
Scanner scan=new Scanner(System.in);
double a=scan.nextDouble();
int b=scan.nextInt();
//scan.nextLine(); //吸收回车键
String s=scan.nextLine();
scan.close();
System.out.println("数据:"+a);
System.out.println("数据:"+b);
System.out.println("数据:"+s);
}
去掉scan.nextLine();在程序运行可能会出错。我还没输入第三个数据,程序就直接输出了,因为使用了 .nextLine();
把回车键当成我所输入的内容给输出了。
用空格代替回车符的话…emmmm直接贴图
第三个数据最前面多了个空格。。。。。
所以还是要用scan.nextLine();来吸收回车键。
2、要记得关闭输入流 ——————scan.close();
需要自己close的东西,一般都是用了虚拟机之外的资源,例如端口,显存,文件等,虚拟机无法通过垃圾回收释放这些资源,只能你显式调用close方法来释放。
许多情况下,如果在一些比较频繁的操作中,不对流进行关闭,很容易出现输入输出流经超越了JVM的边界,所以有时可能无法回收资源。
所以流操作的时候凡是跨出虚拟机边界的资源都要求程序员自己关闭,不要指望垃圾回收。
你读一个文件,忘记关闭了流,你在操作系统里对这个文件的写,删除等操作就会报错,告诉你这个文件被某个进程占用。
上面这段转自https://blog.****.net/injurooioo/article/details/73551444
虽然我也不太理解。