您在控制台中输入内容,我们说(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个邻居数组元素,如()
,我怎么能解决这个问题答案 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;
}
这有很多改进。
最后的改变是风格真的。您仍然可以使用两个计数器执行此操作,并将第二个与第一个计数器进行比较,而不是与零进行比较最终结果是一样的。
还有一个改进,没有必要拆分字符串, 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)
您只需要一个计数器来计算已打开范围的数量。然后如果它在任何时候变为负数,则失败。然后,如果它最后为零,则通过,否则为失败。