การทำความสะอาดและตรวจสอบข้อมูล 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐานอาร์เรย์ 2 มิติและการวนซ้ำแบบซ้อนกัน
- อาร์เรย์แบบแถวความยาวต่างกันและการจัดรูปแบบตาราง
- ค่าสูงสุดรายแถว/คอลัมน์ การสลับแถวคอลัมน์ และการจัดรูปแบบ
- โครงงานขนาดเล็ก 2 มิติ: สมุดบันทึกคะแนน
- ยูทิลิตี 2 มิติในคลาสตัวช่วย (ปรับโครงสร้างโค้ด)
- การทำความสะอาดและตรวจสอบข้อมูล 2 มิติ