【问题标题】:advanced calculator. implementing multiple operands高级计算器。实现多个操作数
【发布时间】:2015-03-25 03:25:08
【问题描述】:

需要一种方法来完成我的“高级”计算器。我一直在用循环进行头脑风暴,但我让自己感到困惑。关于如何实现数字操作数的任何想法,而不仅仅是嵌套一堆 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;
    }

} }

【问题讨论】:

  • stackoverflow.com/questions/29224513/… 我的这个问题也需要另一个答案。我得到了一个答案,但它仍然不能正常工作,所以如果我也能得到一些关于这个问题的建议,那就太好了
  • 与其将程序限制为非常具体的输入,不如考虑如何将典型的数学表达式作为字符串并对其进行解析/评估。看看这里stackoverflow.com/questions/13662001/…

标签: java


【解决方案1】:

我喜欢这个挑战,因为它对于计算机最初的用途至关重要,即计算方程式!帮助我首先思考的是计算机本身通常如何执行这些操作。据我了解,计算机一次只执行一项操作(您说得对!)然后存储该结果并从本质上重新评估剩余的问题,就好像该操作已经完成一样。

所以 4+3+2

简单地变成

7+2

等等

为了在java中做这种事情,我认为最好熟悉几个概念,比如ArrayList和String.split。

您需要 ArrayList 而不是更传统的数组来保存问题,因为问题的长度会在整个程序中发生变化,正如我们在上面的 4+3+2 示例中看到的那样。因此,如果您尝试使用 for 循环遍历数组,但数组需要不断变短,这一切都会变得非常复杂。

ArrayList 是一个很棒的对象,它为我们提供了一种动态的数组“形式”,其中包含各种有用的方法。

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

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

然后您可以使用一堆不同的方法,例如 .add 将一个项目添加到列表的末尾(将长度增加 1),.remove 删除一个项目(其包含索引将长度减少1),以及替换 Array[idx] 的 .get(idx)。

现在您需要将运算符存储在与操作数相同的对象中,因为您希望保持它们的顺序。为了做到这一点,最好的办法是将整个条目存储为一个字符串,就像一个句子一样,然后你可以将整个内容拆分。这就是 String.split 的用武之地。

你可以查看这个很棒的条目来了解它的使用:

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

使用这个:

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

您可以返回一个数组,其中包含按顺序排列在其运算符旁边的每个数字。

所以 4+3+2

变成

4、+、3、+、2

现在这很重要!!

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

现在我不会为你解决这个问题,因为我相信你会想自己解决这个问题。但是请随意打我!

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

哦,你应该学会编写和调用方法,这会让你的生活在组织方面更轻松。

例如在 main 中而不是:

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

你可以这样做:

result = add(a,b);

只要你在main下面写方法:

public double add(double x, double y){

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

一开始可能看起来需要更多的输入,但是当您习惯编写这样的方法时,您会发现您的整体代码越来越短

【讨论】:

  • 只是想补充一点,您的示例方法可以缩短为返回 x+y;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多