2014-02-05 3 views
0

를 만들 수 없습니다 : 자바 코드를 실행 간단한 2D 부울 배열

public static boolean[][] makeright(boolean tf, BufferedImage in){ 
     boolean[][] ret = new boolean[in.getWidth()][in.getHeight()]; 
     Arrays.fill(ret, tf); 
     return ret; 
    } 

나에게

java.lang.ArrayStoreException: java.lang.Boolean 
    at java.util.Arrays.fill(Arrays.java:2697) 
    at neuro.helper.makeright(helper.java:35) 
    at neuro.helper.main(helper.java:20) 

예외를 준, 선 (35) 내가 부울 [] [] RET를 만드는 라인입니다. ArrayStoreException이 무엇이고 어떻게 방지 할 수 있는지 아는 사람이 있습니까?

답변

2

문제는 1 차원이 아닌 2 차원 배열에서 Arrays.fill()을 사용하려고한다는 것입니다. 2D 배열에서 개별 (1 차원) 배열을 반복하여이 문제를 해결할 수 있습니다.

public class Test { 
    public static void main(String[] args){ 
     boolean[][] ret = new boolean[5][5]; 
     for(boolean[] arr : ret){ 
      Arrays.fill(arr, true); 
     } 

     for(boolean[] arr : ret){ 
      System.out.println(Arrays.toString(arr)); 
     } 
    } 
} 

이 뜻 출력

[true, true, true, true, true] 
[true, true, true, true, true] 
[true, true, true, true, true] 
[true, true, true, true, true] 
[true, true, true, true, true] 

는 참조 ArrayStoreException :

시도가 객체의 배열로 객체의 잘못된 유형을 저장 한 것을 나타 내기 위해서 (때문에) 슬로우

.

그리고 Arrays.fill(boolean[] a, boolean val) :

은 부울 지정된 배열의 각 요소에 지정된 부울 값을 할당한다.

당신은 또한이 같은 부울 값의 배열을 전달하는 public static void fill(Object[] a, Object val) 더 일반적인 사용할 수 있습니다

:

public static void main(String[] args) { 
    boolean[][] ret = new boolean[5][5]; 
    boolean[] tofill = new boolean[] { true, true, true, true, true }; 

    Arrays.fill(ret, tofill); 

    for (boolean[] arr : ret) { 
     System.out.println(Arrays.toString(arr)); 
    } 
} 
3

boolean[][]을 매개 변수로 허용하는 Arrays.fill의 버전이 없습니다. 문서 here을 참조하십시오.

물론 R.J. 덧글에 지적했다면 boolean[]을 두 번째 매개 변수로 전달하는 한 boolean[][]을 첫 번째 매개 변수로 전달할 수 있습니다.

+2

2 차원 배열은 1 차원 배열의 1 차원 배열입니다. 'fill' 메쏘드의 두번째 인자로 1-d 배열을 제공한다면, 그것은 작동 할 것입니다. 그리고 그것이 바로 여기의 문제입니다. – SudoRahul

+0

답변을 수정하여 올바르게 작성하겠습니다. 좋은 지적. – neutrino

0

당신은 작동하지 않습니다 하나의 부울 값을 가진 부울 배열의 배열을 채우기 위해 노력하고있다 . 대신 다음과 같이해야합니다.

for (int i = 0; i < ret.length; i++) { 
    Arrays.fill(ret[i], tf); 
}