Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在字符串中查找对应的元素_Java - Fatal编程技术网

Java 在字符串中查找对应的元素

Java 在字符串中查找对应的元素,java,Java,请参阅以下内容: 括号被视为以下任一字符:(, ),{,},[或] 如果有开口,则两个支架被视为匹配对 括号(即,(,[,或{)出现在结束括号的左边 (即,),]或})完全相同的类型。有三种类型的 匹配的括号对:[]、{}和() 如果一组括号不平衡,则匹配的括号对不平衡 所包含的内容不匹配。例如,{[(])}是不平衡的,因为 {和}之间的内容不平衡。一对正方形 括号中包含一个不平衡的开口括号,(,和 一对圆括号括住一个不平衡的闭合正方形 括号,] 我已完成以下程序: import java.io

请参阅以下内容:

括号被视为以下任一字符:(, ),{,},[或]

如果有开口,则两个支架被视为匹配对 括号(即,(,[,或{)出现在结束括号的左边 (即,),]或})完全相同的类型。有三种类型的 匹配的括号对:[]、{}和()

如果一组括号不平衡,则匹配的括号对不平衡 所包含的内容不匹配。例如,{[(])}是不平衡的,因为 {和}之间的内容不平衡。一对正方形 括号中包含一个不平衡的开口括号,(,和 一对圆括号括住一个不平衡的闭合正方形 括号,]

我已完成以下程序:

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;

public class Solution {

    static char findCorrBracket(char b)
    {
        if(b == '{')
        {
            return '}';
        }
        else if(b == '[')
        {
            return ']';
        }
        else 
        {
            return ')';
        }
    }

    // Complete the isBalanced function below.
    static String isBalanced(String s) {

        char a[] = new char[1000];
        int top = 0,i=1;
        a[0]=s.charAt(0);
        char retBrack;
        String result;


        while(top!=-1 )
        {
            retBrack=findCorrBracket(s.charAt(top));
            if(s.charAt(i)!=retBrack)
            {
                a[top]=s.charAt(i);
                top=i;
            }
            else
            {
                top--;
            }

            i++;
            if(i>=s.length()-1)
            {
                break;
            }

        }


        System.out.println(top);

        if(top==0)
        {
            result = "YES";
        }
        else
        {
            result = "NO";
        }



        return result;

    }

    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int t = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        for (int tItr = 0; tItr < t; tItr++) {
            String s = scanner.nextLine();

            String result = isBalanced(s);

            bufferedWriter.write(result);
            bufferedWriter.newLine();
        }

        bufferedWriter.close();

