6-1 다음과 같은 멤버변수를 갖는 SutdaCard클래스를 정의하시오.

타 입 변수명 설 명
int num 카드의 숫자.(1~10사이의 정수)
boolean isKwang 광이면 true, 아니면 false
class SutdaCard {
	int num;
	boolean isKwang;
}

정의만 한 것이다.

 

6-2 문제 에서 정의한 클래스에 두 개의 생성자와 를 추가해서 실행결과와 같은 결과를 얻도록 하시오.

class Exercise6_2 {
	public static void main(String args[]) {
		SutdaCard card1 = new SutdaCard(3, false);
		SutdaCard card2 = new SutdaCard();
		System.out.println(card1.info()); // 3 . 이 출력된다
		System.out.println(card2.info()); // 1K . 가 출력된다
	}
}

class SutdaCard {
	int num;
	boolean isKwang;

	SutdaCard() {
		this(1, true); // SutdaCard(1, true) . 를 호출한다
	}

	SutdaCard(int num, boolean isKwang) {
		this.num = num;
		this.isKwang = isKwang;
	}

	String info() { // . ( ) K . 숫자를 문자열로 반환한다 광 인 경우 를 덧붙인다 光
		return num + (isKwang ? "K" : "");
	}
}

 

 

6-3 다음과 같은 멤버변수를 갖는  Student클래스를 정의하시오.

타입 변수명 설 명
String name 학생이름
int ban
int no 번호
int kor 국어점수
int eng 영어점수
int math 수학점수
public class Exercise06_3 {
}
class Student {
	String name;
	int ban;
	int no;
	int kor;
	int eng;
	int math;
}

 

 

6-4 문제 에서 정의한 클래스에 다음과 같이 정의된 두 개의 메서드getTotal()과 getAverage()를 추가하시오.

메서드명 : getTotal

기 능 : 국어 영어 수학 의 점수를 모두 더해서 반환한다.

반환타입 : int

매개변수 : 없음

2. : getAverage 메서드명 기 능 총점 국어점수 영어점수 수학점수 을 과목수로 나눈 평균을 구한다 소수점 둘째자리에서 반올림할 것.

반환타입 : float

매개변수 : 없음

class Exercise06_4 {
	public static void main(String args[]) {
		Student s = new Student();
		s.name = "홍길동 ";
		s.ban = 1;
		s.no = 1;
		s.kor = 100;
		s.eng = 60;
		s.math = 76;
		System.out.println("이름 :" + s.name);
		System.out.println("총점 :" + s.getTotal());
		System.out.println("평균 :" + s.getAverage());
	}
}
class Student {
	/*
	 * (1) . 알맞은 코드를 넣어 완성하시오
	 */
}

 

class Exercise06_4 {
	public static void main(String args[]) {
		Student s = new Student();
		s.name = "홍길동 ";
		s.ban = 1;
		s.no = 1;
		s.kor = 100;
		s.eng = 60;
		s.math = 76;
		System.out.println("이름 :" + s.name);
		System.out.println("총점 :" + s.getTotal());
		System.out.println("평균 :" + s.getAverage());
	}
}

class Student {
	String name;
	int ban;
	int no;
	int kor;
	int eng;
	int math;

	int getTotal() {
		return kor+math+eng;
	}
	float getAverage() {
		return (int)(getTotal() / 3f * 10 + 0.5f) / 10f;
	}
}
이름 :홍길동 
총점 :236
평균 :78.7

평균을 구하는식에서 int타입은 소수점이 버려지는것을 이용한 식이다.

 

 

 

6-6 두 점의 거리를 계산하는 를 완성하시오. getDistance()

[Hint] 제곱근 계산은 를 사용하면 된다. Math.sqrt(double a)

public class Exercise6_06 {
	static double getDistance(int x, int y, int x1, int y1) {
		/*
		 * (1) . 알맞은 코드를 넣어 완성하시오
		 */
	}
	public static void main(String args[]) {
		System.out.println(getDistance(1, 1, 2, 2));
	}
}
public class Exercise6_06 {
	static double getDistance(int x, int y, int x1, int y1) {

		return Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
	}
	public static void main(String args[]) {
		System.out.println(getDistance(1, 1, 2, 2));
	}
}
1.4142135623730951

