JavaSE基础--用户转换 Scanner

Scanner

首先我们写一个程序,一定是为了服务别人,不可能自己一个人玩,所以我们必须要通过某种方式来实现,用户转换。

Java 就给我们留了一个叫做Scanner 的工具类,来实现这个操作。

  1. 在类(class) 的上方导入装有我们Scanner使用权限的,也就是 import java.util.Scanner;

  2. 新建一个扫描器 ( new Scanner)

  3. 参数里输入 (System.in); 这样就会开始从键盘接收数据

  4. 输入Scanner scan ,也就是把扫描器存起来,要用的时候直接输入scan

  5. scan.close 用完记得把扫描器给关了。

JavaSE基础--用户转换 Scanner

这里为了详细,就把步骤都打了,真的操作只要把1) 4) 5) 写下来就行。

关于对象的名字,这里我们把他叫做了scan,只有一个要求,得让每个程序员都看懂,不然的话很难一起写程序,所以我们写代码的时候要讲究一个良好的规范性。所以最好用scan 或者scanner来命名。

用户转换 and 数据类型

那么在建立和存储了扫描器之后,我们可以开始进行用户转换了。

  1. 输入容器的名字 scan + .next 这样他就会开始等待你输入了

  2. 我们还可以进行数据类型的限制比如 scan.nextInt(); ,只接受Int 类型的数据

  3. 接收到的数据得存起来,否则会被刷新,导致数据丢失。

JavaSE基础--用户转换 Scanner

正常写不需要中间的那一行,只取最后一行就行,这里为了让大家清楚些,剖析了全过程。

注意事项

  1. scan.next 如果不进行限制,默认的是字符串类型 (String)

  2. scan.next 在输入空格之后将不再接收这一行的数据

    空格/回车= 回车打断输入

  3. scan.nextLine 会接收一整行的数据,且不会被空格打破。

    回车=回车打断输入

hasNext 和 next

1)scanner.hasNext();
2)scanner.next();

我们来看一下这两者之间的差别:

hasNext 也可以实现用户转换的操作,不过他是一种布尔表达式的句子,也就是结果永远只为true or false。

他会把输入权限交给我们,等我们输入了之后,去进行一个判断,hasNext ===> 是否还有下一行。 我们甚至还可以给他进行类型限制

比如:

scanner.hasNextDouble();

这样他就会去判断输入的是不是double 类型的数据,如果‘是’结果则为’真‘,反之则为假。

由于是一个布尔表达式,当然也可以作为条件句进入if 选择结构 或者while 循环结构里

if(scanner.hasNextDouble){
    System.out.println("结果为真就输出这句,否则就跳过")
}

在 if 选择结构,当程序运行到scanner.hasNextDouble 的时候他会实行用户转换,让我们去输入,如果条件符合,则会运行 { } 区块里的代码,反之直接跳过。

这里有个点要特别注意,由于通过hasNext的方法接收的数据,返回,只能是true or false ,在while 循环结构里,如果是真的,他会一直重复。

while(scanner.hasNextDouble){
    System.out.println("数据一直为真,会重复输入这一句!");
}

比如我输入一个9,那么条件句Double成立,并且无法改变数字,所以他会一直一直重复输出语句里的东西。很显然这样子程序会陷入一个死循环,导致程序奔溃,死机。

怎么办?

hasNext 有一种特性,当周围有另一个接收器的时候 (scanner), 会把用户输入的值赋予给离自己最近的接收器,来实现 刷新 判断语句数据的操作。

while(scanner.hasNextDouble){// 一开始我是10
    double num = scanner.nextDouble;// 最近的接收器,那我把10给你,然后我刷新了,现在是0 
    System.out.println();
}//走完一个循环了,重新输入数据,直到不是Double类型我就停下来。
上一篇:Java编程练习


下一篇:快排模板