简单的Calc用户输入,我需要将其分解为Java eclipse的不同类

时间:2013-09-26 07:07:46

标签: java eclipse class calculator

所以我得到了一个有效的计算器,得到了+, - ,/,*它在询问用户是否要继续之后关闭了,这里的事情是我试图将其分解为不同的类,所以我得到了一个主类应用程序,它只询问用户获取运算符代码的东西和类等 但是我真的不知道该怎么做我尝试制作不同的课程,并将每个课程都放在一个单独的课程中,但是你们中的任何一个人都没有帮助吗?

这是我的代码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;
            }
    }

}

}

2 个答案:

答案 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;
      }
    }
  }
}