отредактировалПочему это «другое» заявление не работает?
Вот и вся программа. Я завернул символ в оболочке символов для использования .equals() и исправил проблему с индексом и заменил константы на литералы. Программа компилируется и работает нормально, говорит вам, если символы совпадают, но все же проскакивает, что «еще» заявление, когда есть непревзойденный символ:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Stack;
public class Exercise22_11 {
/**
*
*/
public static void main(String[] args) {
/**for command line argument*/
if(args.length == 0) {
System.out.println("You didn't enter an argument dummy!");
System.exit(0);
}
String fileString = "";
/**Open the file and read it*/
try{
File myOutFile = new File(args[0]);
Scanner input = new Scanner(myOutFile);
while (input.hasNext()){
fileString += input.next();
}
}//try
catch (FileNotFoundException e){
System.out.println("Sorry that file is not found " + e);
}//catch
/**Build the list of characters from file*/
char[] charArray = new char[fileString.length()];
for (int i = 0; i < fileString.length(); i++) {
charArray[i] = fileString.charAt(i);
}//for building charArray
/**Create a stack to manipulate grouping symbols*/
Stack<Character> stack = new Stack<Character>();
/**Pushes grouping symbols into stack and pops them when they correspond*/
for (int i = 0; i < charArray.length; i++) {
Character temp = new Character(charArray[i]);
if (temp.equals('{') || temp.equals('(') || temp.equals('[')) {
stack.push(temp);
} else if (temp.equals('}') || temp.equals(')') || temp.equals(']')) {
if (temp.equals('}') && stack.peek().equals('{')){
stack.pop();
} else if (temp.equals(')') && stack.peek().equals('(')) {
stack.pop();
} else if (temp.equals(']') && stack.peek().equals('[')) {
stack.pop();
} else {
System.out.println("There is a mistake at index: " + i);
System.out.println("\nHere's the code (the error is in the middle):\n");
for(int j = i - 20; j <= i + 20; j++) {
System.out.print(charArray[j]);
}
System.out.println("\n");
}
}
}//for
/**Inform user of result*/
if (stack.isEmpty()) {
System.out.println("Congratulations! Your grouping symbols are matched!");
}
else {
System.out.println("I'm sorry. Please fix your program.");
}
}//main
}//class
Окончательное «еще» заявление пропускаются во время выполнения, когда является ошибкой.
Задача заключалась в том, чтобы написать программу, используя список или коллекцию, которая проверяет, перекрываются ли символы группировки в программе. Файл должен быть введен как аргумент командной строки.
Вот что я спросил профессора (нет ответа еще нет):
Почему я не могу создать сканер для чтения каждого символа из .txt (или .java файл)? Я попытался использовать разделитель «" (без пробела), чтобы избежать RIDICULOUS String для Char [] для манипулирования с помощью стека().
Что такое инструкция friggin 'else?
Спасибо!
Константы 'ONE',' TWO' и т. Д. Являются всего лишь запутанными вещами. Утверждение 'temp == SIX && stack.peek(). Equals (FIVE)' абсолютно не имеет смысла. 'temp == ']' && stack.peek(). equals ('[')' будет намного легче читать. Если вы назвали константы логически, то есть «OPEN_SQUARE_BRACKET» и «CLOSE_SQUARE_BRACKET», это было бы читаемо, но не более, чем литералы и литералы короче. –
Вы не хотите печатать _index_, т. Е. 'I'? –
Почему вы иногда используете '==', а иногда 'Object.equals'? –