首页 > 解决方案 > 如何使用连续的用户输入更新输出,直到以“。”终止?

问题描述

Java 新手,并试图弄清楚如何保持用户给出的正在运行的评估表达式持续不断,直到他们输入“。” 终止它,然后打印输出。我需要使用我已经放置的主要方法之外的方法。我不必担心操作顺序,但我对如何在跟踪其输出的同时进行连续数量的操作/数字感到困惑那么当他们放“。”时如何最终打印结果。

import java.util.Scanner;

public class Evaluator {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int num1;
        char expression;
        int num2;
        String numlist = "";

        System.out.println("Enter the expression: ");
        num1 = scan.nextInt();
        expression = scan.next().charAt(0);
        num2 = scan.nextInt();
        scan.close();

        if (expression == '+') {
            add(num1, num2);
        } else if (expression == '-') {
            subtract(num1, num2);
        } else if (expression == '*') {
            multiply(num1, num2);
        } else if (expression == '/') {
            divide(num1, num2);
        } else if (expression == '%') {
            modulus(num1, num2);
        } else if (expression == '.'){

        }
    }

    static int add(int num1, int num2) {
        return (num1 + num2);
    }

    static int subtract(int num1, int num2) {
        return (num1 - num2);
    }

    static int divide(int num1, int num2) {
        return (num1/num2);
    }

    static int multiply(int num1, int num2) {
        return (num1*num2);
    }

    static int modulus(int num1, int num2) {
        return (num1%num2);
    }
}

输出:

输入表达式:

1
+
26
*
2
%
19
/
5
.

结果是 3

标签: javaif-statementmathmethodsoperators

解决方案


我建议以“0 +”开头,然后是用户输入的任何内容。因为那时您不需要对第一个数字进行特殊处理。

import java.util.Scanner;

class Main
{

    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the expression: ");

        // Start with "0 +"
        int value = 0;
        String operator = "+";

        while (true) // loop
        {
            int operand = scan.nextInt();

            switch (operator)
            {
                case "+": value += operand; break;
                case "-": value -= operand; break;
                case "*": value *= operand; break;
                case "/": value /= operand; break;
                case "%": value %= operand; break;
                default: throw new UnsupportedOperationException(operator);
            }

            operator = scan.next();

            if (".".equals(operator))
            {
                break; // exit the loop
            }
        }

        System.out.println("result=" + value);
        scan.close();
    }

}

但是,该算法不关心运算符顺序的数学规则。它只是像一个便宜的 3 欧元袖珍计算器一样从左到右处理输入。

基于您的 if-else 构造和方法的其他示例:

import java.util.Scanner;

class Main
{

    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the expression: ");

        // Start with "0 +"
        int value = 0;
        char operator = '+';

        while (true) // loop
        {
            int operand = scan.nextInt();

            if (operator == '+') {
                value=add(value, operand);
            } else if (operator == '-') {
                value=subtract(value, operand);
            } else if (operator == '*') {
                value=multiply(value, operand);
            } else if (operator == '/') {
                value=divide(value, operand);
            } else if (operator == '%') {
                value=modulus(value, operand);
            } else {
                throw new UnsupportedOperationException(String.valueOf(operator));
            }

            operator = scan.next().charAt(0);

            if (operator=='.')
            {
                break; // exit the loop
            }
        }

        System.out.println("result=" + value);
        scan.close();
    }

    static int add(int num1, int num2) {
        return (num1 + num2);
    }

    static int subtract(int num1, int num2) {
        return (num1 - num2);
    }

    static int divide(int num1, int num2) {
        return (num1/num2);
    }

    static int multiply(int num1, int num2) {
        return (num1*num2);
    }

    static int modulus(int num1, int num2) {
        return (num1%num2);
    }
}

推荐阅读