当前位置: 首页 > 知识库问答 >
问题:

高级计算器。实现多个操作数

查宜民
2023-03-14

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

} }

共有1个答案

朱天逸
2023-03-14

我喜欢这个挑战,因为它是计算机最初的核心,计算方程!首先帮助我思考的是计算机本身通常是如何执行这些操作的。据我所知,计算机一次只做一个操作(你答对了!)然后存储结果,并基本上重新评估剩余的问题,就像操作已经完成一样。

所以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)。移除以移除项目(及其包含的索引将长度减少1),以及。get(idx)替代了数组[idx]。

现在,您需要将运算符存储在与操作数相同的对象中,因为您希望保持它们的顺序。为了做到这一点,最好的办法是将整个条目存储为一个字符串,比如一个句子,然后再将整个条目拆分。这是字符串的位置。斯普利特进来了。

你可以查看这篇关于其使用的精彩文章:

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

使用此:

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

您可以返回一个数组,该数组包含其运算符旁边的每个数字。

所以4 3 2

变成了

4, , 3, , 2

现在这是非常重要的!!

不能将拆分返回的数组直接放入arraylist!首先必须将其存储在传统数组中,然后可以使用for循环和ArrayList将其“馈送”到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;
}

可能看起来像更多的键入在第一但当你习惯了写方法这样你会发现您的整体代码越来越短

 类似资料:
  • 本页内容包括: 位运算符 溢出运算符 优先级和结合性(Precedence and Associativity) 运算符函数(Operator Functions) 自定义运算符 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语言和Objective-C中的位运算符和移位运算。 不同于C语言中的数值计算,Swift的数值计算默认是不可溢出的。溢出行为会被捕获并报告为错误

  • AdvancedDao是BuguDao的子类,它主要提供: (1) 统计功能。 (2) Aggregation功能。 (3) MapReduce功能。 统计 AdvancedDao提供如下常用的统计功能,它们都是基于Aggregation实现的。 public double max(String key) public double max(String key, BuguQuery query

  • 我正在开发一个Windows服务应用程序。NET,它执行许多功能(它是一个WCF服务主机),其中一个目标是运行调度的任务。 我选择创建System.Threading。每个操作的计时器,dueTime设置为下一次执行,并且没有时段以避免重新进入 每次操作结束时,都会更改dueTime以匹配下一次计划执行。 大多数操作计划每分钟运行一次,不是一起运行,而是彼此延迟几秒钟。 现在,在添加了一些操作(大

  • 主要内容:JPQL高级查询示例使用JPQL,我们可以执行任何类型的数据库操作。 在这里,我们将使用简单的例子来执行JPQL的一些高级操作。 假设当前表有如下数据 - JPQL高级查询示例 在这个例子中,我们将采用一个基本的实体类(StudentEntity.java)并对其执行不同的操作。 在包下创建一个名为的实体类。 文件:StudentEntity.java - 现在,将实体类和其他数据库配置映射到Persistence.

  • 我正在为学校开发一个简单的JavaFX计算器,我被困在一起,我被困在一起,该事件从两个文本字段,选择的单选按钮以及按下计算按钮时执行该事件的输入放在一起。 节目预览