первый вопрос здесь. Попытка некоторых проблем подготовки к выпуску журналов журналов скобок - то есть: запишите позиции открытого и закрытого кронштейнов строки. Я попытался использовать объект скобки, чтобы затем использовать один массив с открытой и закрытой позицией для каждой записи. Все условия кажутся пойманными, но тогда массив просто дублирует последние результаты для всех записей в массиве. Любая идея, что я делаю неправильно? Оставил печать на экране для моих попыток отладить это уже и знаю, что я рассматриваю только основной случай с моим алгоритмом. Заранее спасибо.Доступ к объекту Java для записи предыдущих записей
class ParanthesisMatch {
static final char leftBracket = '(';
static final char rightBracket = ')';
public static void main(String[] args) {
String str = "(I (am (the) basic) case)";
char[] input = str.toCharArray();
int opens = 0;
int closes = 0;
int brackets = 0;
Bracket[] bracketArray = new Bracket[10];
System.out.println(input.length);
for (int i = 0; i < input.length; i++) {
System.out.println(input[i]);
if (input[i] == leftBracket) {
bracketArray[opens] = new Bracket();
System.out.println("Open trigger: " + i);
bracketArray[brackets].openBracket = i;
System.out.println("Open bracket is: " + bracketArray[opens].openBracket);
brackets++;
opens++;
}
if (input[i] == rightBracket) {
System.out.println("Close trigger: " + i);
bracketArray[brackets - closes].closeBracket = i;
System.out.println("Pos: " + (brackets - closes)
+ "Close bracket is: " + bracketArray[brackets - closes].closeBracket);
closes++;
}
}
for (int i = 0; i < brackets; i++) {
System.out.println("Bracket: " + i + " Open is " + bracketArray[i].openBracket + ", Close is " + bracketArray[i].closeBracket);
}
}
}
class Bracket {
public static int openBracket;
public static int closeBracket;
Bracket() {
openBracket = 0;
closeBracket = 0;
}
public void setOpen(int open) {
this.openBracket = open;
}
public void setClose(int close) {
this.closeBracket = close;
}
}
Обновление - Спасибо вам большое. Я обнаружил ошибку исключения нулевого указателя после и смог зафиксировать себя с тем же самым изменением. Статический наконечник был очень полезен для множества проблем, которые у меня были с моими объектами! Рабочий код для базового случая ((())), не вложенными (()()) все же:
class ParanthesisMatch {
static final char leftBracket = '(';
static final char rightBracket = ')';
public static void main(String[] args) {
String str = "(I (am (the) basic) case)";
char[] input = str.toCharArray();
System.out.println(input.length);
int opens = 0;
int closes = 0;
int brackets = 0;
Bracket[] bracketArray = new Bracket[10];
for (int i = 0; i < input.length; i++) {
if (input[i] == leftBracket) {
bracketArray[opens] = new Bracket();
bracketArray[brackets].setOpen(i);
brackets++;
opens++;
}
if (input[i] == rightBracket) {
bracketArray[brackets - 1 - closes].setClose(i);
closes++;
}
}
System.out.println(input);
for (int i = 0; i < brackets; i++) {
System.out.println("Bracket: " + i + " Open is " + bracketArray[i].openBracket + ", Close is " + bracketArray[i].closeBracket);
}
}
}
class Bracket {
public int openBracket;
public int closeBracket;
Bracket() {
openBracket = 0;
closeBracket = 0;
}
public void setOpen(int open) {
this.openBracket = open;
}
public void setClose(int close) {
this.closeBracket = close;
}
}