코딩항해기

[실습/JAVA] 학생으로 클래스 연습하기 (+풀이 0701) 본문

problem solving/과제&실습 코딩

[실습/JAVA] 학생으로 클래스 연습하기 (+풀이 0701)

miniBcake 2024. 7. 1. 17:05

 

[문제]

(상속은 아직 진도 나가지 않아 상속은 진행하지 않음)

1. 학생 클래스가 있습니다.
학생은 이름,성적(정수)이 있습니다.
학생은 반드시 이름을 가져야합니다.
학생을 생성할때, 성적이 0~100점 사이로 랜덤 저장됩니다.
학생이 hello() 인사를 하면, 이름과 성적을 화면에 출력합니다.

2. 학생 클래스가 있습니다.
학생은 이름,성적(정수),등급(char)이 있습니다.
학생은 반드시 이름을 가져야합니다.
학생을 생성할때, 성적이 0~100점 사이로 랜덤 저장됩니다.
성적이 0~59 C 60~79 B 80~100 A 등급입니다.
학생이 hello() 인사를 하면, 이름과 성적, 등급을 화면에 출력합니다.
학생이 test() 시험을 보면, 성적이 현재성적점수 +10점이 됩니다.

3. 학생 클래스가 있습니다.
학생은 학번(PK,정수),이름,성적(정수),등급(char)이 있습니다.
학생은 반드시 이름을 가져야합니다.
학생을 생성할때, 성적이 0~100점 사이로 랜덤 저장됩니다.
학생의 번호는 1001번부터 차례대로 증가하며 부여됩니다.
성적이 0~59 C 60~79 B 80~100 A 등급입니다.
학생이 hello() 인사를 하면, 이름과 성적, 등급을 화면에 출력합니다.
학생이 test() 시험을 보면, 성적이 현재성적점수 +10점이 됩니다.

 

[코드-실습]

package class06;

import java.util.Random;

//실습문제1
class Student1{
	//필드
	String name;
	int score;
	
	//생성자
	Student1(String name) {
		super();
		Random rd = new Random();
		this.name = name;
		this.score = rd.nextInt(100)+1;
	}
	
	//인사
	void hello() {
		System.out.println("이름 : "+this.name);
		System.out.println("성적 : "+this.score +"점");
	}
}

//실습문제2
class Student2{
	//필드
	String name;
	int score;
	char grade;
	
	//생성자
	Student2(String name) {
		super();
		Random rd = new Random();
		this.name = name;
		this.score = rd.nextInt(101); //0~100
		this.grade = grade();
	}
	
	//등급구하기
	char grade() {
		if(!(0<this.score && this.score<100)) { //0~100
			System.out.println("올바르지 않은 점수");
			return '?';
		}
		return this.score<60? 'C': this.score<80? 'B' : 'A';
	}
	
	//인사
	void hello() {
		System.out.println("이름 : "+this.name);
		System.out.println("성적 : "+this.score +"점");
		System.out.println("등급 : "+this.grade);
	}
	
	//시험
	void test() {
		this.score += 10;
		if(this.score > 100) {
			this.score = 100;
		}
		this.grade = grade();
		System.out.println("시험을 쳐서 성적이 올랐습니다.");
		System.out.println("현재 성적 : "+this.score);
		System.out.println("현재 등급 : "+this.grade);
	}
}

//실습문제 3
class Student3{
	//필드
	long num;
	String name;
	int score;
	char grade;
		
	//생성자
	Student3(String name, long num) {
		super();
		Random rd = new Random();
		this.name = name;
		this.score = rd.nextInt(101); //0~100
		this.grade = grade();
		this.num = num;
	}
	
	//등급구하기
	char grade() {
		if(!(0<this.score && this.score<100)) { //0~100
			System.out.println("올바르지 않은 점수");
			return '?';
		}
		return this.score<60? 'C': this.score<80? 'B' : 'A';
	}
	
	//인사
	void hello() {
		System.out.println("이름 : "+this.name);
		System.out.println("성적 : "+this.score +"점");
		System.out.println("등급 : "+this.grade);
	}
	
