java - 循环没有重置?

标签 java loops

下面的代码检查匹配的括号以查看它们是否正确嵌套。这看起来很简单,但我不明白为什么一旦找到嵌套匹配,i不会重置为0。任何指导将不胜感激。

    String testString = "{}()[] ";
    char [] openParenthesis = {'(','{','['};
    char [] closeParenthesis = {')','}',']'};

    ArrayList<Character> characterList = new ArrayList<Character>();
    for(char c : testString.toCharArray())
    {
        characterList.add(c);
        System.out.println("This is what is added to the list Arraylist: " + c);
    }

    System.out.println();


for(int i = 0; i < characterList.size()-1; i++)
            {
                System.out.println("1st Loop: " +characterList.get(i));
                System.out.println("1st Loop: " + characterList.get(i + 1));
                System.out.println("1st Loop: " + i);
                System.out.println();

                for(int j = 0; j < openParenthesis.length; j++)
                {
                    if (characterList.get(i) == openParenthesis[j])
                    {
                        if(characterList.get(i + 1) == closeParenthesis[j])
                        {
                            System.out.println("Nested Match");
                            System.out.println(characterList.get(i));
                            System.out.println(characterList.get(i + 1));
                            System.out.println();
                            characterList.remove(i);
                            characterList.remove(i + 1);
                            i = 0;
                        }
                    }   
                }
        }

最佳答案

首先,您要删除 ArrayList 中的错误位置。

因为它是一个 ArrayList characterList.remove(i); 会将所有内容移动到左侧一个位置,所以下一个类似 characterList.remove(i+1); 删除您想要的位置右侧的那个。

您还需要在 openParenthesis 循环中添加一个中断,以便在找到匹配项时可以从数组的开头重新开始搜索。

您还需要将 i = 0 更改为 i = -1,因为它会在开始 for 循环的下一次迭代之前将其递增到 1。

最后,您应该使用 .equals() 而不是 ==,因为 ArrayList 返回一个 Character 对象而不是 >字符

这是我的想法:

for (int i = 0; i < characterList.size() - 1; i++) {
        System.out.println("1st Loop: " + characterList.get(i));
        System.out.println("1st Loop: " + characterList.get(i + 1));
        System.out.println("1st Loop: " + i);
        System.out.println();

        for (int j = 0; j < openParenthesis.length; j++) {
            if (characterList.get(i).equals(openParenthesis[j])) {
                if (characterList.get(i + 1).equals(closeParenthesis[j])) {
                    System.out.println("Nested Match");
                    System.out.println(characterList.get(i));
                    System.out.println(characterList.get(i + 1));
                    System.out.println();
                    characterList.remove(i);
                    characterList.remove(i);
                    i = -1;
                    break;
                }
            }
        }
    }

此代码已修复上述所有错误,并且应该可以正确运行。

关于java - 循环没有重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17705732/

相关文章:

java - JSF: p:dataTable with f:attribute 导致 "argument type mismatch"错误

java - 如何在 Eclipse 项目中找到入口点?

php - 在循环中创建多维数组

r - 从字符串调用 data.frame

java - 删除插入到作为队列实现的 LinkedList 中的任何对象

java - Spring Cloud 1.0.2 和 SR3 RestTemplate 忽略了我的 ResponseErrorHandler

java - 如何在 Java 中拆分包含多个 "lines"的字节数组?

javascript - 简单的 Javascript 循环无法按预期工作

java - 生成PDF时如何添加外部CSS?

loops - 为单独的 g_main_loop 添加回调