2017-03-26 3 views
-1

나는 CSV는 2 차원 배열에 파일을로드하기 위해 노력하고있어,하지만 난 주에 전화를 갈 때 나는 오류를 스레드에서실패는 2 차원 배열

예외가 "기본에 .CSV 파일을로드 "java.lang.ArrayIndexOutOfBoundsException : 내 코드에서 0

파일이 다음 라인을 가지고있는 동안, 그것은 다시 2D 배열로 이동하는 문자열 배열에 저장합니다 라인을 분할합니다. 어떻게 오류가있을 수 있는지 이해하지 못합니다. 설명 할 의사가있는 사람이 있습니까? 아니면 매우 밀도가 높습니까? 나도 몰라

public int rows = 0; 
public int cols = 0; 
public String[][] filetable = new String[rows][cols]; 

public void set_Array(File example) 
{   
    try 
    { 
     FileReader file = new FileReader(example); 
     Scanner sc = new Scanner(file); 

     if(sc.hasNextLine()) 
     { 
      String[] tokens = sc.nextLine().split(","); 
      cols = tokens.length; 
      rows++; 
     } 

     while(sc.hasNextLine()) 
     { 
      rows++; 
      sc.nextLine();     
     } 
    } 
    catch (FileNotFoundException e) 
    { 
     System.out.println(e); 
    } 

} 
public void to_Array(File example) 
    { 
     try 
     { 
      FileReader file = new FileReader(example); 
      Scanner sc = new Scanner(file); 

      int r = 0; 
      while(sc.hasNextLine()) 
      { 
       String[] tokens = sc.nextLine().split(","); 
       for(int c = 0; c < cols; c++) 
        {filetable[r][c] = tokens[c];} 

       r++; 
      } 

     } 

       catch (FileNotFoundException e) 
     { 
      System.out.println(e); 
     } 
    } 
+0

이 문제는 아마도'filetable '과 관련이 있지만,'filetable' 설정 방법을 보여주지는 못합니다. 또한,'cols'를 계산하는 또 다른 방법을 사용한다고하지만, 우리는 그것이 무엇인지 알려주지 않습니다. 결론 : 당신에게 우리에게 당신을 도울만한 정보를 거의주지 않았습니다. – ajb

+0

죄송합니다. 지금 고칠 것입니다! – JAVANOOB

+1

'filetable'을 만들 때'rows'와'cols'는 모두 0입니다. 왜냐하면'filetable'은 객체가 처음 생성 될 때 만들어지기 때문입니다. 'rows'와'cols'가 계산 된 후에'filetable = new String [rows] [cols];를 할당 해보십시오. 또한, 당신의 방법은 전체 입력 파일을 두 번 통과해야하는데, 이상적이지 않습니다. 'ArrayList'를 사용하면 크기가 동적으로 커질 수있는 배열을 만들 수 있으므로 행 수를 미리 계산할 필요가 없습니다. – ajb

답변

1

는 당신이 set_Arrayto_Array 메소드를 호출하는 주문. 하지만 문제는 및 cols=0 일 때 public String[][] filetable = new String[rows][cols];이 호출되어 본질적으로 0 행과 0 크기의 2D 배열을 생성한다는 것입니다. 수정하려면 set_Array 메서드를 호출하여 rowscols에 적절한 값을 할당 한 다음 to_Array 메서드 내에서 2D 배열을 인스턴스화합니다.

public void to_Array(File example) 
{// Now rows and cols will have proper values assigned 
String[][] filetable = new String[rows][cols]; 
    try 
    { 
     FileReader file = new FileReader(example); 
     Scanner sc = new Scanner(file); 

     int r = 0; 
     while(sc.hasNextLine()) 
     { 
      String[] tokens = sc.nextLine().split(","); 
      for(int c = 0; c < cols; c++) 
       {filetable[r][c] = tokens[c];} 

      r++; 
     } 

    } 

      catch (FileNotFoundException e) 
    { 
     System.out.println(e); 
    } 
}