가장 먼저해야 할 일은 클래스의 모든 메서드 밖에있는 무의미한 for
루프 코드를 제거하는 것입니다. 이렇게하면 코드를 컴파일 할 수 없습니다. 그러나 일단 코드를 제거하면이 클래스는 곧바로 작동합니다. 또한 클래스에서 사용되지 않으므로 numbers
배열을 제거 할 수 있습니다. count
변수 만 사용하면 이유가 표시됩니다. 그들은 다음과 같이 있도록
또한 다른 노트, 당신은 당신의 생성자와 변수 정의를 변경해야
이
String name;
int max;
int[] count;
public Histogram(String name, int max)
{
this.name = name;
this.max = max;
this.count = new int[max+1];
}
max
때문에 가정하는 이유가 될 0 객체를 생성 이 클래스의 따라서,이 배열은 크기가 이고, 생성자의 변수 max
을 읽을 때 변경되지 않습니다. 따라서이 배열을 할당되지 않은 상태로 두어야하며 배열 을 생성자 안에 할당해야합니다.
언급 한대로이 히스토그램 클래스에서 발생 빈도를 얻는 방법과 혼동을 느낍니다. 히스토그램이 무엇인지 정의하십시오. 의 막대 그래프는 데이터에 표시되는 숫자의 빈도 인입니다. 클래스의 count
배열은 입니다.은 빈도 또는 데이터 세트에서 해당 숫자를 몇 번 보았는지 저장합니다. add()
메서드를 사용하고이 메서드에 입력 한 내용은 히스토그램에 표시되는 것으로 나타납니다. 당신이 0
본 횟수는 1 회, 1
2 시간, 데이터 집합에 2
4 배입니다 히스토그램의 작동 방법과 예를 들어
는
count[0] = 1, count[1] = 2, count[2] = 4
경우, 이것은 의미한다. 따라서 각 숫자의 빈도를 검색하려면 개수 배열의 모든 요소를 반복해야합니다. 위의 예제를 테스터 클래스에서 사용하면 다양한 추가 메서드를 호출 한 후에 각 숫자의 빈도 카운트는
count[0] = 1, count[1] = 1, count[2] = 2, count[3] = 1, count[4] = 1, count[5] = 1, count[6] = 1, count[7] = 2, count[8] = 1, count[9] = 1, count[10] = 0
이됩니다.
count
의 각 위치는 입니다. 숫자는 번입니다. 따라서 add()
방법의 경우 numbers
은보고있는 번호입니다. 따라서 해당 번호에 속한 특정 슬롯에 액세스하고 개수를 1 씩 증가시킵니다. 예를 들어 h.add(0);
을 수행하면 과 같으며 count[0] = count[0] + 1;
과 같습니다. 액세스 슬롯 0
및 증가 1. 우리는 이것을 1
시간으로 보았습니다. 이후에 h.add
로 전화하면 해당 번호가 추가로 표시됩니다.
그러나 추가 방법 은 오류 확인을 수행하지 않습니다.특히 0보다 작거나 max
보다 큰 숫자를 지정해야 히스토그램의 빈을 증가 시키려고 할 때 OutOfBoundsException
이됩니다. 따라서, 나는 이런 일이 일어나면 아무 것도하지 않고 간단하게 그 방법에서 돌아올 것을 추천합니다. 자동 데이터 세트에서 볼 수있는 최고의 수를 것 0 max
이 배열에 모든 요소를 지정합니다 int count[] = new int[max+1];
을하는 클래스 정의에서
public void add(int numbers) {
// Handles out of bounds case
if (numbers < 0 || numbers > max)
return;
count[numbers]++;
}
: 즉. 0 인덱스를 고려하여 1
을 추가해야합니다. 이것이 max+1
슬롯을 할당하는 이유입니다. 우리는 귀하의 데이터 세트에있는 가능한 모든 숫자의 빈도를 기록 할 수 있도록하기 위해이 작업을 수행합니다. 이 클래스에서 객체를 만들면 해당 객체가 모두 0으로 재설정되므로 즉시 객체를 사용할 수 있습니다. 내가 주목하고 싶은
한 가지는 당신이 빈의 수를 나타내는 별표를 표시하여 히스토그램을 구현하고 싶었다 말했다는 것이다. 따라서,이처럼 당신의 toString()
방법을 수정해야합니다 :
할 것입니다 위의 코드가 히스토그램에서 각 빈에 대한, 그것은 숫자의 빈도 수를 표시하는 것입니다 무엇
public String toString()
{
String result = name + "\n";
for (int index = 0; index < count.length; index++) {
result = result + index + ": "; // New
for (int indexStar = 0; indexStar < count[index]; indexStar++) // New
result = result + "*"; // New
result = result + "\n"; // New
}
return result;
}
, 뒤에 공백을 넣고 공백을 넣은 다음 해당 공백의 빈도만큼 별표를 배치하십시오. 따라서 첫 번째 예제를 살펴보면 다음과 같이 나타납니다.
0: *
1: **
2: ****
빈 칸수는 어떻게 표시되는지 알 수 있습니다. 나는이 클래스의 객체를 제대로 만들지 않았기 때문에 히스토그램의 이름은 정의되지 않았다. 그러나 이것은 히스토그램 빈도 계산에 대해 알아야 할 사항입니다.
희망 사항이 귀하의 질문을 해결해줍니다.
'for' 루프는 의미가 없습니다. 왜 그것은 메서드 외부에 떠 다니고 있습니까? –
snarky는 아니지만 'for' 루프를 제대로 끝내지 않아서 오류가 발생했을 수 있습니까? (int index = 0; index
rayryeng
수를 계산하는 방법을 알 수 없기 때문에 이것은 내 코드의 대략적인 초안입니다. h.add 메서드 안의 숫자의 빈도 – Kristen987