반응형
// [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는 클래스 메서드에서 사용할 수 없다! > 인스턴스 변수이기 때문에
반응형
'자바의정석' 카테고리의 다른 글
[자바의 정석 - 기초편] ch7-1,2 상속 (0) | 2022.03.17 |
---|---|
자바의 정석 ch06 연습문제(1) [6-13~6-24] (0) | 2022.03.15 |
[자바의 정석 - 기초편] ch6-38~41 변수의초기화, 멤버변수의 초기화 (0) | 2022.03.10 |
[자바의 정석 - 기초편] ch6-36,37 생성자 this(), 참조변수 this (0) | 2022.03.10 |
[자바의 정석 - 기초편] ch6-32~35 생성자, 기본 생성자 (0) | 2022.03.10 |