java - 调用 line.isEmpty() 方法时出现重复的答案输出

标签 java while-loop duplicates java.util.scanner

我编写了一个程序,它接受输入(用户输入或通过文本文件处理)并根据发现的内容调用数学计算。

问题是,一旦得出答案并将其打印出来,扫描仪检测到的每个 line.isEmpty() 都会重新计算并打印出之前的答案。如果有4个空行,则会打印4次,直到另一个问题被解析到程序中。

这是我的主要方法:

public static void main(String[] args) {
    Calc calc = new Calc();
    Scanner sc = new Scanner(System.in);
    StringBuilder sb = new StringBuilder();
    String input = "";
    List<String> strs = new ArrayList<>();
    //
    ArrayList<String> tokens;
    //this makes sure an entire problem is added as a tokens element
    while (sc.hasNextLine()) {
        String line = sc.nextLine().trim();
        if (line.isEmpty()) {
            for (String s : strs) {
                sb.append(s);
                input = sb.toString();
            }
            tokens = new ArrayList<>(Arrays.asList(input.split(" ")));
            //call calculate on strs then reset
            calc.calculate(tokens);
            strs.clear();
            tokens.clear();
            sb.setLength(0);
        } else if (line.length() == 1) {
            strs.add(" ");
            strs.add(line);
            strs.add(" ");
        } else {
            strs.add(line);
        }
    }
}

计算方法:

public String calculate(List<String> tokens) {
    operands = new Stack<>();
    for (int i = 0; i < tokens.size(); i++) {
        tokens.removeAll(Arrays.asList(""));
    }
    String result = processOperands(tokens);

    if (result.equals(null)) {
        System.out.println(result);
        return defaultResult;
    } else if (result.equals("java.lang.IllegalArgumentException: Attempting to add with fewer than 2 operands.")) {
        System.out.println(result);
        return "java.lang.IllegalArgumentException: Attempting to add with fewer than 2 operands.";
    } else {
        System.out.println(result);
        return result.replaceAll("[^\\d.]", "");
    }
}

用于输入:

2 2 +


4 
3 +

输出:

4
4
4
7

显然,问题是我每次检测到空字符串时都会调用计算,因为目前它是如何知道问题何时完成“输入”的。

我如何修改它以知道不打印相同的答案两次,或者在找到另一个答案之前不计算答案?

最佳答案

输入变量未在您的逻辑中重置。清除 strs、tokens 并重置 'sb' 变量后,设置 input = "";

关于java - 调用 line.isEmpty() 方法时出现重复的答案输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37288128/

相关文章:

python - 在 Python 的列表中保留重复项

MySQL:更新...重复 key "ANOTHER UPDATE"?

python - 当第一项在 Python 中重复时,仅保留列表列表中的最后一个值

java - 如何修复 POST 请求 Retrofit 上的错误 400

java - java中处理确认对话框

JAVA帮助获取输入的总和

php - Foreach 嵌套在带有 PDO 查询的 while 循环中

java - 如何对restTemplate进行junit测试?

java - 无法与 jackson 合作

c - c语言战舰程序中的while循环遇到问题