2014-07-12 31 views
-1

我正在使用Eclipse中的一个小型计算器,用户在此输入方程式如1 + 1。但是,我不确定如何让用户输入更复杂的方程式,如1 + 2 * 3/4在Java计算器中允许多个输入

另外,如果用户试图输入一个不是有效等式的字符串,我想要出现一个错误。这里是我的代码:

public static double addition(double x, double y) // The Addition Operation 
{ 
    double add = x + y; 
    return add; 
} 

public static double subtraction(double x, double y) // The Subtraction Operation 
{ 
    double sub = x - y; 
    return sub; 
} 

public static double division(double x, double y) // The Devision Operation 
{ 
    double div = x/y; 
    return div; 
} 

public static double multiplication(double x, double y) // The Multiplication Operation 
{ 
    double multi = x * y; 
    return multi; 
} 

public static double factorial(double x) // The Factorial (F!) 
{ 
    double result = 1; 
    while (x > 1) 
    { 
     result = result * x; 
     x = x - 1; 
    } 
    return result; 
} 

static Scanner scanner = new Scanner(System.in); // a Global Scanner. 

public static void main(String[] args) 
{ 
    double numb1, numb2; 
    char operation; 
    System.out.println("Enter Your Equation: "); 

    // Split string by space 
    String[] parts = scanner.nextLine().split(""); 

    // Convert to corresponding types 
    operation = parts[1].charAt(0); 

    switch (operation) 
    { 
     case '+': 
      numb1 = Integer.parseInt(parts[0]); 
      operation = parts[1].charAt(0); 
      numb2 = Integer.parseInt(parts[2]); 
      System.out.println("The Product is: " + addition(numb1, numb2)); 
      break; 

     case '-': 
      numb1 = Integer.parseInt(parts[0]); 
      operation = parts[1].charAt(0); 
      numb2 = Integer.parseInt(parts[2]); 
      System.out.println("The Product is: " + subtraction(numb1, numb2)); 
      break; 
     case '*': 
      numb1 = Integer.parseInt(parts[0]); 
      operation = parts[1].charAt(0); 
      numb2 = Integer.parseInt(parts[2]); 
      System.out.println("The Product is: " + multiplication(numb1, numb2)); 
      break; 
     case '/': 
      numb1 = Integer.parseInt(parts[0]); 
      operation = parts[1].charAt(0); 
      numb2 = Integer.parseInt(parts[2]); 
      System.out.println("The Product is: " + division(numb1, numb2)); 
      break; 
     case '!': 
      numb1 = Integer.parseInt(parts[0]); 
      operation = parts[1].charAt(0); 
      System.out.println("The Product is: " + factorial(numb1)); 
    } 
} 
+0

我建议使用一些正则表达式规则来分割大字符串与运营商的许多数字.. http://www.dreamincode.net/forums/topic/236807-regex-use-for-a-simple-calculator-应用/ 这可能对你有所帮助 – HackerGK

+0

对于“加法”方法的注释'//加法操作'是完全不需要的

+0

@ l19但是......但是,你会如何知道它的作用? –

回答

5

有一些简单的方法已经评价Java中的表达,但假设这是学习的目的:

解析数学公式的最棘手的部分是占的顺序操作 - 也就是说,你不能只是遍历公式并逐点计算它(在这种情况下,像3 + 2 * 5就会失败)。

你在找什么是解析中缀表达式的方法;关于该主题的部分here将引导您了解您必须完成的基本概念。这里没有Java代码,但是它会从中获得乐趣,对吧?

+0

aha ok,感谢您的帮助 –