このプログラムは、開き括弧と閉じ括弧を一致させることにより、他のソース ファイルをエラー チェックするように設計されています。コードをエラーチェックするたびにプログラムを使用したいので、スキャナーを介してフィードされたコード行を格納する配列を作成し、それを文字列に変換するメソッドを用意しましたが、試してみると新しい文字列を保存し、それを分解して左中括弧と右中括弧をチェックする別のメソッドに渡すと、クラッシュし、スタックに範囲外エラーが表示されます。これを何度も修正しようとしましたが、クラッシュの原因がわかりません。
これが私がこれまでに持っているものです。何か助けを得ることができますか?
スタックトレース:
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);
}
}
}