【问题标题】:Use switch case within while loop在while循环中使用switch case
【发布时间】:2017-05-21 13:23:27
【问题描述】:

我正在尝试使用 Java 中的 Switch 案例编写简单的计算器(多合一)。到目前为止,我想出了以下代码。但是我坚持使用while循环。我想在每个案例执行后继续显示主菜单,直到用户决定退出程序。

public static void main(String[] args) 
{   
    Scanner s=new Scanner(System.in);
    System.out.println("Main Menu:");
    System.out.println("1. Addition");
    System.out.println("2. Substraction");
    System.out.println("3. Multipication");
    System.out.println("4. Division");
    System.out.println("Enter your choice: ");
    int i=s.nextInt();

    System.out.println("ENTER FIRST NUMBER ");
    int a=s.nextInt();

    System.out.println("ENTER SECOND NUMBER ");
    int b=s.nextInt();

    int result=0;

    switch(i)
    {
        case 1:
            result=a+b;
            break;
        case 2:
            result=a-b;
            break;
        case 3:
            result=a*b;
            break;
        case 4:
            result=a/b;
            break;

        default:
            System.out.println("Wrong Choice.");

    }

    System.out.println("Answer is "+result);
    }
}

上面的代码工作正常。程序在执行用户选择的选项后自行结束。我想重复主菜单。

【问题讨论】:

  • 请问您在这里遇到了哪些困难?至少您可以尝试将 while 循环合并到您的代码中,我们将帮助对其进行审核。

标签: java while-loop switch-statement


【解决方案1】:

像这样添加while 循环:

public static void main(String[] args) {

        // Moved this outside the while loop as davidxxx pointed out +1
        Scanner s = new Scanner(System.in);


        while (true) {
            System.out.println("Main Menu:");
            System.out.println("1. Addition");
            System.out.println("2. Substraction");
            System.out.println("3. Multipication");
            System.out.println("4. Division");
            System.out.println("Enter your choice: ");
            int i = s.nextInt();

            System.out.println("ENTER FIRST NUMBER ");
            int a = s.nextInt();

            System.out.println("ENTER SECOND NUMBER ");
            int b = s.nextInt();

            int result = 0;//'result' will store the result of operation

            switch (i) {
                case 1:
                    result = a + b;
                    break;
                case 2:
                    result = a - b;
                    break;
                case 3:
                    result = a * b;
                    break;
                case 4:
                    result = a / b;
                    break;

                default:
                    System.out.println("Wrong Choice.");

            }

            System.out.println("Answer is " + result);

            System.out.println("Go again?");
            String goAgain = s.next();
            if (!goAgain.equals("y")) {
               break;
            } 

        }
    }

【讨论】:

  • 谢谢史蒂文。我想在没有用户确认的情况下显示主菜单。所以我稍微修改了一下。之前不知道使用这样的while方法。再次感谢您。
  • 好答案 +1,但不需要在每次迭代时创建 Scanner 实例。它应该移到 while 语句之前。
  • 没问题!只要您可以操纵boolean 值,您就可以随时随地保持程序运行或退出。
  • @steven 您可以只使用break 循环并删除start 变量。
  • @holi-java 编辑好!我只是习惯于在需要 while 或 do-while 循环时创建布尔值:)
【解决方案2】:

试试这个:

import java.util.Scanner;

public class Calculator {

    private static final String EXIT = "EXIT";

    public static void main(String[] args) {

        Calculator calc = new Calculator();
        Scanner s = new Scanner(System.in);
        while (true) {
            String res = calc.runCalc(s);
            if (res.equals(EXIT)) {
                break;
            } else {
                System.out.println(res);
            }
        }
    }

    private String runCalc(Scanner s) {
        System.out.println("Main Menu:");
        System.out.println("1. Addition");
        System.out.println("2. Substraction");
        System.out.println("3. Multipication");
        System.out.println("4. Division");
        System.out.println("5. Exit");
        System.out.println("Enter your choice: ");
        int i = s.nextInt();

        if (i == 5) {
            return EXIT;
        }

        System.out.println("ENTER FIRST NUMBER ");
        int a = s.nextInt();

        System.out.println("ENTER SECOND NUMBER ");
        int b = s.nextInt();

        int result = 0;// 'result' will store the result of operation

        switch (i) {
        case 1:
            result = a + b;
            break;
        case 2:
            result = a - b;
            break;
        case 3:
            result = a * b;
            break;
        case 4:
            result = a / b;
            break;

        default:
            return "Wrong Choice.";

        }

        return "Answer is " + result;
    }
}

【讨论】:

    【解决方案3】:

    实现这一点的方法不止一种,你可以使用

    1. while 循环。
    2. do-while 循环。
    3. for 循环。

    我认为 do-while 循环更适合您的情况。因为任何一个用户都想继续,所以你必须继续一次(在循环错误之前)。而且您不想使用另一个变量来退出循环。

    public static void main(String[] args) 
    {   
        Scanner s=new Scanner(System.in);
    
        int result=0;
    
        do{
            System.out.println("Main Menu:");
            System.out.println("-1. complete and calculate");
            System.out.println("1. Addition");
            System.out.println("2. Substraction");
            System.out.println("3. Multipication");
            System.out.println("4. Division");
            System.out.println("Enter your choice: ");
    
            int i=s.nextInt();
            if(i ==-1){
                System.out.println("Answer is "+result);
                return;
            }
            System.out.println("ENTER FIRST NUMBER ");
            int a=s.nextInt();
    
            System.out.println("ENTER SECOND NUMBER ");
            int b=s.nextInt();
    
    
            switch(i)
            {
                case 1:
                    result=a+b;
                    break;
                case 2:
                    result=a-b;
                    break;
                case 3:
                    result=a*b;
                    break;
                case 4:
                    result=a/b;
                    break;
                default:
                    System.out.println("Wrong Choice.");
                    break;
            }
        }while(true);
    
    }
    

    【讨论】:

    • 谢谢布拉桑卡。我们的教授还没有涵盖布尔安静。所以这就是我首先想做的。布尔值似乎也很棒。我很快就会研究布尔值。
    • @GaryM 阅读这篇文章,您可以找到很多布尔数据类型的教程。不要等到先生教你。 homeandlearn.co.uk/java/boolean_values.html
    • @GaryM 我认为这是完成您的任务的更简单的方法。
    • 问题是这段代码只在用户退出程序时计算结果。在此之前完成的任何其他计算均未显示。此外,在我看来,使用可用于检查用户是否要退出程序的单独变量是一种很好的做法。我总是了解到,为他们需要做的工作生成好的变量名更有利于代码的可读性/理解。几个月后,您可能不知道 i 用于什么变量,或者使用了多少次以及用于什么不同的任务......无论如何,我认为 OP 已经被帮助退出了 :)
    • 他没有要求指出他希望在每次迭代中看到答案。我只是按照他的代码。这也不是我的变量命名约定。但是i可以改成choice退出也是一种选择。但我同意你的观点,即区分计算操作和完全使用不同的变量。我试图制作这个简单的程序和这个关于如何循环的问题。我只是试图保持这个简单和最容易成为大人物。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多