gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:49:14 30 4
gpt4 key购买 nike

您在控制台中输入一些内容,例如(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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com