Java开关始终运行默认代码

Die*_*ozo 5 java string default case switch-statement

我是Java的初学者,并且在此方面进行了一些完善。它应该是一个简单的计算器。我知道可能有更好/更有效的方法来执行此操作,但这不是我想要的。使用a switch选择要运行的操作时,我遇到了一个小问题。基本上,发生的事情是,每次我运行代码时,它都会选择要运行的正确代码(如果String输入的是“ +”,它将添加doubles),之后似乎总是运行该default代码(显示“ Command”)未识别。”)。如果我删除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.");
            }
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

5
*
5
=25.0
Command not recognized.
Run Code Online (Sandbox Code Playgroud)

And*_*ira 2

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

String op = scan.next();
Run Code Online (Sandbox Code Playgroud)

当您scan.nextLine()这样做时,它会消耗新行字符,因此op被设置为“新行”并switch以默认行为结束。

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

5
*
5
=25.0
*
2
=50.0
/
25
=2.0
Run Code Online (Sandbox Code Playgroud)