【发布时间】:2015-04-19 11:36:03
【问题描述】:
这里的第一个问题尝试。尝试一些关于括号记录的面试准备挑战 - 即:记录字符串的开括号和右括号位置。我尝试使用括号对象,然后在每个条目处使用具有打开和关闭位置的单个数组。条件似乎都被捕获了,但是数组只是将最后的结果复制到数组中的所有条目。知道我做错了什么吗?已经将打印留到屏幕上,以便我尝试调试它,并且知道到目前为止我只考虑我的算法的基本情况。提前致谢。
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;
}
}
【问题讨论】: