Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java计算器中允许多个输入_Java_Parsing - Fatal编程技术网

在java计算器中允许多个输入

在java计算器中允许多个输入,java,parsing,Java,Parsing,我正在Eclipse中开发一个小型计算器,用户在其中输入一个等式,如1+1。但是,我不确定如何允许用户输入更复杂的方程,如1+2*3/4 另外,如果用户试图输入一个不是有效公式的字符串,我希望出现一个错误。这是我的密码: public static double addition(double x, double y) // The Addition Operation { double add = x + y; return add; } public static doub

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

另外,如果用户试图输入一个不是有效公式的字符串,我希望出现一个错误。这是我的密码:

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));
    }
}

已经有一些简单的方法可以在Java中计算表达式,但假设这是为了学习:

解析数学方程最棘手的部分是计算运算顺序,也就是说,你不能只是迭代方程,然后逐位计算(在这种情况下,像
3+2*5
这样的东西会失败)


您正在寻找的是一种解析中缀表达式的方法;关于这一主题的部分将引导你了解你必须做什么的基本想法。这里没有Java代码,但这会让它失去乐趣,对吗?

已经有一些简单的方法可以在Java中计算表达式,但假设这是为了学习:

解析数学方程最棘手的部分是计算运算顺序,也就是说,你不能只是迭代方程,然后逐位计算(在这种情况下,像
3+2*5
这样的东西会失败)


您正在寻找的是一种解析中缀表达式的方法;关于这一主题的部分将引导你了解你必须做什么的基本想法。这里没有Java代码,但这会让它失去乐趣,对吗?

我建议使用一些正则表达式规则,将大字符串拆分为多个带有运算符的数字。。这可能会对您有所帮助注释
//方法
添加的添加操作
在l19完全不必要,但是。。。但是你怎么知道它会做什么呢?欢迎来到这里。你问的问题太宽泛了。我想这是家庭作业,你应该自己解决问题,而不是让别人帮你写。详情请参阅及。首先在Google上搜索“解析算术表达式”。@HackerGK:您如何使用正则表达式实现运算符优先级?我认为OP需要一个解析器。我建议使用一些正则表达式规则将大字符串拆分为多个带有运算符的数字。。这可能会对您有所帮助注释
//方法
添加的添加操作
在l19完全不必要,但是。。。但是你怎么知道它会做什么呢?欢迎来到这里。你问的问题太宽泛了。我想这是家庭作业,你应该自己解决问题,而不是让别人帮你写。详情请参阅及。首先在Google上搜索“解析算术表达式”。@HackerGK:您如何使用正则表达式实现运算符优先级?我认为OP需要一个解析器。