2014-10-31 62 views
-2

我试过这种编码,但没有显示我想要的输出。它假设从1开始= 31java array month表

import java.util.Scanner; 
public class cth { 
public static void main(String args[])  { 


    int day[]= new int[12]; 

    day[0] = 31; 
    day[1] = 28; 
    day[2] = 31; 
    day[3] = 30; 
    day[4] = 31; 
    day[5] = 30; 
    day[6] = 31; 
    day[7] = 31; 
    day[8] = 30; 
    day[9] = 31; 
    day[10] = 30; 
    day[11] = 31; 

       System.out.printf("\t Year 2013\n\n"); 
       System.out.printf("\t--------------\n\n"); 
       System.out.printf("\t%s%8s\n\n","Month","cou.day"); 

       for (int j = 1; j<=day.length; j++){ 

       System.out.printf("\t%2d%8d\n", j, day[j]); 
       } 
    } 
    } 

%2d8d%的功能是什么?我很困惑

+0

这些是特殊的格式转换器。 [本教程](http://docs.oracle.com/javase/tutorial/java/data/numberformat.html)解释了它们的工作原理。 – Ben 2014-10-31 05:56:52

+0

由于数组中的索引从0开始,因此您应该将'day [j]'更改为'day [j-1]'。 – 2014-10-31 05:58:38

回答

2
for (int j = 1; j<=day.length; j++){ 
    System.out.printf("\t%2d%8d\n", j, day[j]); 
} 

你输出的第一行会一直1 28,但你的阵列从[0]启动,因此,无论是从0或打印day[j-1]循环。

对于%2d8d%的含义,这是打印一个填充有足够空间填充2列的整数,然后是填充为8个字符的第二个整数。有关更多详情,请参阅this documentation