0Pricing
Java Academy · Pelajaran

Pembersihan dan Validasi Data 2D

Bersihkan dan validasi data bilangan bulat 2D: tangani baris null, periksa batas indeks, batasi nilai di luar rentang, normalkan bentuk array bergerigi, dan buat laporan validasi.

Pembersihan dan Validasi Data 2D adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 6 dari 6. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 6 pelajaran total.

Mengapa Merapikan 2D?

Tujuan: Membuat data bilangan bulat 2D aman dan konsisten. Kita akan: (1) menangani baris tanpa nilai, (2) memverifikasi batas pada setiap baris, (3) membatasi nilai ke dalam rentang yang valid, (4) menormalkan bentuk matriks tidak seragam jika diperlukan, dan (5) menghasilkan laporan validasi.

Nilai Kosong & Batas

Langkah 1: Ganti baris tanpa nilai dengan larik kosong dan salin nilai secara defensif. Sediakan pembantu inBounds untuk memeriksa panjang setiap baris.

public class Main {
  // Make a defensive copy of m. Replace null rows with empty arrays.
  static int[][] copyOrEmpty(int[][] m) {
    if (m == null) return new int[0][0];
    int[][] out = new int[m.length][];
    for (int r = 0; r < m.length; r = r + 1) {
      if (m[r] == null) {
        out[r] = new int[0];
      } else {
        out[r] = new int[m[r].length];
        for (int c = 0; c < m[r].length; c = c + 1) out[r][c] = m[r][c];
      }
    }
    return out;
  }

  // Safe bounds check for jagged matrices
  static boolean inBounds(int[][] m, int r, int c) {
    return m != null && r >= 0 && r < m.length && m[r] != null && c >= 0 && c < m[r].length;
  }

  public static void main(String[] args) {
    int[][] raw = new int[][] { null, {1, 2, 3}, {4} };
    int[][] cleaned = copyOrEmpty(raw);

    System.out.println("rows = " + cleaned.length);
    for (int r = 0; r < cleaned.length; r = r + 1) System.out.println("row " + r + " len = " + cleaned[r].length);

    System.out.println("inBounds(1,2) = " + inBounds(cleaned, 1, 2));  // true
    System.out.println("inBounds(2,2) = " + inBounds(cleaned, 2, 2));  // false
  }
}

Membatasi Nilai

Langkah 2: Batasi nilai ke dalam rentang yang valid (misalnya, 0–100). Nilai negatif yang tidak valid menjadi 0, sedangkan nilai yang terlalu besar menjadi 100.

public class Main {
  static int clamp(int v, int lo, int hi) { if (v < lo) return lo; if (v > hi) return hi; return v; }
  static void clampAll(int[][] m, int lo, int hi) {
    if (m == null) return;
    for (int r = 0; r < m.length; r = r + 1) {
      if (m[r] == null) continue;
      for (int c = 0; c < m[r].length; c = c + 1) m[r][c] = clamp(m[r][c], lo, hi);
    }
  }
  static void print(int[][] m) {
    for (int r = 0; r < m.length; r = r + 1) {
      if (m[r] == null) { System.out.println("<null row>"); continue; }
      for (int c = 0; c < m[r].length; c = c + 1) System.out.print(m[r][c] + (c + 1 < m[r].length ? " " : ""));
      System.out.println();
    }
  }
  public static void main(String[] args) {
    int[][] m = { { -5, 101, 50 }, null, { 200 } };
    System.out.println("before clamp:");
    print(m);
    clampAll(m, 0, 100);
    System.out.println("after clamp [0..100]:");
    print(m);
  }
}

Menormalkan Bentuk

Langkah 3: Normalkan ke bentuk persegi panjang dengan mengisi setiap baris yang lebih pendek (atau tanpa nilai) hingga sepanjang baris terpanjang menggunakan nilai pengisi (misalnya, 0).

