的编辑 的
这是整个计划。我将char包装在一个Character包装器中以使用.equals()并修复索引问题,并用文字替换常量。程序编译并运行正常,告诉您符号是否匹配,但是当有不匹配的符号时仍然会跳过“else”语句:
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
当出现错误时,在运行时跳过最后的“else”语句。
分配是使用列表或集合编写程序,以检查程序中的分组符号是否重叠。该文件应作为命令行参数输入。
这是我问教授的问题(还没有回答):
为什么我不能创建扫描程序来读取.txt(或.java)文件中的每个字符?我尝试使用“”(没有空格)的分隔符来避免使用RIDICULOUS String to Char []来操作stack()。
friggin'“else”声明是什么?
谢谢!
答案 0 :(得分:0)
如果此print语句用于调试,则不应将其放在else
内。你希望你的错误进入其中一个要修复(或弹出)的其他内容,然后打印发现错误的 。摆脱其他声明。做到这一点
} else if (temp == SIX && stack.peek().equals(FIVE)) {
stack.pop();
}
System.out.println("There is a mistake at index: " + charArray[i]); //it will work now