简体   繁体   English

索引超出范围:1(java)当通过方法传递字符串参数时

[英]index out of bounds: 1 (java) when passing a string paramater through a method

The program is designed to error check other source files, by matching up the opening bracket with the closing bracket. 该程序旨在通过将左括号和右括号匹配来对其他源文件进行错误检查。 Because I want to use the program each time I'm error checking code, I've created an array that will store the lines of code feed through the scanner and then have a method that then converts it into a string, but when I try to store the new string and pass it through another method that will take it apart and check for the opening and closing braces, it crashes and the stack shows an out of bounds error. 因为我想在每次对代码进行错误检查时都使用该程序,所以我创建了一个数组,该数组将存储通过扫描仪输入的代码行,然后有一个方法将其转换为字符串,但是当我尝试时要存储新字符串并通过另一种方法将其拆开并检查开括号和右括号,它会崩溃,并且堆栈显示出界错误。 I've tried to fix this multiple times, but I can't figure out what is causing it to crash. 我已尝试多次修复此问题,但是我无法弄清楚是什么导致它崩溃。

Here is what I have so far. 这是我到目前为止所拥有的。 Can I get any help? 我可以帮忙吗?

Stack Trace: 堆栈跟踪:

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

Without seeing an error trace, it's hard.. but looking @ 没有看到错误跟踪,这很难..但是看@

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

The problem is most likely when accessing lines[pLines] . 访问lines[pLines]时,此问题最有可能发生。 I have no idea what your logic is attempting (I didn't read that far... just did a code review), so you should probably re-evaluate this. 我不知道您的逻辑正在尝试什么(我没有读那么远……只是进行了代码审查),所以您可能应该重新评估一下。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM