ファイルを読み込んで、同じ量の閉じたカッコと開いているカッコがあるかどうかをチェックするプログラムを作成しています。したがって、FileInputStreamとScannerクラスを使用してファイルを読み込み、各文字をArrayListに格納しました。ファイルの読み込みがブロックコメントで終わっていない場合、私のプログラムはほとんどの場合動作します。以下は私のコードです。例えばJava ArrayList IndexOutOfBoundファイルからのコメントを読むとき
private Input input;
private ArrayList<Character> fileText;
public q1_19() {
input = new Input();
fileText = new ArrayList<Character>();
}
private void storeTextInArray(String name) {
FileInput readFile = new FileInput(name); //Makes use of Scanner and FileInputStream
while(readFile.hasNextChar()) {
fileText.add(readFile.nextChar());
}
readFile.close();
}
private boolean booleanChecker() {
int braces = 0;
boolean lineComment = false;
boolean blockComment = false;
boolean constant = false;
boolean string = false;
for (int i = 0; i < fileText.size(); i ++) {
//Case lineComment
if ((fileText.get(i) == '/') && (fileText.get(i+1) == '/') && ((i+1)<fileText.size())) {
lineComment = true;
}
if ((lineComment) && (fileText.get(i) == '\n')) {
lineComment = false;
}
//Case constant
if ((fileText.get(i) == '\'') && (fileText.get(i+2) == '\'') && ((i+2)<fileText.size())) {
constant = true;
i++;
}
//End String
if ((string) && (fileText.get(i) == '"')) {
string = false;
}
//End blockComment
if ((blockComment) && (fileText.get(i) == '*') && (fileText.get(i+1) == '/') && (i+1 < fileText.size())) {
blockComment = false;
if (fileText.lastIndexOf(fileText) == i) {
break;
}
}
if (!(lineComment || blockComment || constant || string)) {
//String constant
if (fileText.get(i) == '"') string = true;
if ((fileText.get(i) == '/') && (fileText.get(i+1) == '*') && (i+1 < fileText.size())) blockComment = true;
if (!(lineComment || blockComment || constant || string)) {
if (fileText.get(i) == '{') { braces ++; System.out.println("+1"); }
if (fileText.get(i) == '}') { braces --; System.out.println("-1"); }
}
}
constant = false;
}
System.out.println(braces);
if (braces != 0) return false;
else return true;
}
私は {{}} /**/
を読むしようとすると、私が手にエラーが java.lang.IndexOutOfBoundsException: Index: 4, Size: 4 at java.util.ArrayList.rangeCheck(ArrayList.java:653) at java.util.ArrayList.get(ArrayList.java:429)
あり、私はほとんどのファイルを読むことができるように、それは本当に問題ではないんだけど、理由を理解したいと思います。これがStackFlowに関する私の最初の質問であるので、間違って質問しても私を許してください。どうもありがとうございました。
に起こるのだろうあなたは0から長さ 'にループしている - 1 '、まだあなたが持っています'fileText.get(i + 1)'。最大配列インデックスが 'length-1'であるので、これは配列の境界から外れてしまい、実際には1から' length'になります。 – Moira