java中使用输入需要用到java.util.Scanner。Scanner有next,nextInt,nextString,hasNext,hasNextLine等方法。
- 使用 XXX variable = Scanner.NextXXX就可以获取一个输入值。next系列的方法,他们的作用都是从键盘中接收数据。当程序执行到他们的时候,在命令行中就开始等待键盘输入了,而且要注意的是,这一系列方法的结束标志都是’\n’ 也就是回车,next方法不能录入空格,在特定情况下会把空格当作回车
一个简单的例题:输入a和b,输出a+b的值
import java.io.*; import java.util.*; public class Main { public static void main(String args[]) throws Exception { Scanner cin=new Scanner(System.in); int a = cin.nextInt(), b = cin.nextInt(); System.out.println(a+b); } }
- hasNext方法会判断接下来是否有非空字符.如果有,则返回true,没有则阻塞。hasNextLine方法会根据行匹配模式去判断接下来是否有一行(包括空行),如果有,则返回true
-
hasNext、hasNextLine在返回一个boolean类型结果true的同时,会在堆空间中开辟一块专门用于存放刚刚输入的字符串,用于下次next或者nextLine:即下次next或者nextLine不需要再从键盘输入,相当于系统自动把刚刚输入的字符串再原封不动的输入了一遍。同时这个存储寿命=调用对象的寿命
-
对于hasNext来说,每次敲击回车都相当于在堆空间中开辟一行,敲几次回车就会直接给后续next、nextLine方法赋值几次
-
hasNext是线程阻塞的,对于hasNext来说,如果一直不输入字符,反而一直敲回车的话,整个线程会卡在这个输入的地方,直到有字符输入
例题:计算a+b,输入包含一系列的a和b对,通过空格隔开。一对a和b占一行。对于输入的每对a和b,你需要依次输出a、b的和。如对于输入中的第二对a和b,在输出中它们的和应该也在第二行。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner Scan = new Scanner(System.in); while(Scan.hasNextLine()) {//当判断到有回车时,在堆空间开辟一块用来存放之前输入的内容 int a1 = Scan.nextInt();//读取堆空间的内容 int a2 = Scan.nextInt(); int a = a1 + a2; System.out.println(a); } } }
-