2015-03-25 86 views
-2

需要一种方法来完成我的'高级'计算器。我一直在用循环进行头脑风暴,但我很困惑自己。关于如何将操作数实现为数字的任何想法,而不是仅仅嵌套一堆if语句和硬编码。。实现多个操作数

import java.util.*; 

公共类计算器{

public static void main(String[] args) { 

    Scanner scan = new Scanner(System.in); 
    System.out.println("welcome to your personal calculator. is your problem simple or advanced(multiple calculations)\n" 
      + "Type 1 for simple or 2 for advanced"); 
    int choice = scan.nextInt(); 
    if(choice == 1){ 
     System.out.println("Simple equation"); 

     System.out.println("Enter the first number"); 
     int firstnum = scan.nextInt(); 
     System.out.println("Enter the second number"); 
     int secondnum = scan.nextInt(); 
     System.out.println("are you adding, subtracting multiplying or dividing? ENTER +,*,-, or /"); 
     String operand = scan.next(); 
     if(operand.equals("+")){ 
      int solution = firstnum + secondnum; 
      System.out.println(firstnum + operand + secondnum + "=" + solution); 
     } 
     else if (operand.equals("*")){ 
      int solution = firstnum * secondnum; 
      System.out.println(firstnum + operand + secondnum + "=" + solution); 
     } 
     else if(operand.equals("-")){ 
      int solution = firstnum - secondnum; 
      System.out.println(firstnum + operand + secondnum + "=" + solution); 
     } 
     else if(operand.equals("/")){ 
      int solution = firstnum/secondnum; 
      System.out.println(firstnum + operand + secondnum + "=" + solution); 
     } 
     else{ 
      System.out.println("Did not recognize operation type please restart program."); 
      return; 
     } 

     } 

    else if(choice == 2){ 
     System.out.println("Advanced equation"); 
     System.out.println("How many numbers are in your equation? max of 7\n" 
       + "operands are chosen by typing +,-,*,or /"); 
     int numofnumbers = scan.nextInt(); 
     if(numofnumbers == 2){ 
      System.out.println("enter first num"); 
      int firstnum = scan.nextInt(); 
      System.out.println("enter second num"); 
      int secondnum = scan.nextInt(); 
      System.out.println("enter operand"); 
      String operand = scan.next(); 
      if(operand.equals("+")){ 
       int solution = firstnum + secondnum; 
       System.out.println(firstnum + operand + secondnum + "=" + solution); 
      } 
      else if (operand.equals("*")){ 
       int solution = firstnum * secondnum; 
       System.out.println(firstnum + operand + secondnum + "=" + solution); 
      } 
      else if(operand.equals("-")){ 
       int solution = firstnum - secondnum; 
       System.out.println(firstnum + operand + secondnum + "=" + solution); 
      } 
      else if(operand.equals("/")){ 
       int solution = firstnum/secondnum; 
       System.out.println(firstnum + operand + secondnum + "=" + solution); 
      } 
      else{ 
       System.out.println("Did not recognize operation type please restart program."); 
       return; 
      } 

     } 
     else if(numofnumbers == 3){ 
      System.out.println("enter first num"); 
      int firstnum = scan.nextInt(); 
      System.out.println("enter second num"); 
      int secondnum = scan.nextInt(); 
      System.out.println("enter thir num"); 
      int thirdnum = scan.nextInt(); 
     } 
     else if(numofnumbers == 4){ 
      System.out.println("enter first num"); 
      int firstnum = scan.nextInt(); 
      System.out.println("enter second num"); 
      int secondnum = scan.nextInt(); 
      System.out.println("enter third num"); 
      int thirdnum = scan.nextInt(); 
      System.out.println("enter fourth num"); 
      int fourthnum = scan.nextInt(); 
     } 
     else if(numofnumbers == 5){ 
      System.out.println("enter first num"); 
      int firstnum = scan.nextInt(); 
      System.out.println("enter second num"); 
      int secondnum = scan.nextInt(); 
      System.out.println("enter third num"); 
      int thirdnum = scan.nextInt(); 
      System.out.println("enter fourth num"); 
      int fourthnum = scan.nextInt(); 
      System.out.println("enter fifth num"); 
      int fifthnum = scan.nextInt(); 
     } 
     else if(numofnumbers == 6){ 
      System.out.println("enter first num"); 
      int firstnum = scan.nextInt(); 
      System.out.println("enter second num"); 
      int secondnum = scan.nextInt(); 
      System.out.println("enter third num"); 
      int thirdnum = scan.nextInt(); 
      System.out.println("enter fourth num"); 
      int fourthnum = scan.nextInt(); 
      System.out.println("enter fifth num"); 
      int fifthnum = scan.nextInt(); 
      System.out.println("enter sixth num"); 
      int sixthnum = scan.nextInt(); 
     } 
     else if(numofnumbers == 7){ 
      System.out.println("enter first num"); 
      int firstnum = scan.nextInt(); 
      System.out.println("enter second num"); 
      int secondnum = scan.nextInt(); 
      System.out.println("enter third num"); 
      int thirdnum = scan.nextInt(); 
      System.out.println("enter fourth num"); 
      int fourthnum = scan.nextInt(); 
      System.out.println("enter fifth num"); 
      int fifthnum = scan.nextInt(); 
      System.out.println("enter sixth num"); 
      int sixthnum = scan.nextInt(); 
      System.out.println("enter seventh num"); 
      int seventhnum = scan.nextInt(); 
     } 
    } 
    else{ 
     System.out.println("you did not type one or two. please restart program."); 
     return; 
    } 

}}

