2013-04-24 2 views
1

내 프로그램 준수를 사용하여 경계 예외의 아웃 그러나 나는이 프로그램을 실행할 때 그것은 나에게 "인덱스 아웃 바운드 예외의 배열을"제공은배열 인덱스있는 Integer.parseInt

public void readBoard(String filename) throws Exception { 
    File f = new File("myBoard.csv"); 
    Scanner reader = new Scanner(f); 
    while(reader.hasNext()){ 
     String line = reader.nextLine(); 
     String [] b = line.split(","); 
     String type = b[0]; 
     int i = Integer.parseInt(b[1]); 
     int j = Integer.parseInt(b[2]); 
     if(type.equals("Chute")) 
      board[i][j] = new Chute(); 
     else if(type.equals("Ladder")) 
      board[i][j] = new Ladder(); 
} 

오류가 INT의 난 = 정수이다. parseInt (b [1]); 내 질문은 내가 올바른 문자열로 문자열 [1] 및 [2] 설정 한 방법은 무엇입니까? 내가 범위 밖 예외 배열을 가지고 이후로 생각하지 않습니다. 나는 그것이 지역의 지점을 지적하고 아무것도 없다는 것을 의미하는 것으로 짐작하고있다.

답변

1

실제로 IndexOutOfBounds는 배열에 존재하지 않는 요소에 액세스하려고한다는 것을 의미합니다. 추가 :

System.out.println("array size = " + b.length); 

실제로 배열의 길이를 확인하십시오. 배열의 길이가 3이 되길 기대하지만 실제 행 읽기와 분할 방식에 따라 길이가 1 인 배열이 나타납니다. 또한 실제 행을 보는 데 도움이됩니다. 나눠 주려고.

이 시도 :

public void readBoard(String filename) throws Exception{ 
    File f = new File("myBoard.csv"); 
    Scanner reader = new Scanner(f); 
    while(reader.hasNext()){ 
     String line = reader.nextLine(); 

     // What line do we intend to process? 

     System.out.println("Line = " + line); 

     String [] b = line.split(","); 

     // How long is the array? 

     System.out.println("Array length = " + b.length); 

     String type = b[0]; 
     int i = Integer.parseInt(b[1]); 
     int j = Integer.parseInt(b[2]); 
     if(type.equals("Chute")) 
      board[i][j] = new Chute(); 
     else if(type.equals("Ladder")) 
      board[i][j] = new Ladder(); 
    } 

당신이 코드를 개발하는 과정에있어 때마다, 당신은 당신이 무슨 일을하는지 볼 수 있도록 다양한 분야의 가치를 덤프 디버그 문을 추가합니다. 여기에 몇 가지 핵심 디버그 문을 코드에 뿌리면 가정 (즉, "my array has three elements")과 실제로 진행되고있는 것 (즉, "my array only one element")을 조정하는 데 도움이됩니다.

+0

오우 한데요, 도움이되었습니다. 고맙습니다. 배열의 크기를 출력하는 것이 도움이되었습니다. 배열의 크기가 3이 아닌 1이라는 것을 알았습니다. 이제 메서드가 호출하는 파일에서 문제가있는 곳을 봅니다. 정말 고맙습니다! –

+0

행복하게 지내기를 바랍니다. 뿌리는 것은 재미 있고 코드가 성장하는 데 도움이됩니다. 이것은 디버깅 기술의 가장 기본이며 코딩을 계속하는 한 계속 도움이됩니다. 릴리스 버전에서 디버그 문을 제거하거나 디버그 문을 항상 래핑 할 수 있습니다. DEBUG라는 클래스에 최종 정적 부울 변수를 만든 다음, sprinkle해야 할 때 if (DEBUG) System.out.println ("myVar"+ myVar); – MarsAtomic

1

라인 분할이 제대로 작동하고 3 개의 별개의 문자열이 있는지 확인하십시오. b [1] 또는 b [2]로 인해 오류가 발생해야합니다. b [0]의 값이 무엇인지 확인하려면 인쇄 또는 디버그를하십시오.

1

이 때문에 배열 크기에 바운드에서 이후,이 그것을 시도하는 것은 (1) 당신이 while 루프 전에 1.

public void readBoard(String filename) throws Exception { 
    File in = new File("myBoard.csv"); 
    Scanner reader = new Scanner(in); 
    while (reader.hasNext()) { 
     String line = reader.nextLine(); 
     String[] b = line.split(","); 
     if (b.length != 1) { 
      String type = b[0]; 
      int i = Integer.parseInt(b[1]); 
      int j = Integer.parseInt(b[2]); 
      if (type.equals("Chute")) 
       board[i][j] = new Chute(); 
      else if (type.equals("Ladder")) 
       board[i][j] = new Ladder(); 
     } 
    } 
} 
0

의 크기에 모든 배열을 건너 뛰어야입니다이

reader.nextLine[]; 

파일의 첫 번째 줄에는 하나의 요소 만 있기 때문에.