有没有一种简单的方法可以在循环中退出Java而无需重写大部分代码?

时间:2014-12-16 18:08:13

标签: java while-loop calculator

我是Java和编程的新手。我遇到的不是问题,而是更像是我无知的墙。在我的QA自动化课程中,我被要求用Java编写一个简单的计算器程序,我保持它非常基础 - 每次执行计算时都需要重新启动程序。我了解了while循环,看起来while循环是保持程序运行的好方法。但现在我处于另一个极端 - 循环是无限的。我的问题是:有没有简单的方法退出程序而无需重新编写代码以及我构建计算器的方式?我不知道该怎么做但如果程序在用户按[Esc]或打印"退出"时结束将会很好。我(初学者)会理解并实施一种简单的方法吗?

import java.io.IOException;
import java.util.Scanner;

public class Calculator {
    public static void main(String[] args) {
        int first, second, answer;
        String operator;

        Scanner s = new Scanner(System.in);

        try {
            while (true) {
                log("Please enter a math equation using +, -, * or /");
                first = s.nextInt(); //User enters first number
                operator = s.next(); //User enters operator
                second = s.nextInt(); //User enters second number

                if (operator.contains("+")) {
                    answer = first + second;
                    log("" + answer);
                }

                if (operator.contains("-")) {
                    answer = first - second;
                    log("" + answer);
                }

                if (operator.contains("*")) {
                    answer = first * second;
                    log("" + answer);
                }

                if (operator.contains("/")) {
                    if (second == 0) {
                        log("You can't divide by 0");
                    } else {
                        answer = first / second;
                        log("" + answer);
                    }
                }
            }
        } catch (java.util.InputMismatchException error) {
            log("Incorrect input");
        }
    }

    public static void log(String s) {
        System.out.println(s);
    }
}

谢谢你,如果你能帮助我的话! 附:我不知道这是处理异常的正确方法还是非常难看的异常方式。如果你能对此发表评论,我也会感激不尽。

3 个答案:

答案 0 :(得分:8)

是的,请使用break

if(endingCondition)
    break;

这将打破最内层的循环。

答案 1 :(得分:2)

为了按照你的例子而不是偏离它专注于其他代码改进,你应该改变你读取参数的方式,因为你现在这样做的方式,你永远无法阅读退出词。为此,您可以使用以下方法:

这将添加一个新的字符串参数来读取出口或第一个操作数(以字符串格式)。然后,它会将其转换为int:

int first, second, answer = 0;
    String operator, firstParam = "";

    Scanner s = new Scanner(System.in);

    try {
        while (true) {
            System.out.println("Please enter a math equation using +, -, * or /, or exit if you want to stop the program");

            firstParam = s.next(); //User enters first number or exit
            // This first param is read as a String so that we are able to read the word exit
            if(firstParam.equals("exit"))
                break;
            first = Integer.valueOf(firstParam); // This will transform the first parameter to integer, because if it reaches this point, firstParam won't be "exit"
            //[... Rest of your program...]
        }
    } catch (java.util.InputMismatchException error) { ... }

答案 2 :(得分:0)

错误处理的提示

1:在catch块中你不必指定InputMismatchException的完整引用,因为你已经导入了java.util包

catch (InputMismatchException e)
{
    //handle exception here
}

2:如果您不确定可抛出的异常类型,只需捕获类Exception的对象。由于Exception是所有Exceptions的超类,它可以处理所有异常。这对初学者来说非常有用。

catch (Exception e)
{
 //handle exception
}

3:您可以处理同一个try块的多个异常,每个catch都处理一种特定类型的异常。试一试。

退出循环

if (s1.contains("EXIT"))
break;

这里s1是字符串,如果字符串包含单词EXIT(ALL CAPS ONLY),循环将终止。