[수강일지_14] 학생정보 관리 프로그램 만들기
studentCount++;프로그램을 짜는 경우 1. Main Class 안에 있는 Main (), 메뉴가 있다 2. human 프로그램 구축해보기 1. 프로그램 기획 UML 사용하기 Flowchart Maker & Online Diagram SoftwareFlowchart Maker and Online Diagram Sof
jamk-diary.tistory.com
[수강일지_14]를 바탕으로 재미니한테 과제 받기
👑 과제: 우리 반 과목별 총점 & 평균 계산기 조립하기🏃♂️ 미션 패스 가이드라인 (이 순서대로 조립해 봐!)1단계: 유저한테 "무슨 과목 볼래?" 물어보기
2단계: 점수만 따로 모아둘 5칸짜리 '점수 상자' 만들기
3단계: 유저가 고른 과목 점수만 배열에 채워 넣기 (안전장치 꼭!)
4단계: 총점 더하고, 진짜 학생 수 세기 (두 로봇 출동!)
5단계: 실수형 평균 구하고 멋지게 출력하기
💡 재미니의 꿀팁!아까 물어본 것처럼 "블로그 절대 안 보고" 이 5단계 순서만 머릿속으로 그리면서 이클립스에 코드를 직접 타이핑해 봐!만약 치다가 3번이나 4번에서 로봇들이 고장 나거나 기억이 안 나면, 그때 질문자님의 비밀 치트키(블로그)를 슬쩍 열어서 "아, 맞다! studentCount++는 여기 넣는 거였지!" 하고 확인하면 돼. 그 막히는 순간이 진짜 실력이 늘어나는 타이밍이야! 준비 완료됐다면 조심히 퇴근하고, 집에서 재밌는 코딩 게임 한 판 즐기고 와! 화이팅! 🚀 |
Main Class
package Main;
import java.util.Scanner;
import Dao.Dao;
public class MainaClass {
public static void main(String[] args) {
// TODO // 👑 우리 반 과목별 총점 & 평균 계산기 조립하기
/*
[목표]
Total()이라는 이름의 메서드(그릇)를 만들고,
사용자가 "국어"를 고르면 학생들의 국어 총점과 평균을 구해서 화면에 보여주는 프로그램
*/
/* 프라이빗 변수/자료타입
학생이름 / String
국어 점수 /int
수학 점수 /int
영어 점수 */
Dao D=new Dao();
D.User_WantTotal();
}
}
Dao
package Dao;
import java.util.Scanner;
import Dto.Dto;
public class Dao {
Dto Dt=new Dto();
Scanner sc = new Scanner(System.in);
int sub;
int sub_total;
double sub_Result;
String sub_name;
//더미 데이터 넣을 배열 생성
private Dto Score_array [] = {
new Dto("홍길동", 90, 80, 85),
new Dto("성춘향", 100, 90, 95),
new Dto("일지매", 85, 75, 90),
null,
null,
};
//2단계: 점수만 따로 모아둘 5칸짜리 '점수 상자' 만들기
/* 자료형 배열이름 [] = new 자료형 [칸수 기입] */
int sub_Total_araay[] = new int [5];
public void User_WantTotal () {
//1단계: 유저한테 "무슨 과목 볼래?" 물어보기
System.out.print("원하시는 과목의 번호를 입력해 주세요 [ 국어- (1), 수학- (2), 영어- (3) ] => ");
int sub = sc.nextInt();
//3단계: 유저가 고른 과목 점수sub만 배열sub_Total_araay[]에 채워 넣기 (안전장치 꼭!)
if(sub == 1) {
sub_name="국어";
for (int i = 0; i < Score_array.length; i++) {
if (Score_array[i] != null) {
sub_Total_araay [i]= Score_array[i].getKor();
}
}
}
if(sub == 2) {
sub_name="수학";
for (int i = 0; i < Score_array.length; i++) {
if (Score_array[i] != null) {
sub_Total_araay [i]= Score_array[i].getMath();
}
}
}
if(sub == 3) {
sub_name="영어";
for (int i = 0; i < Score_array.length; i++) {
if (Score_array[i] != null) {
sub_Total_araay [i]= Score_array[i].getEng();
}
}
}
sub_total=0;
for (int i = 0; i < sub_Total_araay.length; i++) {
sub_total=sub_total + sub_Total_araay[i];
}
int studentCount = 0;
for (int i = 0; i < Score_array.length; i++) {
studentCount++;
}
sub_Result= sub_total/studentCount;
System.out.println(sub_name +" 의 총점은 " + sub_total + " 입니다 ");
System.out.println (sub_name + "의 평균은 " + sub_Result + "입니다");
}
Dto
package Dto;
public class Dto {
// 프라이빗 변수/자료타입
/*학생이름 */ private String Name;
/*국어 점수*/ private int Kor;
/*수학 점수 */private int Math;
/*영어 점수*/ private int Eng;
//기본 생성자
public Dto() {
}
//Using
public Dto(String name, int kor, int math, int eng) {
super();
Name = name;
Kor = kor;
Math = math;
Eng = eng;
}
//Getter & Setter
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public int getKor() {
return Kor;
}
public void setKor(int kor) {
Kor = kor;
}
public int getMath() {
return Math;
}
public void setMath(int math) {
Math = math;
}
public int getEng() {
return Eng;
}
public void setEng(int eng) {
Eng = eng;
}
//to String
@Override
public String toString() {
return "Dto [학생이름= " + Name + ", 국어점수= " + Kor + ", 수학점수 =" + Math + ", 영어점수 =" + Eng + "]";
}
}
출력결과
원하시는 과목의 번호를 입력해 주세요 [ 국어- (1), 수학- (2), 영어- (3) ] => 1
국어 의 총점은 275 입니다
국어의 평균은 55.0입니다
과제 오류 확인 및 해결책
| 올려주신 최종 코드를 제가 아주 꼼꼼하게 검사해 봤어요. 결론부터 말씀드리면, "원하시는 과목의 점수들을 쏙쏙 뽑아와서 배열에 담고, 총점을 누적하는 흐름"까지는 100점 만점에 100점입니다! 국어, 수학, 영어 조건문이랑 안전장치(!= null)도 완벽하게 기억해 내서 적으셨어요. 하지만! 실행 결과 스크린샷을 보니 평균이 55.0으로 나왔죠? 원래 3명의 국어 총점은 275점이니까 275 / 3을 하면 91.666...이 나와야 하거든요. 왜 평균이 다르게 나왔는지, 컴퓨터의 시선에서 딱 2가지 숨은 버그를 찾아 드릴게요! 🔍 재미니가 찾은 숨은 버그 2가지1번 버그 🐛 : 학생 수를 세는 로봇이 빈 방까지 다 세어버렸어요!질문자님이 학생 수를 세는 코드를 이렇게 짜셨어요.int studentCount = 0; for (int i = 0; i < Score_array.length; i++) { studentCount ++; // 👈 안전장치 없이 무조건 딸깍! }
|
오류 수정한 코드 최종본
| 🛠️ 최종 완벽하게 고쳐진 마무리 코드 모양 `Dao` 클래스의 맨 밑바닥 계산 부분을 요렇게 딱 두 군데만 수정해 주면 이번 미션은 진짜 완벽한 마스터입니다! ` ``java // 진짜 학생이 있는 방만 카운트하기! int studentCount = 0; for (int i = 0; i < Score_array.length; i++){ if (Score_array[i] != null) { // 👈 안전장치 장착! studentCount++; } } // 소수점 지켜내기 위해 (double) 형변환 마법 쓰기! sub_Result = (double)sub_total / studentCount; System.out.println(sub_name + " 의 총점은 " + sub_total + " 입니다 "); System.out.println(sub_name + "의 평균은 " + sub_Result + "입니다"); |
총평
💡 오늘의 총평!혼자서 빈 화면에 이만큼의 대형 코드를 기억해 내서 타이핑하고, 에러 없이 실행까지 성공시킨 것 자체가 이미 엄청난 실력 향상이에요! 55.0이라는 숫자가 나온 건 틀린 게 아니라, "컴퓨터가 내 의도와 다르게 방을 세었구나!"를 배울 수 있는 최고의 경험이랍니다.요 두 부분만 이클립스에서 슥 고쳐서 다시 실행해 보세요. 그럼 질문자님이 원하던 눈부신 소수점 결과(91.66666...)를 만나실 수 있을 거예요. 얼른 고쳐보고 성공하면 또 알려줘요! 🚀 |
'Java > Java 복습' 카테고리의 다른 글
| [2026-06-01] 변수, final, static 연습 2 (0) | 2026.06.01 |
|---|---|
| [2026-06-01] 추상클래스 연습 (1) | 2026.06.01 |
| [2026-05-27] 클래스 기초 , Setter ,Getter , private 연습 (1) | 2026.05.27 |
| [2026-05-26 ]객체지향 프로그래밍 void,cal 연습 (1) | 2026.05.27 |
| [2026-05-22]Overloading,Exception 연습 (0) | 2026.05.22 |