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

โครงงานขนาดเล็ก 2 มิติ: สมุดบันทึกคะแนน

โครงงานขนาดเล็ก: สร้างสมุดบันทึกคะแนนด้วยเมทริกซ์ int 2 มิติ พิมพ์ตารางให้ตรงแนว คำนวณค่าเฉลี่ยรายนักเรียนและรายงาน ส่ง ค้นหาผู้ทำผลงานดีที่สุด ปรับคะแนน และแสดงรายงานสรุป

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

ภาพรวมโครงงาน

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

ทำตามฉากต่าง ๆ และเรียกใช้ตัวอย่างโค้ดแต่ละส่วนตามลำดับ ไม่ต้องใช้ข้อมูลนำเข้า

สร้างและพิมพ์

ขั้นที่ 1: สร้างเมทริกซ์สมุดบันทึกคะแนนขนาดเล็กและพิมพ์โดยจัดแนวคอลัมน์ เราใช้ตัวช่วยคำนวณความกว้างคอลัมน์และตัวพิมพ์ที่เติมช่องว่างให้แต่ละค่า

public class Main {
				  // Join helper for one-dimensional arrays (space-separated)
				  static String join(int[] a) {
					String s = "";
					for (int i = 0; i < a.length; i = i + 1) {
					  s = s + a[i] + (i + 1 < a.length ? " " : "");
					}
					return s;
				  }

				  // Compute column widths for aligned printing (jagged-aware)
				  static int[] widths(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;
					  }
					}
					for (int c = 0; c < w.length; c = c + 1) if (w[c] < 1) w[c] = 1;
					return w;
				  }

				  // Print matrix with aligned columns
				  static void printAligned(int[][] m) {
					int[] w = widths(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) {
					// Create a 4x5 gradebook (4 students, 5 assignments)
					int[][] g = {
					  {78, 85, 90, 88, 92},
					  {95, 91, 89, 93, 87},
					  {60, 72, 70, 68, 75},
					  {88, 84, 79, 85, 90}
					};

					System.out.println("Gradebook (rows: students, cols: assignments):");
					printAligned(g);
				  }
				}
				

ค่าเฉลี่ยแถวและคอลัมน์

ขั้นที่ 2: คำนวณค่าเฉลี่ยของนักเรียนแต่ละคน (แถว) และงานแต่ละรายการ (คอลัมน์) การคำนวณค่าเฉลี่ยคอลัมน์ต้องตรวจสอบความยาวของแต่ละแถวเพื่อรองรับแถวที่มีความยาวไม่เท่ากัน

public class Main {
				  // Average of one row (student r)
				  static double rowAverage(int[][] g, int r) {
					int sum = 0;
					for (int c = 0; c < g[r].length; c = c + 1) sum = sum + g[r][c];
					return (double) sum / g[r].length;
				  }

				  // Average of one column (assignment c)
				  static double colAverage(int[][] g, int c) {
					int sum = 0;
					int count = 0;
					for (int r = 0; r < g.length; r = r + 1) {
					  if (c < g[r].length) { sum = sum + g[r][c]; count = count + 1; }
					}
					return (double) sum / count;
				  }

				  public static void main(String[] args) {
					int[][] g = {
					  {78, 85, 90, 88, 92},
					  {95, 91, 89, 93, 87},
					  {60, 72, 70, 68, 75},
					  {88, 84, 79, 85, 90}
					};

					// Compute per-student averages
					for (int r = 0; r < g.length; r = r + 1) {
					  double avg = rowAverage(g, r);
					  System.out.println("student " + r + " avg = " + String.format("%.2f", avg));
					}

					// Compute per-assignment averages
					int assignments = g[0].length;
					for (int c = 0; c < assignments; c = c + 1) {
					  double avg = colAverage(g, c);
					  System.out.println("assignment " + c + " avg = " + String.format("%.2f", avg));
					}
				  }
				}
				

นักเรียนและงานที่ดีที่สุด

ขั้นที่ 3: หานักเรียนที่ได้คะแนนสูงสุด (มีค่าเฉลี่ยแถวสูงสุด) และงานที่ได้คะแนนสูงสุด (มีค่าเฉลี่ยคอลัมน์สูงสุด)

public class Main {
				  static double rowAverage(int[][] g, int r) {
					int sum = 0;
					for (int c = 0; c < g[r].length; c = c + 1) sum = sum + g[r][c];
					return (double) sum / g[r].length;
				  }

				  static double colAverage(int[][] g, int c) {
					int sum = 0;
					int count = 0;
					for (int r = 0; r < g.length; r = r + 1) { if (c < g[r].length) { sum = sum + g[r][c]; count = count + 1; } }
					return (double) sum / count;
				  }

