2017-03-19 1 views
-4

0에서 9까지의 숫자 (배열) 목록을 취하여 각 숫자의 발생 횟수를 출력하는 히스토그램 (Java)을 작성하는 데 도움이 필요합니다. 그래서 예를 들어, {1,5,3,4,5,5,5,4,3,2,5,5,5,}로 인쇄 것입니다 :히스토그램을 작성하는 방법은 무엇입니까?

0 - 0 
1 - 1 
2 - 1 
3 - 3 
4 - 2 
5 - 7 
6 - 0 
7 - 0 
8 - 0 
9 - 0 

이것은 내가 지금까지 가지고있는 코드 :

import java.util.Scanner; 

public class Histogram 
{ 
    private int[] numCount; 

    public Histogram(int[] array) 
    { 
     setArray(array); 
    } 

    public void setArray(int[] array) 
    { 
     numCount=array; 
    } 

    public String toString() 
    { 
     int count=0; 
     String boi=""; 
     for(int x=0; x<=9; x++) 
     { 
     for (int y=0; y<numCount.length; y++) 
     { 
      if (numCount[x]==numCount[y]) 
      count++; 
      boi=x+" - "+ count+"\n"; 
     } 
     }  
     return boi; 
    }    

}

나는 (별도의 러너 파일)이 실행을 "9-40"이 인쇄됩니다. 제안 할 수있는 도움을 크게 감사 할 것입니다. 고맙습니다!

+0

(또한 boi += x + " - " + count + "\n"; 또는 StringBuilderappend -method를 사용할 수 있습니다) 당신이'의미 생각 (있는 경우 numCount [y] == x)' – Andreas

+0

각 루프마다 boi 문자열을 추가하지만 모든 숫자가 반복 될 때까지 최종 히스토그램을 알 수 없습니다. – bejado

+0

실제로'boi '에 * 추가하고'y' 루프 바깥에서 처리하고'count = 0'을 초기화하려면'boi + = x + "-"+ count + "\ n" 'x' 루프 안에. 그것은 4 개의 논리 오류였습니다. – Andreas

답변

1

코드에 몇 가지 오류가 있습니다. 첫 번째 것은 바깥 for 루프에 count을 초기화하지 않습니다. 코드에서 count은 한 번 0으로 설정되고 모든 숫자에 대해 증가되지만 재설정되지는 않습니다. 두 번째 비교는 numCount[x] == numCount[y]입니다. 배열 x에있는 numCount 배열의 값이 배열에 얼마나 자주 있는지 확인합니다. 문자열 boi이 생성되었지만 최신 줄을 추가하지 않고 덮어 쓰게됩니다. 그래서 당신은 항상 다음 방법을 작동합니다 (x = 9와) 마지막 줄이 표시됩니다

public String toString() { 
    String boi=""; 
    for(int x=0; x <= 9; x++) { 
     int count=0; 
     for (int y=0; y < numCount.length; y++) { 
      if (x == numCount[y]) { 
       count++; 
      } 
     } 
     boi = boi + x + " - " + count + "\n"; 
    }  
    return boi; 
} 

+0

정말 고마워요! 그것은 완벽하게 작동합니다. 주말 내내 이걸로 고군분투했다. – Streethawk57

관련 문제