+0

http://stackoverflow.com/questions/29224513/java-beginner-code-snippet-help-code-not-working我的这个问题也需要另一个答案。我有一个答案解决了它,但它仍然没有正常工作,所以它会很好,如果我可以得到一些建议,这个问题也 – taintedpyro813 2015-03-25 03:26:55

+0

而不是限制你的程序非常具体的输入,你应该考虑如何采取一个典型的数学表达式作为一个字符串并解析/评估它。看看这里http://stackoverflow.com/questions/13662001/java-string-to-math-equation – user1274820 2015-03-25 04:51:51

回答

1

我喜欢这个挑战,因为它是如此重要的是什么电脑都在首位制成的计算公式!首先想到的是计算机本身如何执行这些操作。据我了解,计算机一次执行一项操作(你得到了正确的部分!),然后存储结果并基本重新评估剩下的问题,就好像该操作已完成一样。

SO 4 + 3 + 2

简直变成

7 + 2

为了做这种事情在Java中,我认为这是最好的熟悉一些概念,如ArrayList和String.split。

您需要ArrayList来解决问题,而不是更传统的数组,因为问题的长度将在整个程序中发生变化,正如我们上面用4 + 3 + 2示例所看到的。所以如果你想用循环来循环访问一个数组,但是数组需要越来越短,这可能会变得非常复杂。

ArrayList是一个很棒的对象,它为我们提供了一个具有各种有用方法的动态“表单”数组。

你可以像这样声明一个ArrayList。

ArrayList<*variable type*> *Name* = new ArrayList<*same variable type*>(); 

然后可以使用一堆不同的方法,例如。新增将项目添加到列表的末尾(增加由1的长度),卸下摆臂到删除项目(及其含有指数将长度减1)和替换Array [idx]的.get(idx)。

现在您将要将运算符存储在与操作数相同的对象中,因为您要维护它们的顺序。为了做到这一点,你最好的选择就是把整个条目存储为一个字符串,就像一个句子一样,然后你就可以把整个东西分开。这是String.split进来

你可以看看它的使用这个真棒项:

https://stackoverflow.com/a/13525053/4710112

使用此:

String.split("(?<=[-+*/])|(?=[-+*/])"); 

可以返回包含数组每个数字紧跟其运营商的顺序。

SO 4 + 3 + 2

成为

4,+ 3,+,2

现在,这是非常重要的!

您不能将从分割区返回的数组直接放入数组列表中! 您必须首先将其存储在传统数组中,然后使用for循环和ArrayList.add()将其“喂”到ArrayList中。

现在我不打算为你解决这个问题,因为我相信你会想知道你自己。但随时打我!

哦,最后几件事情。您将需要.parseToDouble将ArrayList中的字符串转换为双精度,并将.toString将它们转换回字符串并将它们放回到ArrayList中。

哦,你应该学会编写和调用方法,将使你的生活在组织方面更容易。

例如在主代替:

double result; 
double a; 
double b; 
result = a+b 

你可以这样做:

result = add(a,b); 

只要你写的方法主要之下:

public double add(double x, double y){ 

double tempResult; 
tempResult = x + y; 
return tempResult; 
} 

可能看上去首先打字,但当你习惯于编写这样的方法时,你会发现你的整体代码变得很短r和更短

+0

只是想补充说你的示例方法可以缩短为返回x + y; – user1274820 2015-03-25 04:37:50