0Pricing
Java Academy · บทเรียน

การทำความสะอาดและตรวจสอบข้อมูล 2 มิติ

ทำความสะอาดและตรวจสอบข้อมูลจำนวนเต็ม 2 มิติ โดยรองรับแถว null ตรวจสอบขอบเขตดัชนี จำกัดค่าให้อยู่ในช่วง ปรับรูปทรงแถวที่มีความยาวต่างกันให้เป็นมาตรฐาน และสร้างรายงานการตรวจสอบ

การทำความสะอาดและตรวจสอบข้อมูล 2 มิติ เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 6 จากทั้งหมด 6 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 6 บทเรียน

เหตุใดจึงต้องจัดข้อมูลสองมิติให้สะอาด

เป้าหมาย: ทำให้ข้อมูลจำนวนเต็มสองมิติมีความปลอดภัยและสอดคล้องกัน เราจะ (1) ตรวจสอบแถวที่เป็นค่าว่าง (2) ตรวจสอบขอบเขตของแต่ละแถว (3) จำกัดค่าให้อยู่ในช่วงที่ถูกต้อง (4) ปรับรูปทรงของข้อมูลที่แต่ละแถวมีความยาวต่างกันให้เป็นมาตรฐานเมื่อจำเป็น และ (5) สร้างรายงานตรวจสอบความถูกต้อง

ค่าว่างและขอบเขต

ขั้นที่ 1: แทนที่แถวที่เป็นค่าว่างด้วยอาร์เรย์ว่าง และคัดลอกค่าเพื่อป้องกันการเปลี่ยนแปลงโดยไม่ตั้งใจ จัดเตรียมตัวช่วย inBounds เพื่อตรวจสอบความยาวของแต่ละแถว

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
  }
}

จำกัดค่าให้อยู่ในช่วง

ขั้นที่ 2: จำกัดค่าให้อยู่ในช่วงที่ถูกต้อง เช่น 0–100 ค่าติดลบที่ไม่ถูกต้องจะกลายเป็น 0 และค่าที่มากเกินไปจะกลายเป็น 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);
  }
}

ปรับรูปทรงให้เป็นมาตรฐาน

ขั้นที่ 3: ปรับให้มีรูปทรงเป็นสี่เหลี่ยมผืนผ้า โดยเติมแต่ละแถวที่สั้นหรือเป็นค่าว่างให้ยาวเท่ากับแถวที่ยาวที่สุด ด้วยค่าที่ใช้เติม เช่น 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);
  }
}

รายงานการตรวจสอบความถูกต้อง

ขั้นที่ 4: สร้างรายงานการตรวจสอบความถูกต้อง โดยนับค่าติดลบ ค่าที่มากเกินไป แถวที่เป็นค่าว่าง และจำนวนเซลล์ทั้งหมดที่เข้าถึง

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);
  }
}

การพิมพ์โดยข้ามแถวที่เป็นค่าว่าง

ขั้นที่ 5: จัดเตรียมการพิมพ์ให้คอลัมน์ตรงกัน โดยข้ามแถวที่เป็นค่าว่างได้อย่างเหมาะสมและเคารพความยาวของแต่ละแถว

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);
  }
}

ตรวจสอบการเข้าถึงอย่างปลอดภัย

ตรวจสอบอย่างรวดเร็ว: คุณจะเข้าถึง m[r][c] อย่างปลอดภัยกับข้อมูลที่แต่ละแถวอาจมีความยาวต่างกันได้อย่างไร

สรุปทบทวนและขั้นถัดไป

สรุปทบทวน: คุณคัดลอกข้อมูลอย่างรัดกุม ตรวจสอบดัชนี จำกัดค่า ปรับรูปทรงของข้อมูลที่แต่ละแถวมีความยาวต่างกันให้เป็นมาตรฐาน และสร้างสรุปผลการตรวจสอบแล้ว ส่วนประกอบพื้นฐานเหล่านี้ทำให้อัลกอริทึมสองมิติในบทเรียนถัดไปทำงานได้อย่างแข็งแกร่ง

คำถามที่พบบ่อย

บทเรียน “การทำความสะอาดและตรวจสอบข้อมูล 2 มิติ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การทำความสะอาดและตรวจสอบข้อมูล 2 มิติ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 6 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทำความสะอาดและตรวจสอบข้อมูล 2 มิติ”

ทำความสะอาดและตรวจสอบข้อมูลจำนวนเต็ม 2 มิติ โดยรองรับแถว null ตรวจสอบขอบเขตดัชนี จำกัดค่าให้อยู่ในช่วง ปรับรูปทรงแถวที่มีความยาวต่างกันให้เป็นมาตรฐาน และสร้างรายงานการตรวจสอบ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 6 จากทั้งหมด 6 บทเรียน

บทเรียน “การทำความสะอาดและตรวจสอบข้อมูล 2 มิติ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐานอาร์เรย์ 2 มิติและการวนซ้ำแบบซ้อนกัน
  2. อาร์เรย์แบบแถวความยาวต่างกันและการจัดรูปแบบตาราง
  3. ค่าสูงสุดรายแถว/คอลัมน์ การสลับแถวคอลัมน์ และการจัดรูปแบบ
  4. โครงงานขนาดเล็ก 2 มิติ: สมุดบันทึกคะแนน
  5. ยูทิลิตี 2 มิติในคลาสตัวช่วย (ปรับโครงสร้างโค้ด)
  6. การทำความสะอาดและตรวจสอบข้อมูล 2 มิติ
← กลับไปที่ Java Academy