	//시험
	void test() {
		this.score += 10;
		if(this.score > 100) {
			this.score = 100;
		}
		this.grade = grade();
		System.out.println("시험을 쳐서 성적이 올랐습니다.");
		System.out.println("현재 성적 : "+this.score);
		System.out.println("현재 등급 : "+this.grade);
	}
}

public class Test02 {
	public static void main(String[] args) {
		//문제1
		Student1 st1 = new Student1("학생1");
		st1.hello();
		
		
		System.out.println("-----------------------------");
		
		//문제2
		Student2 st2 = new Student2("학생2");
		st2.hello();
		st2.test();
		st2.test();
		
		System.out.println("-----------------------------");
		
		//문제3
		long countNum = 1001;
		
		Student3 st3 = new Student3("학생3", countNum++);
		st3.hello();
		st3.test();
		System.out.println(st3.num);
		
		Student3 st4 = new Student3("학생4", countNum++);
		System.out.println(st4.num);
	}
}

 

[풀이]

package class07;

import java.util.Random;

class Student{
	String name;
	int score;
	
	Student(String name){
		this.name=name;
		Random rand = new Random();
		this.score= rand.nextInt(101);
	}
	
	void hello() {
		System.out.println("이름 : "+this.name);
		System.out.println("성적 : "+this.score +"점");
	}
}
///////////////////////////////////////////////////////
class Student02{
	String name;
	int score;
	char grade;
	
	Student02(String name){
		this.name=name;
		this.score= new Random().nextInt(101);
		//코드 재사용 == 함수화
//		if(this.score>=80) {
//			this.grade = 'A';
//		}
//		else if(this.score>=60) {
//			this.grade = 'B';
//		}
//		else {
//			this.grade = 'C';
//		}
		setGrade();
	}
	
	void hello() {
		System.out.println("이름 : "+this.name);
		System.out.println("성적 : "+this.score +"점");
		System.out.println("등급 : "+this.grade);
	}
	
	void test() {
		this.score += 10;
		if(this.score > 100) {
			this.score = 100;
		}
		setGrade();
	}
	
	void setGrade() {
		if(this.score>=80) {
			this.grade = 'A';
		}
		else if(this.score>=60) {
			this.grade = 'B';
		}
		else {
			this.grade = 'C';
		}
	}
}
///////////////////////////////////////////////////////
class Student03{
	int num; // PK : 시스템이 값을 부여해야한다
	String name;
	int score;
	char grade;
	
	Student03(int num, String name){
		this.num=num;//pk라서 외부(시스템)에서 값을 부여받아야한다.
		this.name=name;
		this.score= new Random().nextInt(101);
		setGrade();
	}
	
	void hello() {
		System.out.println("이름 : "+this.name);
		System.out.println("성적 : "+this.score +"점");
		System.out.println("등급 : "+this.grade);
		System.out.println("학번 : "+this.num);
	}
	
	void test() {
		this.score += 10;
		if(this.score > 100) {
			this.score = 100;
		}
		setGrade();
	}
	
	void setGrade() {
		if(this.score>=80) {
			this.grade = 'A';
		}
		else if(this.score>=60) {
			this.grade = 'B';
		}
		else {
			this.grade = 'C';
		}
	}
}
///////////////////////////////////////////////////////
public class Test01 {
	public static void main(String[] args) {
		//1번문제
		Student stu = new Student("홍길동");
		stu.hello();
		
		//2번문제
		Student02 stu2 = new Student02("홍길동");
		stu2.hello();
		stu2.test();
		
		//3번문제
		int NUM = 1001; //full대문자는 키워드로 함부로 변경하지 말 것을 의미
		
		Student03 stu01 = new Student03(NUM++, "홍길동");
		stu01.hello();
		Student03 stu02 = new Student03(NUM++, "모르가나");
		stu02.hello();
		Student03 stu03 = new Student03(NUM++, "럭스");
		stu03.hello();
		
	}
}

 

 

[보완]

이번에는 실습과 풀이가 크게 다른 점없이 풀었다!

별다른 말이 없어도 생성자에서 값 초기화 해주는 부분 잊지말기!!