java中用printf()方法来生成bar chart

本文通过一个例子来说明java中printf()的使用方法,同时也涉及到利用for循环对数组中的元素进行操作:

先贴出代码:
public class PrintfTest{
    public static void main(String[] args) {
        int[] arr = {0,1,3,0,0,4,3,2,1,1,2};
        System.out.println("成绩分布:");
        for (int count=0; count<arr.length; count++ ) {
            if (count==10) {
                System.out.printf("%5d:",100);
            }else{
                System.out.printf("%02d-%02d:",count*10,count*10+9);
            }

            //根据情况利用for循环输出*
            for (int i=0; i<arr[count];i++ ) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

        }

程序的输出结果是:

成绩分布:
00-09:
10-19:*
20-29:***
30-39:
40-49:
50-59:****
60-69:***
70-79:**
80-89:*
90-99:*
  100:**
其中最值得注意的是printf()方法中数字0的使用:
  1. printf()方法顾名思义,单词前面的print代表输出,而f则代表format,表示进行格式化;
  2. %标志着格式化的开始,不可缺省;
  3. 举例而言,文中的printf(“%5d:”,100)的字母d代表decimal integer,也就是十进制整数,表示要把后面的数字格式化成十进制整数——在本例中就对应着后面的数字100。当然这里的100本身就是十进制整数,所以在输出结果中看不出差别来。
  4. 字母d和%之间的数字5代表着格式化的结果总共就占5列(把输出的结果想象成一个表格,便于理解)。可以看到输出结果中,100占了三列,而前边空出的部分正好对应两列——也就是和90对应的部分。
  5. 同样的道理:
  6. System.out.printf(“%02d-%02d:”,count*10,count*10+9);中的2也和5类似,也就是让格式化的结果占两列;
  7. 那么2前面的数字0是什么呢?
  8. 这个数字0代表格式化要求的列数为被输出结果占满时,空位用0来不足。举例而言:printf(“%06d:”, 299)就要求将299格式化成十进制整数,然后分给这个结果(也就是299)6个格子。但是299只能占据其中三个,那么在printf()方法默认右对齐的情况下,299前面就会出现3个空格。这个时候数字0就派上用场了。它起到的就是占位的作用:
public class  Test {
    public static void main(String[] args) {
        //举例说明数字0在格式化中的作用
        System.out.printf("%6d",299);
        System.out.println();
        System.out.printf("%06d",299);
    }
}

输出结果为:

   299
000299

由此可见数字0在格式化中的作用。

注:
1.注意格式化时,整个格式化的语句都需要加引号,如下图所示:

System.out.printf("%06d",299);

2.本文只着重强调了printf()方法格式化中数字0的作用,以及字母d代表的含义,但printf()方法,还有许多的可选格式化参数可以运用。如果有需要,可以参考帮助文档。
3.本文的例子参考了Java SE8 for Programmers, 3E P153。

猜你喜欢

转载自blog.csdn.net/qq_23889793/article/details/73171438
今日推荐