В настоящее время я нахожусь в процессе отладки некоторого кода, который у меня есть для задачи, которая должна проверить, чтобы увидеть, есть ли баланс открывающих и закрывающих скобок.Для этого я использую общий стек, который я сделал, чтобы содержать все скобки.Это мой основной код
/* Following the specification in the README.md file, provide your
* SymbolBalance class.
* test these: { }’s, ( )'s, [ ]'s, " "’s, and /* * /’s are properly balanced
*/
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class SymbolBalance{
public static void main(String[] args){
if(args.length > 0){
try{
Scanner file = new Scanner(new File(args[0]));
MyStack<Character> balance = new MyStack<>();
String string;
char character;
char charNext;
int line = 0;
boolean beginning = true;
// the easiest way to understand/code this problem is by
// reading over each individual string, then each
// individual character of that string
while(file.hasNextLine()){
line++;
string = file.next();
for(int i = 0; i < string.length() - 1; i++){
character = string.charAt(i);
charNext = string.charAt(i + 1);
if(character == '[' || character == '{' ||
character == '(' || character == '/' &&
charNext == '*' || character == '/' &&
charNext == '*'){
balance.push(character);
}
else if(character == '*' && charNext == '/'){
if(balance.isEmpty()){
System.out.println("<"+i+">: Empty");
}
else if(balance.pop() != '*'){
System.out.println("<"+i+">: <"+character+">, <"+balance.pop()+">");
}
}
else if(character == ']'){
if(balance.isEmpty()){
System.out.println("<"+i+">: Empty");
}
else if(balance.pop() != '['){
System.out.println("<"+i+">: <"+character+">, <"+balance.pop()+">");
}
}
else if(character == '}'){
if(balance.isEmpty()){
System.out.println("<"+i+">: Empty");
}
else if(balance.pop() != '{'){
System.out.println("<"+i+">: <"+character+">, <"+balance.pop()+">");
}
}
else if(character == ')'){
if(balance.isEmpty()){
System.out.println("<"+i+">: Empty");
}
else if(balance.pop() != '('){
System.out.println("<"+i+">: <"+character+">, <"+balance.pop()+">");
}
}
else if(character == '"'){
if(beginning == true){
balance.push(character);
}
else{
if(balance.isEmpty()){
System.out.println("<"+i+">: Empty");
}
else if(balance.pop() != '('){
System.out.println("<"+i+">: <"+character+">, <"+balance.pop()+">");
}
beginning = true;
}
}
}
}
file.close();
}
catch(FileNotFoundException e){
System.out.println("No such file exists or cannot be found");
}
}
}
}
Что происходит, когда мой код запускается, возникает ошибка, в которой говорится, что мой стек пуст (из моего общего класса стека).Это заставляет меня думать, что мои персонажи не помещаются в стек (отсюда и исключение пустого стека).Я просмотрел свой общий код стека и уверен, что проблема не в этом файле.Что-то не так с моими утверждениями if или проблема в том, что я неправильно использую сканер и сам файл не читается правильно?С другой стороны, я видел файл, который должен быть прочитан, и я знаю, что он не пустой, так что это тоже не проблема.
Я знаю, что это, вероятно, будет глупой ошибкой, но сейчас я не могу ее различить.Буду признателен за любой вклад.
Спасибо!