java与算法Day1 Scanner的应用(一)

发布时间 2023-12-06 15:48:22作者: 一个衰仔

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);
      		}
      	}
      }