자바의정석

자바의 정석 ch06 연습문제(1) [6-1~6-12]

유호야 2022. 3. 11. 20:38
반응형


 

// [6-1]
class SutdaCard {
	int num;
	boolean isKwang;
}

[6-2]

package ch06;

public class Q01 {

	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() {
		num = 1;
		isKwang = true;
	}
	
	SutdaCard(int num, boolean isKwang) {
		this.num = num;
		this.isKwang = isKwang;
	}
	
	String info() {
		
		String info;
		if(isKwang == true) {
			info = num + "K";
		} else {
			info = num + "";
		}
		return info;
	}
}

ㄴ this를 이용하지 않은 경우

 

this 생성자 이용 및 삼항 연산자 사용 식

package ch06;

public class Q01 {

	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(int num, boolean isKwang) {
		this.num = num;
		this.isKwang = isKwang;
	}
	
	String info() {
		
		return num + (isKwang ? "K" : ""); 
	}
}

 


 

package ch06;

public class Student {

	String name;
	int ban;
	int no;
	int kor;
	int eng;
	int math;

}

 


 

[6-4]

 

class Student {

	String name;
	int ban;
	int no;
	int kor;
	int eng;
	int math;
	
	
	int getTotal() {
		return kor+eng+math;
	}

	float getAverage() {
		float avg = getTotal()/(float)3;
		
		return Math.round(avg*10)/(float)10;
	}

 

나는 Math.round가 소수점 첫번째 자리에서 반올림하는 성질을 이용해서 문제를 풀었다.


[6-5]

 

package ch06;

public class Q04 {

	public static void main(String[] args) {
		
		Student s = new Student("홍길동", 1, 1, 100, 60, 76);
		System.out.println(s.info());
	}

}

class Student {

	String name;
	int ban;
	int no;
	int kor;
	int eng;
	int math;
	
	Student(String name, int ban, int no, int kor, int eng, int math) {
		this.name = name;
		this.ban = ban;
		this.no = no;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	
	int getTotal() {
		return kor+eng+math;
	}

	float getAverage() {
		float avg = getTotal()/(float)3;
		
		return Math.round(avg*10)/(float)10;
	}
	
	String info() {
		String info = "";
		info = name + ", " + ban + ", " + no + ", " + kor + ", " + eng + ", " + math + ", " + getTotal() + ", " + getAverage();
		return info;
	}
	
}

 

배열로 하려다가 println 실행시에 주소값이 나오기 때문에 String으로 타입을 변경해서 info 메서드를 작성했다. 


package ch06;

public class Q06 {
	
	static double getDistance(int x, int y, int x1, int y1) {
		
		int width = x1 - x;
		int height = y1 - y;
		
		double answer = Math.sqrt((Math.pow(width, 2) + Math.pow(height, 2)));
		
		return answer;
	}
	
	public static void main(String[] args) {
		
		System.out.println(getDistance(1,1,2,2));
	}

}

여기서 사용한 Math 클래스의 메서드

Math.sqrt ( ) ; 제곱근 구하가

Math.pow(a, b); a 숫자를 b제곱하기 a^b; 

 


 

this.x 인스턴스 변수를 이용한 것

package ch06;


class MyPoint {
	int x;
	int y;
	
	MyPoint(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	double getDistance(int x, int y) {
		int width = this.x-x;
		int height = this.y-y;
		
		return Math.sqrt(width*width + height*height);
	}
}

public class Q07 {

	public static void main(String[] args) {
		MyPoint p = new MyPoint(1,1);
		
		System.out.println(p.getDistance(2,2));
	}

}

 

 


 

지역변수에 card도 해당이 된다.

클래스 변수(static 변수)는 클래스가 메모리에 올라갈 때 가장 먼저 생성이 된다.


 

static을 붙여야 하는 것

공격력과 방어력 weapon과 armor 
현재 체력과 위치좌표는 계속해서 변화하며, 캐릭터마다 각자의 값을 가져야 하지만
각 캐릭터마다 공격력과 방어력은 일정하게 계속 사용되기 때문이 아닐까

클래스 멤버라고 했으니, weapon armor를 조정하는 weaponUp()과 armorUp() 메서드도 static을 붙여야 한다.

메서드는 작업을 할 때 인스턴스 변수를 사용하느냐 사용하지 않느냐를 확인한다

사용하면 static을 붙여서는 안돼고, 사용하지 않으면 static을 붙인다.

 


객체를 생성하는 것은 new 연산자

생성자는 오버로딩이 가능해서, 클래스에 여러 개의 생성자를 정의 할 수 있다.

 this는 객체 자신을 가리키는 참조변수!

this는 클래스 메서드에서 사용할 수 없다! > 인스턴스 변수이기 때문에 

반응형