숫자가 지정된 범위 (즉, 코드에 따라 1에서 13까지)에 있다는 것을 미리 아는 경우 Peter Tillemans의 간단한 솔루션을 채택 할 수 있습니다.
다른 해결책은 Map
을 사용하여 매트릭스에 포함 된 숫자의 빈도를 저장하는 것입니다. 외부 코드에 Map
인터페이스를 노출하는 것은 원하지 않을 경우
public static Map<Integer, Integer> frequency(int[][] matrix) {
Map<Integer, Integer> frequencies = new HashMap<Integer, Integer>();
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
Integer frequency = 0;
if (frequencies.containsKey(matrix[i][j])) {
frequency = frequencies.get(matrix[i][j]);
}
frequencies.put(matrix[i][j], frequency + 1);
}
}
return frequencies;
}
, 당신은 또한 결과를 저장하기위한 사용자 정의 데이터 유형을 작성할 수 있습니다. 이 방법으로 결과의 구현을 숨길 수 있으며 (배열,지도 또는 기타) 실제로 필요한 메서드 만 제공 할 수 있습니다.
public class FrequencyResults {
private Map<Integer, Integer> frequencies;
public FrequencyResults() {
frequencies = new HashMap<Integer, Integer>();
}
public void increment(int number) {
Integer frequency = 0;
if (frequencies.containsKey(number)) {
frequency = frequencies.get(number);
}
frequencies.put(number, frequency + 1);
}
public int get(int number) {
Integer frequency = 0;
if (frequencies.containsKey(number)) {
frequency = frequencies.get(number);
}
return frequency;
}
}
이 데이터 형식을 사용하면 frequency
함수가 다음 코드로 확장됩니다. 이 작은 재 작성으로 코드가하는 일을보다 효과적으로 표현할 수 있다고 생각합니다.
public static FrequencyResults frequency(int[][] matrix) {
FrequencyResults results = new FrequencyResults();
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
results.increment(matrix[i][j]);
}
}
return results;
}
출처
2010-06-20 22:19:30
frm
"사실이 더 재미 2 개 난수 번식하는 것 (처럼 인 Math.random() * 인 Math.random() + 1) 다음 지루한 흰색 대신 좋은 종형 곡선을 얻을 행렬을 채우기 위해 최종 주파수 분포에서 노이즈가 발생합니다. " 재미있게 말하면, 실제로 그 일을 할 계획입니다. 그렇게하는 또 다른 배열이있을 것입니다. –
ROTFL. :-) 다행스럽게도 도움이 될 수 있습니다. –