【问题标题】:Java Calculator Switch IssueJava 计算器切换问题
【发布时间】:2021-11-10 01:30:57
【问题描述】:

我结合了我在这里看到的几种不同的方法。有谁知道如何解决我遇到的这个问题?当您使用此代码时,它要求您输入数学运算符,但是当我输入 +9 或 -% 时,它仍然可以工作并使用第一个符号。如果有人输入 */ 而不是 *.我什至尝试将 case 切换为数字(即 case 1:),如果我将加法设置为 1,它会做同样的事情,如果我输入 15,它会读取一个并做加法。有什么想法吗?

import java.util.Scanner;

public class javacalculator {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Scanner operation = new Scanner(System.in);

        double num1, num2, answer;
        char userOperation;
    

        System.out.print("Enter your full name: ");
        String userName = input.nextLine();

        System.out.println("+ Addition");
        System.out.println("- Subtraction");
        System.out.println("* Multiplication");
        System.out.println("/ Division");
        System.out.println("% Modulus");
        System.out.println("\n");


        System.out.print("Enter mathematical operator e.g. + for Addition: ");
        userOperation = operation.next().charAt(0);

        boolean invalidOperator = false;

        switch (userOperation) {
        case '+':
            System.out.print("Enter first number: ");
            num1 = input.nextInt();

            System.out.print("Enter the second number: ");
            num2 = input.nextInt();

            answer = num1 + num2;

            System.out.print(num1 + " + " + num2 + " = " + answer);


            break;
        case '-':
            System.out.print("Enter first number: ");
            num1 = input.nextInt();

            System.out.print("Enter the second number: ");
            num2 = input.nextInt();

            answer = num1 - num2;

            System.out.print(num1 + " - " + num2 + " = " + answer);

            break;
        case '*':
            System.out.print("Enter first number: ");
            num1 = input.nextInt();

            System.out.print("Enter the second number: ");
            num2 = input.nextInt();

            answer = num1 * num2;

            System.out.print(num1 + " * " + num2 + " = " + answer);


            break;
        case '/':
            System.out.print("Enter first number: ");
            num1 = input.nextInt();

            System.out.print("Enter the second number: ");
            num2 = input.nextInt();

            answer = num1 / num2;

            System.out.print(num1 + " / " + num2 + " = " + answer);


            break;

        case '%':
            System.out.print("Enter first number: ");
            num1 = input.nextInt();

            System.out.print("Enter the second number: ");
            num2 = input.nextInt();

            answer = num1 % num2;

            System.out.print(num1 + " % " + num2 + " = " + answer);


            break;
        default:
            System.out.println("Invalid operator!");
            break;
    }


}

}

【问题讨论】:

  • 看看userOperation = operation.next().charAt(0);这一行——它在做什么?
  • 删除.charAt(0),只使用userOperation = operation.next();,然后你的默认情况将运行并打印Invalid operator!,因为其他开关情况都不匹配。
  • 按照sorifiend的想法,您还需要在每个case行中将'更改为"

标签: java performance math switch-statement calculator


【解决方案1】:

让我们分解一下:operation.next().charAt(0);

operation.next() -> 给你完整的输入字符串

.charAt(0); -> 返回完整输入字符串的第一个字符

所以我们输入 +9 或 */ -> 它返回第一个元素。

现在让我们处理这个案例:

String o = operation.next(); // here is complete input
if(o.length()!=1){
userOperation = 0;     //if length of input is not 1 we set custom value
}else{
userOperation = o.charAt(0); //get and set the first and only element 
}

希望对您有所帮助!

【讨论】:

  • 感谢大家的反馈。我已经进行了调整,程序完美无缺。谢谢!
猜你喜欢
  • 2012-05-04
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多