2017-11-01 1 views
0
public class BarChart // Modified from Fig 7.6 
{ 
    public static void main(String[] args) 
    { 
     int[] grades = {90, 71, 89, 75, 83, 87, 81, 100, 99, 83, 
       65, 100, 91, 78, 88, 62, 55, 84, 73, 89}; // 20 elements 
     int[] frequency = new int[11]; // 11 ranges 
     System.out.println("Grade distribution:"); 
     for (int i = 0; i < grades.length; i++) { 
      frequency[grades[i]/10]++; //How does this work? why does it say 10 
     } 
     for (int i = 0; i < frequency.length; i++) 
     { 
      if (i == 10) { 
       System.out.printf("%5d: ", 100); 
      } 
      else { 
       System.out.printf("%02d-%02d: ", i * 10, i * 10 + 9); 
      } 
      for (int stars = 0; stars < frequency[i]; stars++) { // How does it know where to print the stars? 
       System.out.print("*"); 
      } 
      System.out.println(); 
     } 
    } 
} 

출력 : 나는 문제가이 프로그램이 어떻게 작동하는지 이해하는 데이 배열은이 barchart를 어떻게 인쇄합니까?

pic of output

. 좀 더 명확한 답을 얻기 위해 몇 가지 질문을 코멘트로 넣었습니다. 출력물도 첨부했습니다.

+0

'등급 [내가]/10'은 10으로 등급을 나누고 코드 –

+0

을 reindent하시기 바랍니다 ... 그리고'printf' 문은 조건부을 인쇄 특정 수의 별. 디버거에 액세스 할 수있는 경우이 코드를 단계별로 실행하여 작동 방식을 확인하는 것이 좋습니다. –

+4

내가 틀렸다고 정정하되 StackOverflow가 다른 사람들의 코드를 설명하는 플랫폼이 아닙니다. 사소한 의견 : ** 코드 들여 쓰기 **를 사용하여 프로그램 구조 전달 – AKSW

답변

1

내가 직접 코드에 댓글을 달았 :

public class BarChart // Modified from Fig 7.6 
{ 
    public static void main(String[] args) 
    { 
     /*array that contains the data that will be used to display the distribution*/ 
     int[] grades = {90, 71, 89, 75, 83, 87, 81, 100, 99, 83, 
      65, 100, 91, 78, 88, 62, 55, 84, 73, 89}; // 20 elements 
     /*this frequecncy is used to divided your interval [0,100] in 11 slices*/ 
     int[] frequency = new int[11]; // 11 ranges 
     System.out.println("Grade distribution:"); 
     for (int i = 0; i < grades.length; i++) { 
      /*division of your i element of grade array by 10, 
      10 here is used here to make correspond your grades 
      to your slices defined in the frequency variable, 
      (type int divided by 10 will give an int as output 
      (the decimals are truncated -> equivalent as taking the floor of the number) 
      so you have an int that can be used as an index for your frequency array, 
      the grades[i]/10 will be incremented by 1 -> this will allow to print the stars after*/ 
      frequency[grades[i]/10]++; 
     } 
     for (int i = 0; i < frequency.length; i++) //loop that will do the display 
     { 
      if (i == 10) { 
       System.out.printf("%5d: ", 100);//this will print the last line of your output, 
       //printf will not print the EOL char so the other printing operations are done on the same line 
      } 
      else { 
       System.out.printf("%02d-%02d: ", i * 10, i * 10 + 9); 
       //this is will create your DD-DD intervals (00-09:, 10-19) 
      } 
      for (int stars = 0; stars < frequency[i]; stars++) { 
      // the value stored in frequency thanks to this operation: frequency[grades[i]/10]++; will be displayed, 
      //you loop from 0 until you reach the value of frequency[i] and display a star at each loop 
       System.out.print("*"); 
      } 
      System.out.println();//this will print the end of line character 
     } 
    } 
} 
관련 문제