知识补充
关于Scanner类及其中的方法使用
- 导包 Java.util
- 创建对象 Scanner input = new Scanner(System.in);
- 做事情
int value = input.nextInt();
String value = input.nextLine();
nextInt(nextFloat nextByte)、next、nextLine
在控制台进行输入的时候,我们经常会遇到一些问题,例如 :
System.out.println("请输入账号:");
String name = input.nextLine();
System.out.println("请输入密码:");
int password = input.nextInt();
这种写法在程序中没有任何的问题,那如果我们将做出以下改变呢?
System.out.println("请输入密码:");
int password = input.nextInt();
System.out.println("请输入账号:");
String name = input.nextLine();
程序中会直接跳过输入账号,最终只能输入密码。
下面就让我们解释一下这个常见的Scanner的小问题
解决方案
方案一:
System.out.println("请输入密码:");
int password = input.nextInt();//阻塞效果
input。nextLine();
System.out.println("请输入账号:");
String name = input.nextLine();
分析:因为出现这个的问题原因在于nextLine这个方法是读取回车符作为结束标志的,而nextInt方法是只能够读取回车符之前的内容(不包含回车符),因此先调用nextInt方法之后剩下了一个回车符在消息队列中,而当再次调用nextLine方法的时候直接终止了字符串的读取。所以提前利用nextLine方法读取一个回车符,提前让消息队列清空。
方案二:
System.out.println("请输入密码:");
int password = input.nextInt();//阻塞效果
System.out.println("请输入账号:");
String name = input.next();
next方法和nextInt方法一样,都是以回车符/空格结束,但是也是不读取回车符,从回车符之后读取。
方案三:
System.out.println("请输入密码:");
String password = input.nextLine();//阻塞效果
int pwd = Integer.parseInt(password);//利用包装类来实现类型转化
System.out.println("请输入账号:");
String name = input.nextLine();
将账号和密码全部都用nextLine来读取
Java小练习
实现一个计算器功能
public class Computer {
// 设计一个加法运算的方法
public float add(float a, float b) {
return a + b;
}
// 设计一个减法运算的方法
public float subtraction(float a, float b) {
return a - b;
}
// 设计一个乘法运算的方法
public float multiple(float a, float b) {
return a * b;
}
// 设计一个除法运算的方法
public float division(float a, float b) {
return a / b;
}
}
public class Test {
public static void main(String[] args) {
try (// TODO Auto-generated method stub
Scanner input = new Scanner(System.in)) {
System.out.println("请输入第一个数:");
String x1 = input.nextLine();
float a = Float.parseFloat(x1);
//可能会产生NumberformatException
while (true) {
System.out.println("请输入操作符:");
String op = input.nextLine();
if (op.equals("=")) {
System.out.println("执行完毕");
break;
}
if (!(op.equals("+") || op.equals("-") || op.equals("*") || op.equals("/"))) {
System.out.println("输入的符号有误!");
continue;
}
System.out.println("请输入第二个数:");
String x2 = input.nextLine();
float b = Float.parseFloat(x2);
Computer computer = new Computer();
switch (op) {
case "+":
a = computer.add(a, b);
break;
case "-":
a = computer.subtraction(a, b);
break;
case "*":
a = computer.multiple(a, b);
break;
case "/":
a = computer.division(a, b);
break;
}
System.out.println(a);
}
}
}
}
三连博主!每天分享一个编程小技巧!