慢慢地尝试在java中编写代码,这将说明括号的插入是否正确(算术)

时间:2017-05-10 16:09:24

标签: java arrays string

您在控制台中输入内容,我们说(8+8)。然后程序会告诉您括号的插入是否正确。

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

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

否则我们有正确的括号。

我的代码所做的是将控制台输入拆分为String数组元素。我一起工作。问题是,当我们有True时,我不能写一个声明,我得到一个输出(8),例如。

这是我的代码:

    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个邻居数组元素,如()

,我怎么能解决这个问题

2 个答案:

答案 0 :(得分:3)

这些检查既错误又多余。

data%>%select(a,c,b)

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

        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;
        }

这有很多改进。

  1. 有关其发现的有意义的消息
  2. 即使稍后打开也检测到没有打开的关闭括号。例如“)(”会失败但是“()”传递。
  3. 仅使用一个计数器变量
  4. 最后的改变是风格真的。您仍然可以使用两个计数器执行此操作,并将第二个与第一个计数器进行比较,而不是与零进行比较最终结果是一样的。

    还有一个改进,没有必要拆分字符串, 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"); } 会更有效率,因为我们知道它不是')'如果它是'('。< / p>

    else if

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

答案 1 :(得分:2)

您只需要一个计数器来计算已打开范围的数量。然后如果它在任何时候变为负数,则失败。然后,如果它最后为零,则通过,否则为失败。