【问题标题】:Java switch always runs the default codeJava 开关始终运行默认代码
【发布时间】:2015-04-13 21:18:40
【问题描述】:

我是 java 的初学者,我一直在努力做到一点点完美。它应该是一个简单的计算器。我知道可能有更好/更有效的方法来做到这一点,但这不是我想要的。我在使用switch 选择要运行的操作时遇到了一个小问题。基本上,发生的情况是,每次我运行代码时,它都会选择正确的代码来运行(如果输入的String 是“+”,它将添加doubles),但它似乎总是在之后运行default 代码(打印“命令无法识别。”)。如果我删除 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.

【问题讨论】:

  • 你可以发布输入以及与输出相关的内容吗?
  • 输入是控制台的前三行 (5,*,5) 最后两行程序打印的实际输出
  • 你在这里尝试什么:while(1&lt;2){?
  • @Bubletan 无限循环
  • 是一个无限循环。但它不会真正无限循环,因为程序要求用户在每个循环中输入。

标签: java string switch-statement case default


【解决方案1】:

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

String op = scan.next();

当您执行scan.nextLine() 时,它会使用换行符,因此op 被设置为“换行”,switch 以默认行为结束。

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

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

【讨论】:

    【解决方案2】:

    System.out.println("Command not recognized."); 之后添加break;

    要解决它,只需打破循环。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      相关资源
      最近更新 更多