제곱근을 구하면 된다.

Math.sqrt는 double타입을 반환한다.

 

 

 

6-7 문제 에서 작성한 클래스메서드getDistance()를 MyPoint클래스의 인스턴스메서드로 정의하시오.

class MyPoint{
	int x;
	int y;

	MyPoint(int x, int y) {
	this.x = x;
	this.y = y;
	}
	/*
	 * (1) getDistance . 인스턴스메서드 를 작성하시오
	 */
}
class Exercise6_07 {
	public static void main(String args[]) {
		MyPoint p = new MyPoint(1, 1);
		// p (2,2) . 와 의 거리를 구한다
		System.out.println(p.getDistance(2, 2));
	}
}
class MyPoint{
	int x;
	int y;

	MyPoint(int x, int y) {
	this.x = x;
	this.y = y;
	}
	double getDistance(int x1, int y1) {
		return Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
	}
}
class Exercise6_07 {
	public static void main(String args[]) {
		MyPoint p = new MyPoint(1, 1);
		// p (2,2) . 와 의 거리를 구한다
		System.out.println(p.getDistance(2, 2));
	}
}
1.4142135623730951

 

 

 

6-8 다음의 코드에 정의된 변수들을 종류별로 구분해서 적으시오.

public class PlayingCard {
	int kind;
	int num;
	static int width;
	static int height;

	PlayingCard(int k, int n) {
		kind = k;
		num = n;
	}

	public static void main(String args[]) {
		PlayingCard card = new PlayingCard(1, 1);
	}
}

- 클래스변수(static변수) : width, height

- 인스턴스변수 : kind, num

- 지역변수 : k, n, card, args

변수의 종류 선언위치 생성시기
클래스변수

클래스 영역 클래스가 메모리에 올라갈 때
인스턴스변수 인스턴스가 생성되었을 때
지역변수 클래스 영역 이외의 영역
(메서드, 생성자, 초기화 블럭 내부)
변수 선언문이수행되었을 때

 

6-9 다음은 컴퓨터 게임의 병사 를 클래스로 정의한 것이다 이 클래스의 멤버중에 static을 붙여야 하는 것은 어떤 것들이고 그 이유는 무엇인가?

(단, 모든 병사의 공격력과 방어력은 같아야 한다.)

class Marine {
	int x = 0, y = 0; // Marine (x,y) 의 위치좌표
	int hp = 60; // 현재 체력
	int weapon = 6; // 공격력
	int armor = 0; // 방어력

	void weaponUp() {
		weapon++;
	}
	void armorUp() {
		armor++;
	}
	void move(int x, int y) {
		this.x = x;
		this.y = y;
	}
}
class Marine {
	int x = 0, y = 0; // Marine (x,y) 의 위치좌표
	int hp = 60; // 현재 체력
	static int weapon = 6; // 공격력
	static int armor = 0; // 방어력

	static void weaponUp() {
		weapon++;
	}
	static void armorUp() {
		armor++;
	}
	void move(int x, int y) {
		this.x = x;
		this.y = y;
	}
}

공통적인 값을 가지는 변수들을 static변수로 선언해야한다.

공격력과 방어력이 같기 위해서는 기본 공격 방어력과 증감연산자가 들어간 메서드에 static을 넣으면 된다.

 

 

[6-10] 다음 중 생성자에 대한 설명으로 옳지 않은 것은 모두 고르시오 ? ( b,e )

a. 모든 생성자의 이름은 클래스의 이름과 동일해야한다.

b. 생성자는 객체를 생성하기 위한 것이다.

c. 클래스에는 생성자가 반드시 하나 이상 있어야 한다.

d. 생성자가 없는 클래스는 컴파일러가 기본 생성자를 추가한다.

e. 생성자는 오버로딩 할 수 없다.

 

b 객체를 생성하는것은 new 연산자이고 생성자는 초기화할 목적으로 사용된다.

e 생성자는 오버로딩이 가능하다.

 

추가적으로 생성자는 리턴값이 없다. 

생성자도 메서드이기 때문에 리턴값이 없다는 의미인 void를 적어야 하지만, 모든 생성자가 리턴값이 없으므로 생략이 가능하다.

+ Recent posts