所以我得到了一个有效的计算器,得到了+, - ,/,*它在询问用户是否要继续之后关闭了,这里的事情是我试图将其分解为不同的类,所以我得到了一个主类应用程序,它只询问用户获取运算符代码的东西和类等 但是我真的不知道该怎么做我尝试制作不同的课程,并将每个课程都放在一个单独的课程中,但是你们中的任何一个人都没有帮助吗?
这是我的代码ATM
package com.example.main;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
boolean status = true;
while (status){
Scanner minScanner = new Scanner(System.in);
System.out.println("Skriv in ditt nummer en och en :\n");
double nr1 = Double.parseDouble(minScanner.nextLine());
double nr2 = Double.parseDouble(minScanner.nextLine());
System.out.println("välj vad du vill göra: ");
double svar = 0;
String användarInlägg = minScanner.nextLine();
if (användarInlägg.equalsIgnoreCase("+"))
{
svar = nr1 + nr2;
} else if (användarInlägg.equalsIgnoreCase("-"))
{
svar = nr1 - nr2;
} else if (användarInlägg.equalsIgnoreCase("*"))
{
svar = nr1 * nr2;
} else if (användarInlägg.equalsIgnoreCase("/"))
{
svar = nr1 / nr2;
}
System.out.printf("= %.2f\n ", svar);
System.out.println("Skriv in J för att fortsätta N för att sluta: \n");
String input = minScanner.nextLine();
if (input.equalsIgnoreCase("N"))
status = false;
else if (input.equalsIgnoreCase("J")) {
status = true;
}
}
}
}
答案 0 :(得分:0)
你所拥有的是一个非常原始的计算器,因为它只支持像2 3 +
这样的表达式
如果你不想评估更复杂的表达式,那么excellent blog post about pratt parsers已经完成了大部分工作。添加评估真的很容易。这使得可扩展的良好结构化和健壮的解析器成为可能。添加函数,条件和三元运算符也很简单?:。
我用它来评估(2.4 + -5)/(2.4 - -5) * 100/(2.4 * -5)
这样的表达式只需54纳秒,当编译成字节码时(运行时)只需5纳秒!
答案 1 :(得分:0)
interface MathOp {
public double doMath(double a, double b);
}
class Add implements MathOp{
public double doMath(double a, double b) {
return (a + b);
}
}
class Sub implements MathOp{
public double doMath(double a, double b) {
return (a - b);
}
}
// do the same for multiplication and divison
使用main方法的类中的
class SimpleCalc {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double a,b,c;
int choice = 0;
a=b=c=0.0;
while(true) {
System.out.println("Enter two numbers");
a = Double.parseDouble(sc.nextLine());
b = Double.parseDouble(sc.nextLine());
System.out.println("Enter your choice");
System.out.println("1. Add");
System.out.println("2. Sub");
System.out.println("3. Mul");
System.out.println("4. Div");
choice = Integer.parseInt(sc.nextLine());
switch(choice) {
case 1 :
c = new Add().mathOp(a,b);
break;
case 2 :
c = new Sub().mathOp(a,b);
break;
// do the same for the other classes and use a default case.
}
//print the results here and then ask the user's choice
System.out.println("would you like to continue? (Y/N)");
if("N".equalsIgnoreCase(sc.nextLine())) { // careful with the paranthesis
break;
}
}
}
}