public class Main {
  static int[][] padToMaxCols(int[][] m, int pad) {
    if (m == null) return new int[0][0];
    int rows = m.length;
    int maxCols = 0;
    for (int r = 0; r < rows; r = r + 1) if (m[r] != null && m[r].length > maxCols) maxCols = m[r].length;
    int[][] out = new int[rows][maxCols];
    for (int r = 0; r < rows; r = r + 1) {
      int cols = (m[r] == null) ? 0 : m[r].length;
      for (int c = 0; c < cols; c = c + 1) out[r][c] = m[r][c];
      for (int c = cols; c < maxCols; c = c + 1) out[r][c] = pad;  // pad missing cells
    }
    return out;
  }
  static void print(int[][] x) {
    for (int r = 0; r < x.length; r = r + 1) {
      for (int c = 0; c < x[r].length; c = c + 1) System.out.print(x[r][c] + (c + 1 < x[r].length ? " " : ""));
      System.out.println();
    }
  }
  public static void main(String[] args) {
    int[][] jag = { {1, 23, 456}, {7, 8}, null, {90} };
    int[][] rect = padToMaxCols(jag, 0);
    print(rect);
  }
}

Laporan Validasi

Langkah 4: Buat laporan validasi: hitung nilai negatif, nilai yang terlalu besar, baris tanpa nilai, dan jumlah sel yang dikunjungi.

public class Main {
  static class Report { int negatives; int overMax; int nullRows; int cells; }
  static Report validate(int[][] m, int hi) {
    Report r = new Report();
    if (m == null) return r;
    for (int i = 0; i < m.length; i = i + 1) {
      if (m[i] == null) { r.nullRows = r.nullRows + 1; continue; }
      for (int j = 0; j < m[i].length; j = j + 1) {
        int v = m[i][j];
        r.cells = r.cells + 1;
        if (v < 0) r.negatives = r.negatives + 1;
        if (v > hi) r.overMax = r.overMax + 1;
      }
    }
    return r;
  }
  public static void main(String[] args) {
    int[][] m = { { -5, 101, 50 }, null, { 200 } };
    Report r = validate(m, 100);
    System.out.println("cells=" + r.cells + ", negatives=" + r.negatives + ", overMax=" + r.overMax + ", nullRows=" + r.nullRows);
  }
}

Pencetakan dengan Melewati Nilai Kosong

Langkah 5: Sediakan pencetakan sejajar yang dapat melewati baris tanpa nilai dengan baik dan menghormati panjang setiap baris.

public class Main {
  static boolean inBounds(int[][] m, int r, int c) {
    return m != null && r >= 0 && r < m.length && m[r] != null && c >= 0 && c < m[r].length;
  }
  static int[] widths(int[][] m) {
    int maxCols = 0; if (m == null) return new int[0];
    for (int r = 0; r < m.length; r = r + 1) if (m[r] != null && m[r].length > maxCols) maxCols = m[r].length;
    int[] w = new int[maxCols];
    for (int r = 0; r < m.length; r = r + 1) {
      if (m[r] == null) continue;
      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;
      }
    }
    for (int c = 0; c < w.length; c = c + 1) if (w[c] < 1) w[c] = 1;
    return w;
  }
  static void printAlignedSkipNull(int[][] m) {
    int[] w = widths(m);
    for (int r = 0; r < m.length; r = r + 1) {
      if (m[r] == null) { System.out.println("<skipped null row>"); continue; }
      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) {
    int[][] m = { { 1, 200, -3 }, null, { 45 } };
    printAlignedSkipNull(m);
  }
}

Pemeriksaan Akses Aman

Pemeriksaan singkat: Bagaimana Anda mengakses m[r][c] dengan aman pada data yang mungkin berbentuk tidak seragam?

Ringkasan & Berikutnya

Ringkasan: Anda menyalin data secara defensif, menjaga indeks, membatasi nilai, menormalkan bentuk matriks tidak seragam, dan membuat ringkasan validasi. Blok-blok pembangun ini membuat algoritma 2D berikutnya lebih tangguh.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pembersihan dan Validasi Data 2D” gratis?

Ya — teks lengkap “Pembersihan dan Validasi Data 2D” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 6 pelajaran total.

Apa yang akan aku pelajari di “Pembersihan dan Validasi Data 2D”?

Bersihkan dan validasi data bilangan bulat 2D: tangani baris null, periksa batas indeks, batasi nilai di luar rentang, normalkan bentuk array bergerigi, dan buat laporan validasi. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 6 dari 6.

Berapa lama pelajaran “Pembersihan dan Validasi Data 2D” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Array 2D dan Iterasi Bersarang
  2. Array Bergerigi dan Pemformatan Tabel
  3. Nilai Maksimum Baris/Kolom, Transposisi, dan Pemformatan
  4. Proyek Mini 2D: Buku Nilai
  5. Utilitas 2D sebagai Kelas Pembantu (Pemfaktoran Ulang)
  6. Pembersihan dan Validasi Data 2D
← Kembali ke Java Academy