首页 > 解决方案 > 使用结果的计算器循环

问题描述

我试图只从用户那里获得一个输入,并用之前的结果进行计算。计算器从 开始0,虽然我知道乘法可能存在一些问题。目前这并不重要。我已经被这个问题困扰了一段时间,我似乎无法找到解决方案。所以这看起来像这样:

0
+ 3 (user input)
3 (result)
- 2 (user input)
1 (result)

代码会这样做几次,但我需要以某种方式循环,直到用户说出类似exite其他内容为止。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        System.out.println("Please enter your calculation");
        Scanner scanner = new Scanner(System.in);
        System.out.println("0");
        //int left = scanner.nextInt();
        String op = scanner.next();
        int right = scanner.nextInt();
        int num3 = compute(0,op,right);
        System.out.println(num3);
        int rright;
        int rrright;
        System.out.println("Enter your calculation");
        String op1 = scanner.next();
        rright = scanner.nextInt();
        int num4 = compute(num3,op1,rright);
        System.out.println(num4);
        System.out.println("Enter your calculation");
        String op2 = scanner.next();
        rrright = scanner.nextInt();
        int num5 = compute(num4,op2,rrright);
        System.out.println(num5);
    }

    private static int compute(int left, String op, int right) {
        switch (op.charAt(0)) {
            case '+':
                return left + right;
            case '-':
                return left - right;
            case '*':
                return left * right;
            case '/':
                return left / right;
        }
        throw new IllegalArgumentException("Unknown operator:" + op);
    }
}

标签: javaloopscalculator

解决方案


一个while循环应该可以完成这项工作。此外,您应该使用 double 而不是 int,以便正确计算除法的结果(如 Lino 在他的评论中建议的那样)。代码如下所示:

public static void main(String[] args) {
    System.out.println("Please enter your calculation");
    Scanner scanner = new Scanner(System.in);
    System.out.println("0");
    double result = 0, right;
    String op;
    while(true){
        System.out.println("Enter your calculation");
        op = scanner.next();
        if(op.equals("exit")) break;
        right = scanner.nextDouble();
        result = compute(result, op, right);
        System.out.println(result);
    }
    System.out.println("end of program");
}

private static double compute(double left, String op, double right) {
    switch (op.charAt(0)) {
        case '+':
            return left + right;
        case '-':
            return left - right;
        case '*':
            return left * right;
        case '/':
            return left / right;
    }
    throw new IllegalArgumentException("Unknown operator:" + op);
}

注意:scanner.nextDouble()需要以逗号分隔的数字(例如 4,8)。


推荐阅读