Java 开关始终运行默认代码

Java switch always runs the default code

我是 java 的初学者,我一直在努力完善它。它应该是一个简单的计算器。我知道可能有 better/more 有效的方法可以做到这一点,但这不是我想要的。我运行在使用switch选择什么操作时遇到了一个小问题运行。基本上,每次我 运行 代码都会选择正确的代码 运行 (如果输入的 String 是“+”,它会添加 double s),之后似乎总是 运行 default 代码(打印 "Command not recognized.")。如果我删除 default 代码,它会完美地工作(当然,那样的话,如果用户输入一个未知的命令,它会给出一个错误)并且我可以很容易地做到这一点,但我真正想要的是一种方法默认代码并了解为什么它不能以这种方式工作。 请帮忙。 谢谢。

import java.util.Scanner;
public class App {
public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    double v1 = scan.nextDouble();
    double v2;
    double v3;
    scan.nextLine();
    while(1<2){
    String op = scan.nextLine();
    switch(op){
    case "+":
        v2 = scan.nextDouble();
        v1 = v2 + v1;
        System.out.println("="+v1);
        break;
    case "-":
        v2 = scan.nextDouble();
        v1 = v2 - v1;
        System.out.println("="+v1);
        break;
    case "*":
        v2 = scan.nextDouble();
        v1 = v2 * v1;
        System.out.println("="+v1);
        break;
    case "/":
        v2 = scan.nextDouble();
        v1 = v1 / v2;
        System.out.println("="+v1);
        break;
    case "^":
        v2 = scan.nextDouble();
        v3 = v1;
        for(int i = 1;i<v2;i++){
            v1 = v1*v3;
        }
        System.out.println("="+v1);
        break;
    case "%":
        v2 = scan.nextDouble();
        v1 = (v1/100)*v2;
        System.out.println("="+v1);
        break; 
    default:
        System.out.println("Command not recognized.");
            }
        }
    } 
}

输出是这样的:

5
*
5
=25.0
Command not recognized.

您应该在这一行中使用 scan.next() 而不是 scan.nextLine()

String op = scan.next();

当您执行 scan.nextLine() 时,它会消耗换行符,因此 op 设置为 "new line" 并且 switch 以默认行为结束。

使用 scan.next() 您将能够做到这一点:

5
*
5
=25.0
*
2
=50.0
/
25
=2.0

System.out.println("Command not recognized.");

之后加一个break;

要修复它,只需打破循环即可。

default:
            System.out.println("Command not recognized.");
            break;
                }
        break;
            }

由于您的 while 循环永远不会结束,因此它会不断重新运行代码。