文章目录
- 前言
- 简易计算器
前言
今日的小练习为用户输入两个数,简易实现两数的加减乘除并可重复使用。
实现这个小功能有了大概的思路其实还好,但是我却没有止步于此,为了提升用户的体验性,保证这个小程序的容错率,我花了很长时间去模拟用户错误输入各种情况时去如何保证程序的健壮性。
比如用户错误输入字母,由于我使用了Scaner类,当用户输入的参类型与定义的类型不一致时会报错:
菜单
------------------
1.计算加法
2.计算减法
3.计算乘法
4.计算除法
5.退出程序
请选择对应功能前序号:
q
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at com.nutprince.java.demo5.main(demo5.java:10)
进程已结束,退出代码1
上网查询了好多资料,由于我还没学面向对象(只学习了相关基础语法),也不知道怎么用try-catch等去捕获异常,看得我很头大(这个坑等以后学完相关基础回来再优化优化,哈哈😀),于是我用来折中的办法使用while去捕获异常,并提示用户正确输入。
在测试的时候,还有一个问题就是当用户选择一个不存在序号的功能时,提示用户重新选择,直到用户正确选择时,程序继续;这里当初想用if去判断发现不行,用while又需要重新接受用户输入,于是我goto语句帮助用户返回上一步,以重新选择正确功能。
简易计算器
用户输入两个数实现简单计算:
import java.util.Scanner;
public class demo5 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
outer:while (true) {
CalMeau(); //展示菜单
while(!scan.hasNextInt()) //判断用户是否正确输入整数,若没有则直到输入整数为止
{
String useless = scan.next();
System.out.println("选择功能有误,请重新选择!");
}
int user = scan.nextInt();
while (user < 1||user > 5){
System.out.println("无功能,请重新选择!");
continue outer;
}
//判断用户是否正确选择功能,若没有则直到输入已有功能为止
user_tips(user); //询问用户是否退出
System.out.println("请输入第一个数:");
while(!scan.hasNextDouble()) //判断用户是否正确输入,若没有则直到正确输入为止
{
String useless = scan.next();
System.out.println("不是数字,请重新输入!");
}
double a = scan.nextDouble();
System.out.println("请输入第二个数:");
while(!scan.hasNextDouble()) //判断用户是否正确输入,若没有则直到正确输入为止
{
String useless = scan.next();
System.out.println("不是数字,请重新输入!");
}
double b = scan.nextDouble();
main_exe(user, a, b); //计算器主程序
}
}
//菜单功能
public static void CalMeau() {
System.out.println("\t " + "菜单" + "\t");
System.out.println("------------------");
System.out.println("\t" + "1.计算加法" + "\t");
System.out.println("\t" + "2.计算减法" + "\t");
System.out.println("\t" + "3.计算乘法" + "\t");
System.out.println("\t" + "4.计算除法" + "\t");
System.out.println("\t" + "5.退出程序" + "\t");
System.out.println("请选择对应功能前序号:");
}
//计算器主程序
public static void main_exe(int user,double a,double b){
switch (user) {
case 1:
addition(a,b);
break;
case 2:
subtraction(a, b);
break;
case 3:
multiplication(a, b);
break;
case 4:
division(a, b);
break;
case 5:
System.exit(1);
}
}
//询问用户是否退出
public static void user_tips (int user) {
if (user == 5) {
System.out.println("程序正常退出,欢迎下次使用!");
System.exit(1);
}
}
//加法
public static void addition ( double a, double b){
System.out.println(a + "+" + b +"=" + (a + b));
}
//减法
public static void subtraction ( double a, double b){
System.out.println(a + "-" + b +"=" + (a - b));
}
//乘法
public static void multiplication ( double a, double b){
System.out.println(a + "*" + b +"=" + (a * b));
}
//除法
public static void division ( double a, double b){
System.out.println(a + "/" + b +"=" + (a / b));
}
}
输出:
菜单
------------------
1.计算加法
2.计算减法
3.计算乘法
4.计算除法
5.退出程序
请选择对应功能前序号:
9
无功能,请重新选择!
菜单
------------------
1.计算加法
2.计算减法
3.计算乘法
4.计算除法
5.退出程序
请选择对应功能前序号:
r
选择功能有误,请重新选择!
1
请输入第一个数:
g
不是数字,请重新输入!
1
请输入第二个数:
1
1.0+1.0=2.0
菜单
------------------
1.计算加法
2.计算减法
3.计算乘法
4.计算除法
5.退出程序
请选择对应功能前序号:
5
程序正常退出,欢迎下次使用!
进程已结束,退出代码1