2009-11-29 5 views
0

사랑 나누기를 증가는, 하나님 감사합니다, 이제 배열에 왔어요.배열 : 계수, 비교 및 ​​

지금, 나는이 개 배열을 가지고있어!

int colorvalues[][] = {{34,255,255,56},{127,204,11,34},{123,98,127,34},{34,34,127,17}}; 

지금, I 히스토그램을 작성하고자하는 4 × 4 화소의 화상으로 상상 0 내지 I는 * 255 2했습니다 여기에서 예를 들어 255, 2 × 127 colorvalues의 분포 5 * 34 등등.

그래서 작성한 히스토그램의 int [] = 새로운 INT [255];

for(int i=0; i < colorvalues.length; i++){ 
    for (int j = 0; j < colorvalues.length; j++){ 
     System.out.println("Colorvalue in Array " + i + "." + j + " is" + colorvalues[i][j]); 
    } 
} 

를 지금까지 너무 좋아 내 colorvalues은 내가 쓴 올바른지

테스트합니다. 이제 히스토그램 [255]에서 0에서 255까지 진행하는 절차를 작성하고 colorvalues ​​[] []의 값과 비교하고, 예를 들어 히스토그램 [34]이 colorvalues ​​[] []와 비교하면 히스토그램에 5를 더합니다 [34]. colorvalues ​​[] []에는 5 번 34 개가 있기 때문입니다.

아마 내 생각은 잘못이며, I는 0에서 255 colorvalues ​​카운터에 대한 다른에 대한 히스토그램 [255] [], 255을 했어야했다. 그렇다면 어떻게 그것을 실현할 수 있습니까?

답변

3

당신은 실제로 히스토그램을 통해 이미지를 통해 모든 가능한 값으로 반복에 대한 반복해서는 안된다. 이미지의 반복 충분해야한다 : 당신은 단순히 히스토그램 배열의 인덱스로 이미지의 밝기 값을 취할 수

for(int i=0; i < colorvalues.length; i++){ 
    for (int j = 0; j < colorvalues.length; j++){ 
      histogram[colorvalues[i][j]]++; 
    } 
} 

.

그리고 당신은 카운터를 저장하는 배열의 배열을 만들 필요가 없습니다. 배열은 특정 값에 대한 "셀"목록에 불과하다는 것을 기억하십시오. int[]은 정수 값을 저장할 수있는 "셀"의 범위에 불과합니다. 그것은 당신의 계산입니다. 해당 셀 목록에 색인은 히스토그램의 밝기 값입니다. 모든 배열에 대해 두 가지 정보가 있습니다. 셀의 인덱스와 해당 셀의 값입니다. 당신은 단지 둘 다 사용하는 방법을 알아 내야합니다.

그리고 주석의 PSpeed 노트, 당신은 코드가 실제로 배열의 경계를 벗어난 값에 접근 시도하지 않습니다 있는지 확인 할 수 있습니다 : 색상 값이 필요

if (colorvalues[i][j] >= 0 && colorvalues[i][j] <= 255) { 
    histogram[colorvalues[i][j]]++; 
} 

때문에 int s입니다. 즉, − 2147483648에서 2147483647까지의 값을 보유 할 수 있습니다. 이는 히스토그램이 수용 할 수있는 것보다 큰 범위입니다. 예를 들어 색상 값이 3456 인 경우 ArrayIndexOutOfBoundsException 때문에 프로그램이 루프에서 멈 춥니 다. 코드 TRID 255

ETA의 최대 사용 가능한 인덱스를 넘어 방법입니다 지수 3456과 histogram 배열에 값을 액세스 할 수 있기 때문에 : 당신의 히스토그램이 int[255] 인에 관해서는 : 나는 완전히 죄송합니다, 하나를 간과. Java에서 새 h 열을 작성할 때 길이 인을 지정하십시오. 최대 색인은 아 U니다. 그래서 여러분이 사용하는 것은 배열에서 사용할 수있는 최대 인덱스보다 정확히 하나 더 큽니다. 따라서 new int[256]은 0에서 255까지의 인덱스를 가진 배열입니다.

+0

그리고 colorvalues가 가짜 값으로 채워지는 경우 히스토그램 크기보다 상당히 클 수 있으므로 colorvalues ​​[i] [j]의 범위를 확인하고 싶을 수 있습니다. 즉, 당신이 그 보살핌을 우아하게 다루고 싶다면. – PSpeed

+0

@PSpeed ​​: 뭐라구? –

+0

NoCanDo : 그 지점을 약간 정교하게 작성했습니다. – Joey

0

맵 키가 색상 값이고 맵 값이 카운트 인 TreeMap에 히스토그램 값을 추가하고 싶습니다.

지도의 크기가 자동으로 증가하고 인덱스가 범위를 벗어나는 문제는 없습니다. 자동으로 크기 순서로 정렬됩니다.

+0

고맙지 만 한 번에 한 단계 씩). Java 배우기. –

+0

문제 없습니다. 또 다른 팁은 학급 단위 테스트를 작성하는 것입니다. 이것은 당신에게 많은 고통과 그것의 상당히 간단한 기술을 저장합니다. – Fortyrunner