0

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

これが私がこれまでに持っているものです。何か助けを得ることができますか?

スタックトレース:

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);
    }
  }
}
4

1 に答える 1

1

エラー トレースが表示されずに、それは難しい..しかし、@ を見て

public static void arrayToString(Scanner doc){

for(int tLines = 0; doc.hasNextLine(); tLines++){
  String lines[] = {doc.nextLine()}; // SINGLE ELEMENT ARRAY

  for(int pLines = 0; pLines <= tLines; pLines++){
      String arrayLine = lines[pLines].toString(); // if pLines > 0, you'll be sad

      walkArray(arrayLine, tLines);}}}

にアクセスするときに問題が発生する可能性が最も高くなりlines[pLines]ます。あなたのロジックが何をしようとしているのかわかりません (私はそこまで読んでいません... コードレビューをしただけです)、おそらくこれを再評価する必要があります。

于 2013-10-26T20:05:47.833 に答える