該程序旨在通過將左括號與右括號進行匹配來錯誤檢查其他源文件。因爲我想在每次我錯誤檢查代碼時使用該程序,所以我創建了一個數組,它將通過掃描器存儲代碼饋送行,然後創建一個方法,然後將其轉換爲字符串,但是當我嘗試來存儲新的字符串,並通過另一個方法傳遞給另一個方法,這會將它拆開並檢查開始和結束括號,它會崩潰,並且堆棧顯示出界限錯誤。我試圖多次修復這個問題,但我無法弄清楚是什麼導致它崩潰。當通過方法傳遞一個字符串參數時,索引超出範圍:1(java)
這是我到目前爲止。我可以得到任何幫助嗎?
堆棧跟蹤:
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);
}
}
}
請記住,數組是0基地索引。 –
你能發佈錯誤跟蹤嗎? – Christian