【问题标题】:How do I validate if these Expressions are valid (All brackets paired - closed)? [closed]如何验证这些表达式是否有效(所有括号配对 - 闭合)? [关闭]
【发布时间】:2020-02-06 12:21:04
【问题描述】:

这是我的第三次尝试,但预期的结果不正确。

第一个表达式应该打印 -Bracket 是平衡的。 第二个表达式应该打印 -Bracket is NOT balance.

注意需要使用 - charAt要解决的子字符串,而不是数组或堆栈!因为我还没有学习这些!

import java.lang.*; 
import java.util.Scanner;


public class CheckBracketsPairs {
  public static void main(String[] args) {
    validateExpresion("(4+4)");
    validateExpresion("(4+4)*1)");
  }

  public static void validateExpresion(String s) {

    // MY CODES BELOW
    int count = 0;
    String open = "(";
    String close = ")";

    for (int i = 0, n = s.length(); i < n; i++) {
      Character c = s.charAt(i);

      if(c.equals(open)) {
        count++;
      }

      if(c.equals(close)) {
        count--;
      }
    }

      if(count == 0) {
        System.out.println("\n Expression:  " + s + ",      -Bracket is balanced");
      } else {
        System.out.println("\nBracket is NOT balanced");
      }
  }    
}

【问题讨论】:

  • 你得到了什么输出
  • Character永远不等于String
  • @GyroGearless 欣赏——很好学习
  • @KarthikeyanVaithilingam 初始尝试,Outout 显示为 -Bracket 是平衡的:现已修复!

标签: java string char


【解决方案1】:

这里的另一个尝试。最后一行没有按预期显示结果。
应该是--支架不平衡

public class CheckBracketsPairs  {
  public static void main(String[] args) {
    validateExpression(")((5+9)-2)");
    validateExpression("(2*6)-1)*(2^2)");
    validateExpression("(8^2)");
    validateExpression("(5+8^2))");  // This line computing?
    validateExpression("(5+8^2)(");  // Why is this line NOT computing?
  }

  public static void validateExpression(String s) {

    // MY CODES BELOW  
    int count = 0;
    char open = '(';
    char close = ')';

    for (int i = 0, n = s.length(); i < n; i++) {
      char c = s.charAt(i);

      if(c == open) {
        count++;
      }

      if (c == close) {
        count--;
        // If statement to check for closed brackets
        if (count < 0) {
          System.out.println("\nExpression:  " + s + "  -Bracket is NOT balanced");
          break;
        }
      }
    } 

    if (count == 0) {
      System.out.println("\nExpression:  " + s + "   -Bracket is balanced");
    }
  }    
}

【讨论】:

  • 最后一个解决方案在大多数情况下都有效,但在某些表达式中失败:示例:validateExpresion(“(5+2) * 1) / (3-(2+1)”) 虽然括号是偶数,它们没有关闭。预期结果应该是 - 括号不平衡。
  • @MrCEO 这是你的逻辑的问题。您正在测试代码 not 中的左括号和右括号的数量是否相等(如果它们已关闭)。 提示:如果您的 count 变量曾经为负数,您就知道您的案例无效。
  • 很好的提示,不胜感激!将添加第二个 (if) 条件并再次运行程序。
  • @MrCEO 您应该在您的count--; 行之后检查 count 是否 if (count < 0) { System.out.println("not balanced"); break; }
  • @MrCEO 最后一行 is 计算,但 count 永远不会低于 0,并在 count = 1 处结束,所以你仍然需要最后检查: if (count &gt; 0) { // not balanced }
猜你喜欢
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多