0Pricing
Java Academy · Урок

Массивы разной длины и форматирование таблиц

Работайте с двумерными массивами разной длины и выводите выровненные таблицы, используя ширину каждого столбца. В демонстрации создаётся пример матрицы без Scanner.

«Массивы разной длины и форматирование таблиц» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 6. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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.

Далее: изучите максимумы строк и столбцов, а также транспонирование матрицы.

Часто задаваемые вопросы

Урок «Массивы разной длины и форматирование таблиц» бесплатный?

Да — полный текст урока «Массивы разной длины и форматирование таблиц» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 6 уроков всего.

Чему я научусь в уроке «Массивы разной длины и форматирование таблиц»?

Работайте с двумерными массивами разной длины и выводите выровненные таблицы, используя ширину каждого столбца. В демонстрации создаётся пример матрицы без Scanner. Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 6.

Сколько времени занимает урок «Массивы разной длины и форматирование таблиц»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы двумерных массивов и вложенный перебор
  2. Массивы разной длины и форматирование таблиц
  3. Максимумы строк и столбцов, транспонирование и форматирование
  4. Мини-проект: ведомость оценок
  5. Двумерные утилиты как вспомогательный класс (рефакторинг)
  6. Очистка и проверка двумерных данных
← Назад к Java Academy