该程序旨在通过匹配左括号和右括号来错误检查其他源文件。因为我想在每次检查代码时使用该程序,所以我创建了一个数组来存储通过扫描仪输入的代码行,然后有一个方法将其转换为字符串,但是当我尝试存储新字符串并将其传递给另一个方法,该方法将把它拆开并检查左大括号和右大括号,它崩溃并且堆栈显示越界错误。我已尝试多次修复此问题,但我无法弄清楚导致它崩溃的原因。
这是我到目前为止所拥有的。我能得到任何帮助吗?
堆栈跟踪:
java.lang.ArrayIndexOutOfBoundsException: 1
at MatchUp.arrayToString(MatchUp.java:51)
at MatchUp.main(MatchUp.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
import java.io.*;
import java.util.Scanner;
public class braceMatchup{
public static void main(String[] args) throws IOException{
Scanner nameDoc = new Scanner(System.in);
System.out.println("Please enter the file name:");
String fileName = nameDoc.next();
File validation = new File(fileName);
while (!validation.exists()){
System.out.println("Please enter a valid file name:");
fileName = nameDoc.next();
validation = new File(fileName);
}
nameDoc.close();
Scanner doc = new Scanner(new FileReader(fileName));
arrayToString(doc);
}
public static void arrayToString(Scanner doc){
for(int tLines = 0; doc.hasNextLine(); tLines++){
String lines[] = {doc.nextLine()};
for(int pLines = 0; pLines <= tLines; pLines++){
String arrayLine = lines[pLines].toString();
walkArray(arrayLine, tLines);}
}
}
public static void walkArray(String arrayLine, int tLines){
int index;
for (int i = 0; i <= arrayLine.length(); i++){
if (arrayLine.substring(i) == "{" || arrayLine.substring(i) == "}")
index = i;
else
index = arrayLine.length();
bracketCount(arrayLine, index);
}
}
public static void bracketCount(String arrayLine, int index){
int openCount = 0;
int closeCount = 0;
if(arrayLine.substring(index) == "{"){
openCount++;
if (index != 0){
String formatLine = arrayLine.substring(0, index -1); //lines[pLines].indexOf('{')
System.out.println(formatLine.trim() + " " + "(" + openCount + ")" + "{");}
else if(index == 0){
String formatLine = arrayLine.substring(index); //arrayLine.indexOf('{')
System.out.println(formatLine.trim() + " " + "(" + openCount + ")" + "{");
}
else if(arrayLine.substring(index) == "}"){
closeCount++;
if(openCount > closeCount)
closeCount = openCount - 1;
else if(closeCount > openCount)
closeCount = 0;
if(index != 0){
String formatLine = arrayLine.substring(0, index - 1); //arrayLine.indexOf('{')
System.out.println( formatLine.trim() + " " + "}" + "(" + closeCount + ")");
}
else if (index == 0){
String formatLine = arrayLine.substring(0, index - 1); //arrayLine.indexOf('{')
System.out.println( formatLine.trim() + " " + "}" + "(" + closeCount + ")");}
}
else
System.out.println(arrayLine);
}
}
}