system.out.printf("%3d",day)中的3是什么意思?请讲解一下printf的用法

解决方案 »

  1.   

    具体prinf的用法我也不清楚,C里面的东西。不过3的意思我明白,意思是输出的值占3个位置。
    例如:123,_23,__3
    (“_”表示占一个位置)
      

  2.   

    谢谢,这条语句是下面程序中的一条,其中还有一条语句不明白,请指教
     public static void main(String [] args)
          {
                GregorianCalendar d=new GregorianCalendar();
                int today=d.get(Calendar.DAY_OF_MONTH);
                int month=d.get(Calendar.MONTH);
                d.set(Calendar.DAY_OF_MONTH,1);//这条语句是把当前的日期设置为这个月的第一天,我不明白,如果说今天是19号,那1-18号怎么算出来?因为下面有一条语句是使日期向后加的.
                int weekDay=d.get(Calendar.DAY_OF_WEEK);
                System.out.println("Sun Mon Tue Wed Thu Fri Sat");
                for(int i=Calendar.SUNDAY;i<weekDay;i++)
                System.out.print(" ");
                do
                {
                      int day=d.get(Calendar.DAY_OF_MONTH);
                      System.out.printf("%3d",day);
                      if(day==today)
                      System.out.print("*");
                      else 
                      System.out.print(" " );
                      if(weekDay==Calendar.SATURDAY)
                      System.out.println();
                      d.add(Calendar.DAY_OF_MONTH,1);//这条语句就是使日期向后加
                      weekDay=d.get(Calendar.DAY_OF_WEEK);
                      
                }while(d.get(Calendar.MONTH)==month);
                if(weekDay!=Calendar.SUNDAY)
                System.out.println();
                
          }
      

  3.   

    for为了查看当前日期是星期几,条件是int i=Calendar.SUNDAY;i<weekDay;星期变化日期就自加1,1-18就是这样算出来的.
      

  4.   

    第一个问题:%3d,中的 3 是整型数据的占位宽度。也就是说不足 3 位的数字前用空格补足三位,也就是右对齐;如果是 -3,则在后面添加空格补足三位,左对齐。如果超过 3 位的话,则是实际宽度来输出。这些是 JDK 1.5 的新特性之一,方便对控制台输出进行格式化,具体的参数可以参看 java.util.Formatter 的 API。
    第二个问题:d.set(Calendar.DAY_OF_MONTH,1); 这样设置并不是设置当前日期为这个月的第一天,而是将日期设为当前月的 1 号。fantasybob 的回答可能有点误区,for 并不同查看当前日期是星期几,int weekDay=d.get(Calendar.DAY_OF_WEEK); 才是获得当前月的 1 号是星期几,而 for 是为了在前面输出空格的,比如 2007-08-01 是星期三,那在日历中它前面的星期日至星期二就是空档,for 就是用来产生这些空档的。后面的 do...while 循环是为了输出当前月的日历使用的,d.add(Calendar.DAY_OF_MONTH,1); 是为了增加一天。当日期已到 2007-08-31 时,再加一天的话,日期就变成了 2007-09-01 此时循环就结束了。
      

  5.   

    谢谢各位,还是有点不明白在:d.set(Calendar.DAY_OF_MONTH,1)这条语句上,为什么要把今天(比如是19号)设置为这个月的1号,而后面d.add(Calendar.DAY_OF_MONTH,1)这条语句是把日期向后加,(一直加到31号),那今天以前的日期怎么体现出来的呢?
      

  6.   

    你问这个问题的意思我明白了。看着代码给你解释吧:// 这一行代码生成的是当天的日期,比如说是今天“2007-07-19”
    GregorianCalendar d=new GregorianCalendar();// 下面两行是取得今天的日和月,也就是 today = 19,month = 6(也就是 7 月份,Sun 公司搞的鬼,月份从 0 开始的)
    int today=d.get(Calendar.DAY_OF_MONTH);
    int month=d.get(Calendar.MONTH);// 但是做日历要从 1 号开始啊,所以我们要把这个日期设为“2007-07-01”,也就是设置成为 1 号,并不是把 19 号设为 7 月份的第一天。
    d.set(Calendar.DAY_OF_MONTH,1);至此为止,现在 d 的日期就成了“2007-07-01”,然后再通过循环每次天数加 1,就可以生成 1~31 的日历了,明白了吗 o(·_·)o
      

  7.   

    bao110908(讨厌蟑螂) 说的挺详细的
    d.set(Calendar.DAY_OF_MONTH,1);do{
       这里面从1号开始...
    }
    while对否,讨厌小强的?
      

  8.   

    Ststem.out.printf();  ?????有这么写的?