2014-09-13 2 views
0

이중 배열을 가지고 놀고 있습니다. 배열의 모든 짝수 요소를 0으로 설정하고 배열의 홀수 요소를 모두 1로 설정하려고합니다. 모든 것이 괜찮아 보입니다. , 그러나 나는 그것을 실행할 때 나는 많은 오류를 얻는다. 무엇이 잘못되었는지 확실하지 않습니다. 나는 운이없는 동안 잠시 그것을보고 있었다. 그것이 제공하는 오류를 해결하는 방법에 대한 조언은 훌륭합니다, 감사합니다!도 0으로 설정되고 홀수 값은 1로 설정됩니다.

번호 : 주어진

public class SetOf0and1 { 

    public static void main(String[]args) 
    { 

     int [][] numbers1 = {{4,2,5}, {2,4,1}, {1,3}}; 

     System.out.println("Before setting elements between 0 and 1: "); 
     displayArray(numbers1); 

     setEvenRowsTo0OddRowsTo1 (numbers1); 
     System.out.println("After setting the elements between 0 and 1"); 
     displayArray(numbers1); 

    } 

    public static void setEvenRowsTo0OddRowsTo1(int [][]array) 
    { 
    for(int i=0; i<array.length;i++) 
    { 
     for(int j=0; j<array[i].length;j++) 
     { 
      if(i%2 == 0) 
      array[i][j]=0; 
      else 
       array[i][j]=1; 

    } 
    } 
} 
    public static void displayArray(int [][]array) 
    { 
     for(int i=0;i<array.length;i++) 
     { 
      for(int j=0; j<array.length;j++) 
      { 
       System.out.println(array[i][j] + " "); 
      } 
      System.out.println(); 

    } 

    } 

} 

오류 :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 
    at SetOf0and1.displayArray(SetOf0and1.java:38) 
    at SetOf0and1.main(SetOf0and1.java:10) 
+1

주 : 대신 2 루프 용

사용이 경우 '(I % 2 == 0) 배열 [I] [J] = 0; else [array [i] [j] = 1;'array [i] [j] = i % 2; – assylias

답변

2
public static void displayArray(int [][]array) 
{ 
    for(int i=0;i<array.length;i++) 
    { 
     for(int j=0; j<array.length;j++) 
          ^^^^^^^^^ 
     { 
      System.out.println(array[i][j] + " "); 
     } 
     System.out.println(); 
} 

내면의 루프 배열에서 정지한다 [I] .length. 방법 displayArray에서

2

는 라인 :

for(int j=0; j<array.length;j++) 

은 다음과 같아야합니다

for(int j=0; j<array[i].length;j++) 
0

array.length 당신에게 길이 그것을가하는 일을 반환하지 않습니다! 당신은 2 차원 어레이를 가지고 있습니다. 따라서 array[x][y]이라고 말하면 array.lengthx이고 array[i].length (0 <= i < x의 경우)은 y입니다. 해당 인덱스에있는 배열의 length에 따라 다를 수 있습니다.

int answer = thenumber % 2; 

'thenumber는'그 여부를 확인하기 위해 정수 : 당신이 숫자가 홀수인지 확인하려면 당신이이 방법을 수행 할 수

-1

을 (그래서 공식은 정확히 같은 적용되지 않습니다) 짝수이다. 숫자가 짝수이면 '대답'은 0이됩니다.

그리고 당신은 배열을 루프 싶어 할 경우 :

for (int i = 0; i < numbers1.length(); i++) 
{ 
if (numbers1[i] % 2 == 0) { 
//EVEN 
numbers1[i] = 0; 
} 
else if (numbers1[i] % 2 == 1) { 
//ODD 
numbers1[i] = 1; 
} 
} 

그리고 더욱 컴팩트 :

for (int i = 0; i < numbers1.length(); i++) 
{ 
numbers1[i] %= 2; 
} 

편집 : 나는 당신이 가지고 배열 것을 잊었 ! 나는 ArrayList에 대해 생각하고 있었다! 결정된.

0
int [][] numbers1 = {{4,2,5}, {2,4,1}, {1,3}}; 

이 문장은 다리 3, 3 및 2의 배열 3 개를 사용하여 배열을 초기화합니다.

(당신이 두 요소가 세 번째 블록에! - {1,3}) 당신의 displayArray-방법에서

두 번 사용 ...

array.length 

... 루프의 크기를 구별하려면 루프의 수를 3으로 설정하는

... 그러나 마지막 블록은 단지 두 개의 요소 만입니다. -> errror.

for(int j=0; j<array[i].length;j++) 
관련 문제