下面的代码检查匹配的括号以查看它们是否正确嵌套。这看起来很简单,但我不明白为什么一旦找到嵌套匹配,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/