具有不同行长度的数组

ell*_*er7 2 java multidimensional-array

我必须在java中输出Julian日历.我每个月都打印出来,但是我不确定如何确定每个月对应的行长度.例如,2月,4月,6月,9月和11月没有31天.到目前为止这是我的代码:

 import java.text.DateFormatSymbols;

 public class testing {

 public void Day() {
   System.out.println();
   for (int i = 1; i <= 31; i++) {
     System.out.println(String.format("%2s", i));
   }
 }
 public void MonthNames() {
   String[] months = new DateFormatSymbols().getShortMonths();
   for (int i =  0; i < months.length; i++) {
     String month = months[i];
     System.out.printf(month + "   ");
     //System.out.printf("\t");       
    }    
  }

  public void ColRow() {
    int dayNum365 = 1;
    int array [][] = new int[31][12];
    System.out.println();
    for (int col = 0; col < 12; col++) {
      for (int row = 0; row < 31; row++) {
        array[row][col] += (dayNum365);
        dayNum365++;
      }
    }

    for (int col = 0; col < array.length; col++) {
     for (int row = 0; row < array[col].length; row++) {
        System.out.printf("%03d", array[col][row]);
        System.out.print("   ");
     }
    System.out.println();
    }
  }

  public static void main(String[] args) {
    testing calendar = new testing();
    calendar.MonthNames();
    calendar.ColRow();
  }
}
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 5

我们可以创建一个矩阵,每行有不同数量的列(称为锯齿状矩阵),如下所示:

int[][] months = new int[12][];

months[0] = new int[31]; // January
months[1] = new int[28]; // February, assuming a non-leap year
months[2] = new int[31]; // March
// and so on...
Run Code Online (Sandbox Code Playgroud)

现在,每当我们需要迭代它时,请记住考虑每行的长度不同:

int dayNum365 = 1;
for (int month = 0; month < months.length; month++) {
    for (int day = 0; day < months[month].length; day++) {
        months[month][day] = dayNum365;
        dayNum365++;
    }
}
Run Code Online (Sandbox Code Playgroud)

所有上述工作都是因为2D矩阵只是一个数组数组,在使用Java中的矩阵时要记住这一点.