Java 如何仅使用一种方法制作此计算器?
我在试着做这个计算器 我可以使用4种方法,一种是加法,一种是减法,还有。。。。。但我想让它尽可能简单。 如何使用一个方法执行4个主要操作,然后在static main中调用它Java 如何仅使用一种方法制作此计算器?,java,methods,Java,Methods,我在试着做这个计算器 我可以使用4种方法,一种是加法,一种是减法,还有。。。。。但我想让它尽可能简单。 如何使用一个方法执行4个主要操作,然后在static main中调用它 package com.company; import java.util.Scanner; public class Main { final static String first = "first number: "; final static String sec = &qu
package com.company;
import java.util.Scanner;
public class Main {
final static String first = "first number: ";
final static String sec = "second number: ";
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("what do you want to use? (multiply (input *), divide (input /), subtract (input -), addition (input +)");
String input = scanner.nextLine();
double answer = calculation(input); ----------------------
System.out.println(answer);
}
public static double calculation(double element){ ----------------------
Scanner scanner = new Scanner(System.in);
System.out.println(first);
double firstInput = scanner.nextDouble();
System.out.println(sec);
double secInput = scanner.nextDouble();
return firstInput element secInput; ----------------------
}
}
我可以将元素
更改为(+-*/
)吗?
(部分是我有问题吗)你可能想看看OOP原理,使用继承和多态性,你应该能够在一个接口中定义一个方法,在你的类中定义它的多个实现,因此,您可以有一个带有execute方法的计算接口,然后使用类Sum实现该接口,其中execute方法执行实和
public interface Calculation {
Double execute(Double a, Double b);
}
public class Sum implements Calculation {
@Override
public Double execute(Double a, Double b) {
return a+b;
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("what do you want to use? (multiply => *, divide => /, subtract => -, addition => +");
String input = scanner.nextLine();
Calculation calculation;
if (input.equals("+")) calculation = new Sum();
else calculation = new Sum();// Just initializing calculation to avoid compilation error
double answer = execute(calculation);
}
private static double execute(Calculation calculation){
Scanner scanner = new Scanner(System.in);
double firstInput = scanner.nextDouble();
System.out.println(firstInput);
double secInput = scanner.nextDouble();
System.out.println(secInput);
return calculation.execute(firstInput, secInput);
}
}
您可以使用
enum
和lambda
函数执行它。这种方法允许您轻松地向代码中添加操作,而无需重写计算方法。
首先,将Scanner
与一起使用try with resources
或调用Scanner。在Scanner
之后,不再需要关闭()。那么最好不要创建两个扫描仪对象
,而只需将输入部分合并到一个方法中(如果仍要使用两个Scanner
实例,请记住将System.in
包装到decorator中,以防止其关闭)。您还可以添加一些验证来防止输入错误(并让用户再次尝试输入数据)。其主要思想是创建enum,该enum为应用于数字对的每个操作都包含一个双函数
。它可能是这样的:
公共类主{
私有最终静态字符串first=“第一个数字:”;
私有最终静态字符串sec=“第二个数字:”;
公共静态void main(字符串[]args){
try(扫描器=新扫描器(System.in)){
字符串operationTypes=Arrays.stream(OperationType.values())
.map(type->String.format(“%s(输入%s)”,type.toString(),type.sign))
.collect(收集器.连接(“(”,“,”,“,”));
System.out.println(“您想使用什么?”+操作类型);
字符串输入=scanner.nextLine();
System.out.println(第一);
double firstInput=scanner.nextDouble();
系统输出打印项次(秒);
double secInput=scanner.nextDouble();
OperationType OperationType=OperationType.fromSign(输入).OrelsThrow();
双答案=计算(操作类型、第一输入、第二输入);
System.out.println(应答);
}
}
公共静态双重计算(OperationType OperationType、double firstInput、double secInput){
返回operationType.operation.apply(firstInput,secInput);
}
枚举操作类型{
加(“+”,Double::sum),
减去(“-”,(a,b)->a-b),
乘(“*”,(a,b)->a*b),
除以(“/”,(a,b)->a/b);
字符串符号;
双功能操作;
操作类型(字符串符号、双功能操作){
这个符号=符号;
这个操作=操作;
}
公共静态可选fromSign(字符串符号){
返回Arrays.stream(OperationType.values())
.filter(operationType->operationType.sign.equals(符号))
.findAny();
}
@凌驾
公共字符串toString(){
返回此.name().toLowerCase();
}
}
}
你确定元素
应该是double
类型吗?我知道不应该是,但我不知道用什么来代替itelement应该是枚举类型。好的,我会给它一个trynope枚举不起作用(或者我不知道如何使用它)你能给我一个源代码或者一些我能更好理解的东西吗(我刚刚编辑了我的原始答案,这对你有帮助吗?很好,你了解代码背后的原理吗?这些OOP原则对于一个设计良好的应用程序来说非常重要,现在对你来说可能不是必要的,但是如果你需要进一步的解释,我很乐意帮助你。是的,谢谢你,我不理解,正在浏览你的答案。)utube xD,一个解释会非常有用。所以,我认为您应该注意的第一件事是如何使用多态性,这是一个棘手的概念,直到您开始将其付诸实践。它基本上意味着当您有一个父类或接口时,您可以在您自己的类中重写其方法,并在不同的类中执行不同的逻辑这基本上解释了为什么你可以声明Calculation
,然后在Sum
中重写它的方法。Thaaanks它起作用了。我想我要学习enum了