java - 慢慢地尝试用java编写一些代码来说明括号的插入是否正确(算术)

标签 java arrays string

您在控制台中输入一些内容,例如(8+8)。然后程序会告诉你括号的插入是否正确。

这是我对错误括号的定义(当然还没有完成):

() this means if one array element is ( and next )
)( 
if the amount of "(" is not equal to amount of ")"

否则我们有正确的括号。

我的代码所做的是将控制台输入拆分为字符串数组元素。我和这些人一起工作。问题是,例如,当我们有 (8) 时,我无法编写一个得到输出 True 的语句。

这是我的代码:

    import java.util.Scanner;
    public class Brackets{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String any = input.nextLine();
        String sArray[] = any.split("");
        int counter1=0;
        int counter2=0;


        for(int i=0; i<sArray.length-1; i++){
            if(sArray[i].equals("(")){
                counter1++;
            }
            if(sArray[i].equals(")")){
                counter2++;
            }
            if(sArray[i].equals("(") && sArray[i+1].equals(")")){
                System.out.println("False");
                return;
            }
            if(sArray[i].equals(")") && sArray[i+1].equals("(")){
                System.out.println("False");
                return;
            }
        }
        if(counter1 == counter2){
            System.out.println("True");
        }
        if(counter1 != counter2){
            System.out.println("False");
        }
    }
}

我认为这个有问题

if(sArray[i].equals("(") && sArray[i+1].equals(")")){
                System.out.println("False");
                return;
            }

但是,如果我正在寻找 2 个相邻数组元素,例如 (),我该如何解决这个问题

最佳答案

这些检查既错误又多余。

        if(sArray[i].equals("(") && sArray[i+1].equals(")")){
            System.out.println("False");
            return;
        }
        if(sArray[i].equals(")") && sArray[i+1].equals("(")){
            System.out.println("False");
            return;
        }

您还可以简化很多事情,例如您只需要一个计数器。

  int counter = 0;
  for(int i=0; i<sArray.length-1; i++){
        if(sArray[i].equals("(")){
            counter++;
        }
        if(sArray[i].equals(")")){
            counter--;
        }
        if (counter<0) {
          System.out.println("Close bracket with no open bracket found");
        }
    }

    if (counter > 0) {
        System.out.println("An open bracket was never closed");
    }

这有许多改进。

  1. 关于所发现内容的有意义的消息
  2. 检测没有开括号的闭括号,即使稍后有开括号也是如此。例如,“)(”会失败,但“()”会通过。
  3. 仅使用一个计数器变量

最后的改变确实是风格上的。您仍然可以使用两个计数器来执行此操作,并将第二个计数器与第一个计数器进行比较,而不是与零进行比较。但最终结果是一样的。

还有一个改进,不需要分割字符串,并且 else if 会更高效一点,因为我们知道如果它是 ' 它就不可能是 ')' ('.

  int counter = 0;
  for(int i=0; i<any.length()-1; i++) {
        if(any.charAt(i) == '(') {
            counter++;
        } else if(any.charAt(i) == ')')) {
            counter--;
        }
        if (counter<0) {
          System.out.println("Close bracket with no open bracket found");
        }
    }

    if (counter > 0) {
        System.out.println("An open bracket was never closed");
    }

这将更加高效,因为不需要进行所有字符串分割等。所有方法名称都来自内存,因此可能需要一些调整。

关于java - 慢慢地尝试用java编写一些代码来说明括号的插入是否正确(算术),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43897733/

相关文章:

java - 可以从 vxml 或 ccxml (Voximal) 播放音频流(PCM 流 8000)

java - 在 Swing 中创建自动隐藏弹出通知框

javascript - 通过数组和 FOR 循环添加事件监听器

arrays - 如何在Octave/MATLAB中找到向量每两个对应元素之间的范围?

java - 类不是抽象的,不会重写抽象方法actionPerformed(ActionEvent)

java - 如何在 Java 中将数组转换为集合

c - 为什么下面的代码在字符串末尾执行意外的字母?

python - String.strip() 重要性

c++ - "error: invalid operands to binary expression"来自字符串库组件内部

java - 替换新方法 dexlib2 失败