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