前言
小白在观看零基础学习Java的视频中留意到了一份关于流程控制、Java方法综合实践的作业,就是标题的写一个计算器。
通过初步的实践笔者发现这确实是一个非常不错的作业,看上去十分简单但也能够充实地让我重新复习一遍前面所学到的知识并加以运用。
这是笔者学习视频的地址:【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili
(如有侵权,联系我后自删)
代码部分
考虑到有可能有同学和笔者一样刚学到这部分,所以直接先上个代码。
//计算器 //加减乘除 public class TestDemo { public static void main(String[] args) { System.out.println("请按照计算器方式逐个进行输入:"); Scanner scanner = new Scanner(System.in); int[] numbers = new int[10]; String[] sign = new String[10]; double[] input = new double[10]; int j = 0; int k = 0; while (true){ int i = 0; if(scanner.hasNextInt()) { int temp = scanner.nextInt(); if(ifNumber(temp)) { numbers[i] = temp; input[k] = 10*input[k]+numbers[i]; i++; } }else { sign[j] = scanner.next(); if(sign[j]=="=") { break; } if (ifSign(sign[j])) { j++; k++; } else { break; } } } scanner.close(); double temp = 0; for(int i = 0;i < j;i++) { System.out.print(input[i] + " " + sign[i] + " " + input[i+1]+" "); temp+= calculator(input[i],input[i+1],sign[i]); } System.out.println("= "+temp); } public static double calculator(double num1, double num2, String sign){ double result = 0; switch (sign){ case "+": result = add(num1,num2); break; case "-": result = minus(num1,num2); break; case "*": result = mul(num1,num2); break; case "/": if(num2==0){ System.out.println("无法计算"); break; } result = divide(num1,num2); break; default: System.out.println("无法计算"); } return result; } public static double add(double num1, double num2){ return num1+num2; } public static double minus(double num1, double num2){ return num1-num2; } public static double mul(double num1, double num2){ return num1*num2; } public static double divide(double num1, double num2){ return num1/num2; } public static boolean ifNumber(int num){ switch (num){ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: return true; default: return false; } } public static boolean ifSign(String sign){ switch (sign){ case "+": case "-": case "*": case "/": case ".": return true; default: return false; } } }
思路部分
根据视频中推荐的思路,我决定通过main方法获取用户输入,通过Scanner交互完成,随后传参调用计算器方法再用switch分支来决定调用哪种运算法则完成运算,而加、减、乘、除这几个计算过程就通过计算器方法进行调用,最后输出结果。
初步实现计算器中笔者遇到最大的困难是如何完成用户交互,实际操作发现仅通过前面学习的知识想要一次性地从假设的目标语句“1+1=”中精准分离数字和符号十分困难,在前面学习的Scanner方法中没有单独分辨“+”,”=”的方法,而scanner.next()返回的类型是除了空白外的整个字符串。
因此笔者放弃整局的输入而改用了跟普通计算器一样逐个输入,在死循环while(true)中读取用户输入,如果读到0~9的整数就保存,读到非整数就跟提前保存的合法运算符进行对比,符合就保留不符合就不保存,读到“=”就结束循环。
除此之外这个运算器的实现也没有什么难点就不逐一说明了。
部分结果展示
总结
这是笔者第一次用博客记录自己的学习成果,更多的是想与同样处于基础学习的同学们分享一下自己通过这个小作业所学习到的一些点。不过由于笔者没有养成习惯,写的代码基本没有注释十分抱歉。
这个计算器的代码十分简陋,有许多诸如多元运算,小数点,负数为首的情况尚未完善,望谅解。