				  public static void main(String[] args) {
					int[][] g = {
					  {78, 85, 90, 88, 92},
					  {95, 91, 89, 93, 87},
					  {60, 72, 70, 68, 75},
					  {88, 84, 79, 85, 90}
					};

					// Find top student by average
					int bestStudent = -1;
					double bestAvg = -1.0;
					for (int r = 0; r < g.length; r = r + 1) {
					  double avg = rowAverage(g, r);
					  if (avg > bestAvg) { bestAvg = avg; bestStudent = r; }
					}

					// Find top assignment by average
					int assignments = g[0].length;
					int bestAssign = -1;
					double bestCol = -1.0;
					for (int c = 0; c < assignments; c = c + 1) {
					  double avg = colAverage(g, c);
					  if (avg > bestCol) { bestCol = avg; bestAssign = c; }
					}

					System.out.println("top student = " + bestStudent + " (avg=" + String.format("%.2f", bestAvg) + ")");
					System.out.println("top assignment = " + bestAssign + " (avg=" + String.format("%.2f", bestCol) + ")");
				  }
				}
				

ปรับคะแนน

ขั้นที่ 4: ใช้การปรับคะแนนแบบคงที่ (เช่น เพิ่ม 5 คะแนนต่อคะแนนหนึ่งค่า แต่ไม่เกิน 100) แล้วพิมพ์เมทริกซ์ก่อนและหลังการปรับ

public class Main {
				  // Add a flat curve of k points (capped at 100)
				  static void curve(int[][] g, int k) {
					for (int r = 0; r < g.length; r = r + 1) {
					  for (int c = 0; c < g[r].length; c = c + 1) {
						int v = g[r][c] + k;
						if (v > 100) v = 100;
						g[r][c] = v;
					  }
					}
				  }

				  static void print(int[][] g) {
					for (int r = 0; r < g.length; r = r + 1) {
					  for (int c = 0; c < g[r].length; c = c + 1) {
						System.out.print(g[r][c] + (c + 1 < g[r].length ? " " : ""));
					  }
					  System.out.println();
					}
				  }

				  public static void main(String[] args) {
					int[][] g = {
					  {78, 85, 90, 88, 92},
					  {95, 91, 89, 93, 87},
					  {60, 72, 70, 68, 75},
					  {88, 84, 79, 85, 90}
					};

					System.out.println("before curve:");
					print(g);
					curve(g, 5); // +5 points each
					System.out.println("after curve (+5, capped at 100):");
					print(g);
				  }
				}
				

รายงานสรุป

ขั้นที่ 5: สร้างรายงานอย่างง่าย ซึ่งประกอบด้วยค่าเฉลี่ยของนักเรียนแต่ละคนและค่าเฉลี่ยรวมของชั้นเรียน (ภายหลังคุณอาจต่อยอดให้รองรับเกรดตัวอักษรได้)

public class Main {
				  static double rowAverage(int[][] g, int r) {
					int sum = 0;
					for (int c = 0; c < g[r].length; c = c + 1) sum = sum + g[r][c];
					return (double) sum / g[r].length;
				  }

				  static double overallAverage(int[][] g) {
					int sum = 0;
					int count = 0;
					for (int r = 0; r < g.length; r = r + 1) {
					  for (int c = 0; c < g[r].length; c = c + 1) { sum = sum + g[r][c]; count = count + 1; }
					}
					return (double) sum / count;
				  }

				  public static void main(String[] args) {
					int[][] g = {
					  {83, 90, 95, 93, 97},  // assume already curved values
					  {100, 96, 94, 98, 92},
					  {65, 77, 75, 73, 80},
					  {93, 89, 84, 90, 95}
					};

					// Print each student average
					for (int r = 0; r < g.length; r = r + 1) {
					  double avg = rowAverage(g, r);
					  System.out.println("student " + r + " avg = " + String.format("%.2f", avg));
					}

					// Print overall average
					System.out.println("overall avg = " + String.format("%.2f", overallAverage(g)));
				  }
				}
				

ตรวจสอบค่าเฉลี่ยนักเรียน

ตรวจสอบสั้น ๆ: สูตรใดคำนวณค่าเฉลี่ยของนักเรียน r

ทบทวนและถัดไป

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

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

บทเรียน “โครงงานขนาดเล็ก 2 มิติ: สมุดบันทึกคะแนน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “โครงงานขนาดเล็ก 2 มิติ: สมุดบันทึกคะแนน”

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

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

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

บทเรียน “โครงงานขนาดเล็ก 2 มิติ: สมุดบันทึกคะแนน” ใช้เวลานานแค่ไหน

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

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

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

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

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