一、Scanner类
情景:
调用两个方法:nextInt()和nextLine(),第一行输入数字,直接回车,准备输入字符串,发现输入已经结束了。此时涉及到java中Scanner类nextInt之后用nextLine无法读取输入的问题:
原因:
当我们输入数字的时候,因为nextInt()只会以为空格和回车符结束,但是此时按下了回车,(next()不会读取回车符)但是nextLine()会读取回车符,又因为nextLine()以回车符结束,所以此时直接就跳过了我们输入,程序直接结束了。
解决办法:
1.可以再nextInt()方法后面多加一句nextLine()方法专门用来取出缓冲区中留下的空白符。
2.可以只用nextLine()方法,然后通过Integer类中的parseInt()方法解析成int数据。因为nextLine()方法会自动清理掉后边的空白符,这种方法就不会产生最开始那种错误了。
附:
next(),nextInt()和nextFloat():从有实际数据的地方开始读,看到空格符或回车符认为读取结束,但是不会读取空格符和回车符。
nextLine():调用就读取,第一个数据可以是空格符或回车符,以回车符结束,会读取空格符和回车符。
二、快输
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out));
//输入int型数据时,需要先输入字符串,以空格分隔,赋给字符串数组,再转成int型数据
String[] s=in.readLine().split(" ");
int n=Integer.parseInt(s[0]);
int m=Integer.parseInt(s[1]);
//BufferedWriter.writer(int c)方法写的不是一个int型数据,而是一个character型数据
//因此,在用BufferedWriter.writer写数据的时候,如果要写int型数据,可以先把它转成String型的数据,这样就可以直接写了。
out.write(n+""+"\n");//out.write(n+"\n");
out.write(m+"");
//BufferedWriter是缓冲输出流,意思是调用BufferedWriter的write方法时候。数据先从JVM内存写入到缓冲区里,并没有直接写到目的文件。
//所以,调用BufferedWriter的flush()方法时,会刷新,也就是把数据写入到目标文件。或者可以调用BufferedWriter的close()方法,该方法会在关闭该输入流之前先调用flush()方法,也会把数据写入到目标文件里。
out.flush();