Универсальный стек не "толкает" нужные элементы - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время я нахожусь в процессе отладки некоторого кода, который у меня есть для задачи, которая должна проверить, чтобы увидеть, есть ли баланс открывающих и закрывающих скобок.Для этого я использую общий стек, который я сделал, чтобы содержать все скобки.Это мой основной код

/* 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 или проблема в том, что я неправильно использую сканер и сам файл не читается правильно?С другой стороны, я видел файл, который должен быть прочитан, и я знаю, что он не пустой, так что это тоже не проблема.

Я знаю, что это, вероятно, будет глупой ошибкой, но сейчас я не могу ее различить.Буду признателен за любой вклад.

Спасибо!

...