        scanner.close();
    }
}
import java.io.*;
导入java.math.*;
导入java.security.*;
导入java.text.*;
导入java.util.*;
导入java.util.concurrent.*;
导入java.util.regex.*;
公共类解决方案{
静态字符findCorrBracket(字符b)
{
如果(b=='{')
{
返回“}”;
}
else如果(b=='[')
{
返回']';
}
其他的
{
返回“)”;
}
}
//完成下面的isBalanced功能。
静态字符串已平衡(字符串s){
字符a[]=新字符[1000];
int-top=0,i=1;
a[0]=s.charAt(0);
沙雷布拉克;
字符串结果;
while(顶部!=-1)
{
retBrack=FindCorr括号(s.charAt(顶部));
如果(s.charAt(i)!=retBrack)
{
a[top]=s.charAt(i);
top=i;
}
其他的
{
顶部--;
}
i++;
如果(i>=s.length()-1)
{
打破
}
}
系统输出打印项次(顶部);
如果(顶部==0)
{
结果=“是”;
}
其他的
{
结果=“否”;
}
返回结果;
}
专用静态最终扫描仪=新扫描仪(System.in);
公共静态void main(字符串[]args)引发IOException{
BufferedWriter BufferedWriter=new BufferedWriter(newfilewriter(System.getenv(“OUTPUT_PATH”));
int t=scanner.nextInt();
scanner.skip(“(\r\n |[\n\r\u2028\u2029\u0085])”;
对于(int-tItr=0;tItr
我对代码做了一点修改。它使程序更具可读性。但问题依然存在

/******************************************************************************

                            Online Java Debugger.
                Code, Run and Debug Java program online.
Write your code in this editor and press "Debug" button to debug program.

*******************************************************************************/

public class Main
{


    static char findCorrBracket(char b)
    {
        if(b == '{')
        {
            return '}';
        }
        else if(b == '[')
        {
            return ']';
        }
        else 
        {
            return ')';
        }
    }

    // Complete the isBalanced function below.
    static String isBalanced(String s) {

        char a[] = new char[1000];
        int top = 0,i=1;
        a[0]=s.charAt(0);
        char retBrack;
        String result;

        while(i<s.length())
        {
            retBrack=findCorrBracket(s.charAt(top));
            if(s.charAt(i)!=retBrack)
            {
                top++;
                a[top]=s.charAt(i);


            }
            else
            {
                top--;
            }

            i++;

        }

        System.out.println(top);

        if(top==-1)
        {
            result = "YES";
        }
        else
        {
            result = "NO";
        }



        return result;

    }


    public static void main(String[] args) {

        String s="{[]()}";
        String result = isBalanced(s);
        System.out.println(result);

    }
}
/******************************************************************************
在线Java调试器。
联机编写、运行和调试Java程序。
在此编辑器中编写代码,然后按“调试”按钮调试程序。
*******************************************************************************/
公共班机
{
静态字符findCorrBracket(字符b)
{
如果(b=='{')
{
返回“}”;
}
else如果(b=='[')
{
返回']';
}
其他的
{
返回“)”;
}
}
//完成下面的isBalanced功能。
静态字符串已平衡(字符串s){
字符a[]=新字符[1000];
int-top=0,i=1;
a[0]=s.charAt(0);
沙雷布拉克;
字符串结果;

而(i更新——我在代码中添加了作为注释的更正

    static char findCorrBracket(char b)
    {
        if(b == '{')
        {
            return '}';
        }
        else if(b == '[')
        {
            return ']';
        } 
        else if(b == '(')
        {
            //Use else if here instead of else, since otherwise '}',']','(' & ')' will all get the returned character value ')'
            return ')';
        } else {
            return '_';
        }
    }

    // Complete the isBalanced function below.
    static String isBalanced(String s) {

        char a[] = new char[1000];
        int top = 0,i=1;
        a[0]=s.charAt(0);
        char retBrack;
        String result;

        while(i<s.length())
        {
            if(top == -1) {
                //If the stack is empty, then we don't need to get the 'correct bracket' and check
                //We can directly insert the character into the stack
                top++;
                a[top] = s.charAt(i);
            } else {
                //findCorrBracket from `a[top]`, not from `s.charAt(top)`
                retBrack = findCorrBracket(a[top]);
                if (s.charAt(i) != retBrack) {
                    top++;
                    a[top] = s.charAt(i);
                } else {
                    top--;
                }
            }
            i++;
        }

        System.out.println(top);
        if(top==-1)
        {
            result = "YES";
        }
        else
        {
            result = "NO";
        }

        return result;
    }
另外,我可以提出一些改进建议

  • 正如racraman所建议的,在循环中使用
    而不是
    while
    ,除非您需要
    do while
  • 不要创建用作堆栈的静态数组,请使用Java集合(例如,
    ArrayList
    )创建动态堆栈。这样,即使字符串具有超过1000个连续的
    ),您的代码也可以工作

  • 您已经走上了正确的道路,使用堆栈并一次迭代字符串一个字符。但是您对每个字符的逻辑似乎没有任何意义。显然,如果输入字符串满足一些非常特定的条件,它“工作”,但一般不工作。类似的东西(在伪代码中)将在任何输入上工作:


    top=i;
    应该是
    top++;
    。此外,我强烈建议将
    替换为
    for(int i=1;i=0;i++)
    它不起作用,先生。实际上,我的代码的问题是,我编写代码时考虑了以下情况:“{([])}”、“{[()}”而不是“{([])[])”[]}[]”就叫我Jem,我会再看一次代码,我可能遗漏了什么。检查
    top==-1
    ,而不是
    top==0
    。你好,Jem,你介意检查我更新的代码吗。我觉得变量top的增量和减量有问题。我刚刚重新检查了。findCorrBracket(char b)函数也需要更改。现在它工作正常。谢谢。你好凯文。你好!你介意检查我更新的代码吗。我觉得变量top的增量和减量有问题。
        // Complete the isBalanced function below.
        static String isBalanced(String s) {
    
            char a[] = new char[1000];
            int top = 0,i=1;
            a[0]=s.charAt(0);
            char retBrack;
            String result;
    
    
            while(i<s.length() )
            {
                retBrack=findCorrBracket(s.charAt(top));
                if(s.charAt(i)!=retBrack)
                {
                    top++;
                    a[top]=s.charAt(i);
                }
                else
                {
                    top--;
                }
    
                i++;
            }
    
    
            System.out.println(top);
    
            if(top==-1)
            {
                result = "YES";
            }
            else
            {
                result = "NO";
            }
    
            return result;
        }
    
    for each character `c` in string `s`:
       if `c` is an opening bracket:
          PUSH`c` onto stack
       else: 
          // `c` must be a closing bracket
          if stack is EMPTY:
              's` IS UNBALANCED
          else:
              POP top of stack into `b`
              if `b` is not the correct matching opening bracket for `c`:
                  `s` IS UNBALANCED
              end if
          end if
      end if
    end for
    if stack is EMPTY:
        SUCCESS! (`s` is correctly balanced)
    else:
        `s` IS UNBALANCED
    end if