此数组如何打印此条形图

此数组如何打印此条形图

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();
        }
    }
}


输出:



我在理解该程序的工作方式时遇到了麻烦。我提出一些问题作为评论,以获得更清晰的答案。我还附上了输出的图片。

最佳答案

我直接在代码中评论了:

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
        }
    }
}

关于java - 此数组如何打印此条形图?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47048734/

10-10 02:21