0Pricing
Java Academy · 课时

不规则数组与表格格式化

处理不规则二维数组,并根据每列宽度打印对齐的表格;示例将在不使用 Scanner 的情况下构建一个示例矩阵。

不规则数组与表格格式化 是 CoddyKit 上的免费 Java Academy 课时。 这是第 2 节课,共 6 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 6 节课。

锯齿数组概念

锯齿二维数组:每一行可以有不同的长度。请分别处理各行,绝不要假设所有行都有相同的列数。

创建锯齿数组

通过为各行分配不同的长度来创建锯齿数组。消息说明了原因:每一行需要多少列,我们就只分配多少列。

public class Main {
  public static void main(String[] args) {
    // Create a jagged array with 3 rows of varying lengths
    int[][] m = new int[3][];

    // Row 0 has 2 columns
    m[0] = new int[]{1, 2};

    // Row 1 has 3 columns
    m[1] = new int[]{3, 4, 5};

    // Row 2 has 1 column
    m[2] = new int[]{6};

    // Print the jagged array
    System.out.println("Jagged array contents:");
    for (int r = 0; r < m.length; r++) {
      for (int c = 0; c < m[r].length; c++) {
        System.out.print(m[r][c] + " ");
      }
      System.out.println(); // new line after each row
    }
  }
}

安全迭代

对每一行使用 m[r].length,即可安全地进行迭代。内层循环的长度可能因行而异。

public class Main {
  public static void main(String[] args) {
    // Example jagged array
    int[][] m = {
      {1, 2},
      {3, 4, 5},
      {6}
    };

    // Safe nested loops for a jagged matrix
    for (int r = 0; r < m.length; r = r + 1) {
      // Always use the actual length of the current row
      for (int c = 0; c < m[r].length; c = c + 1) {
        int value = m[r][c];  // process the value
        System.out.print(value + " ");
      }
      System.out.println(); // new line after each row
    }
  }
}

列宽

要打印对齐的列,请扫描所有行,为每个实际存在的列计算宽度。

// Determine the maximum number of columns among all rows
		int maxCols = 0;
		for (int r = 0; r < m.length; r = r + 1) {
		  if (m[r].length > maxCols) maxCols = m[r].length;
		}

		// For each column, store the maximum string length of values in that column
		int[] w = new int[maxCols];
		for (int r = 0; r < m.length; r = r + 1) {
		  for (int c = 0; c < m[r].length; c = c + 1) {
			int len = Integer.toString(m[r][c]).length();
			if (len > w[c]) w[c] = len;
		  }
		}

对齐打印

在每个值的左侧填充空格,直到达到列宽,然后将整行作为一个字符串打印。

// Print each row with left-padded columns
		for (int r = 0; r < m.length; r = r + 1) {
		  String line = "";
		  for (int c = 0; c < m[r].length; c = c + 1) {
			String s = Integer.toString(m[r][c]);
			while (s.length() < w[c]) s = " " + s;  // left pad with spaces
			line = line + s + (c + 1 < m[r].length ? " " : "");
		  }
		  System.out.println(line);
		}

无输入演示

运行它:此演示在代码中构建锯齿矩阵,计算列宽,并打印对齐的表格——无需输入。

public class Main {
  // Compute per-column widths for a jagged matrix
  static int[] colWidths(int[][] m) {
    int maxCols = 0;
    for (int r = 0; r < m.length; r = r + 1) {
      if (m[r].length > maxCols) maxCols = m[r].length;
    }
    int[] w = new int[maxCols];
    for (int r = 0; r < m.length; r = r + 1) {
      for (int c = 0; c < m[r].length; c = c + 1) {
        int len = Integer.toString(m[r][c]).length();
        if (len > w[c]) w[c] = len;
      }
    }
    // Ensure at least width 1 for each column
    for (int c = 0; c < w.length; c = c + 1) {
      if (w[c] < 1) w[c] = 1;
    }
    return w;
  }

  // Print the matrix with aligned columns
  static void printTable(int[][] m) {
    int[] w = colWidths(m);
    for (int r = 0; r < m.length; r = r + 1) {
      String line = "";
      for (int c = 0; c < m[r].length; c = c + 1) {
        String s = Integer.toString(m[r][c]);
        while (s.length() < w[c]) s = " " + s;
        line = line + s + (c + 1 < m[r].length ? " " : "");
      }
      System.out.println(line);
    }
  }

  public static void main(String[] args) {
    // Sample jagged matrix (no Scanner; values are hard-coded)
    int[][] m = {
      {1, 23, 456},
      {7, 8},
      {90, 12, 3, 4}
    };

    System.out.println("Aligned table:");
    printTable(m);
  }
}

锯齿数组迭代检查

快速检查:哪个嵌套循环可以安全地迭代锯齿矩阵中的每个元素?

回顾与下一步

回顾:您创建了锯齿数组,使用每行各自的长度安全地进行迭代,计算了列宽,并打印了对齐的表格——不使用 Scanner。

下一步:探索行最大值、列最大值以及矩阵转置。

常见问题解答

「不规则数组与表格格式化」课时是免费的吗?

是的 — 「不规则数组与表格格式化」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 6 节课。

「不规则数组与表格格式化」这节课中我会学到什么?

处理不规则二维数组,并根据每列宽度打印对齐的表格;示例将在不使用 Scanner 的情况下构建一个示例矩阵。 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Java Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 6 节。

「不规则数组与表格格式化」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Java Academy 课中编写并运行代码吗?

能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 二维数组基础与嵌套遍历
  2. 不规则数组与表格格式化
  3. 行列最大值、转置与格式化
  4. 二维小项目:成绩簿
  5. 将二维工具提取为辅助类(重构)
  6. 二维数据清理与验证
← 返回 Java Academy