열심히 끝까지
[코딩 문제] - 6/21 포켓몬과제 본문
코드 과제
1. 포켓몬[] data=new 포켓몬[3];
data[0]=new 피카츄();
data[1]=new 피카츄();
data[2]=new 파이리();
입력: 피카츄
피카츄는(은) 2마리 존재합니다!
입력: 꼬부기
꼬부기는(은) 없습니다...
equals() 오버라이딩으로 구현하기
2. void action()에서
공격출력문구를 attack()을 사용하기 -> [모듈화]
그래서 온전한 오버라이딩을 완성하기
------------------------------------
void action()
출력 => attack()
String attack()
return ㅁㅁ공격!
------------------------------------
1번은 완료
package class04;
import java.util.Random;
import java.util.Scanner;
class Pokemon{
String name; // => ☆
int level;
int exp;
String obj;
void action() {
// this.attack();
System.out.println(this.name + "이(가) ㅁㅁ공격!");
if(this.check()) {
this.success();
}
else {
this.fail();
}
}
String attack() {
return this.attack("꼬부기");
}
String attack(String name) {
this.name = name;
String msg = this.name + "이(가) ㅁㅁ공격!";
return msg;
}
boolean check() {
Random rand = new Random();
int num = rand.nextInt(5); // 성공 80%, 실패 20%
if(num == 0) {
return false;
}
return true;
}
void success() {
Random rand = new Random();
int exp = rand.nextInt(201) + 10; // 10 ~ 210
this.exp += exp;
while(this.exp >= 100) {
this.exp -= 100;
this.level++;
System.out.println(this.name + ", 레벨 업!");
}
System.out.println(this.name + " 공격 성공! 획득 경험치 " + exp);
}
void fail() {
System.out.println(this.name + "공격 실패");
if(this.level == 1) {
System.out.println("레벨은 1미만이 불가능합니다.");
return;
}
level--;
}
Pokemon(String name){
this.name = name;
Random rand = new Random();
this.level = rand.nextInt(5)+5;
this.exp = 0;
}
@Override
public String toString() {
String msg = this.name + " ";
msg += "Lv." +this.level + " ";
msg += "[" + this.exp + "/100]";
return msg;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Pokemon) {
Pokemon pk = (Pokemon)obj;
if(this.name.equals(pk.name)) {
return true;
}
}
return false;
}
}
class Pikachu extends Pokemon{
@Override
void action() { // 오버라이딩
if(this.check()) {
// this.attack("피카츄");
System.out.println(this.name + "이(가) 백만볼트!");
this.success();
}
else {
this.fail();
}
}
Pikachu(){
super("피카츄");
}
}
class Pieri extends Pokemon{
@Override
void action() {
System.out.println(this.name + "이(가) 불꽃공격!");
if(this.check()) {
this.success();
}
else {
this.fail();
}
}
Pieri(){
super("파이리");
}
}
public class Test02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Pokemon[] data = new Pokemon[3];
// Pikachu pika = new Pikachu();
// pika.action();
// pika.action();
// pika.action();
// pika.action();
// pika.action();
// System.out.println(pika);
data[0] = new Pikachu();
data[1] = new Pikachu();
data[2] = new Pieri();
int num = 0;
System.out.print("입력 : ");
String po = sc.next();
for(int i = 0; i < data.length; i++) {
if(data[i].name.equals(po)) {
num++;
}
}
if(num == 0) {
System.out.println(po + "는(은) 없습니다..");
}
else {
System.out.println(po + "는(은) " + num + "마리 존재합니다!");
}
}
}
강사님의 1, 2번 답
package class04;
import java.util.Random;
import java.util.Scanner;
class Pokemon{
String name; // => ☆
int level;
int exp;
String obj;
void action() {
// this.attack();
System.out.println(this.name + "이(가) ㅁㅁ공격!");
if(this.check()) {
this.success();
}
else {
this.fail();
}
}
// void attack(String name) {
// this.name = name;
//
//
// }
boolean check() {
Random rand = new Random();
int num = rand.nextInt(5); // 성공 80%, 실패 20%
if(num == 0) {
return false;
}
return true;
}
void success() {
Random rand = new Random();
int exp = rand.nextInt(201) + 10; // 10 ~ 210
this.exp += exp;
while(this.exp >= 100) {
this.exp -= 100;
this.level++;
System.out.println(this.name + ", 레벨 업!");
}
System.out.println(this.name + " 공격 성공! 획득 경험치 " + exp);
}
void fail() {
System.out.println(this.name + "공격 실패");
if(this.level == 1) {
System.out.println("레벨은 1미만이 불가능합니다.");
return;
}
level--;
}
Pokemon(String name){
this.name = name;
Random rand = new Random();
this.level = rand.nextInt(5)+5;
this.exp = 0;
}
@Override
public String toString() {
String msg = this.name + " ";
msg += "Lv." +this.level + " ";
msg += "[" + this.exp + "/100]";
return msg;
}
@Override
public boolean equals(Object obj) { // 문자열이 들어왔지만 Object로 보임
// 현재 obj의 상태 main()에서는 실제로 문자열(String)을 보낸 상태
// 받을 때는 Object로 받았기 때문에, 현재 상자가 Object
if(this.name.equals(obj.toString())) {// 인자로 받은 name문자열이 내 이름과 같니?
// 자동 호출되는지 알았다면 그냥 obj, 저렇게 쓰는 것도 맞다!
// 타입캐스팅도 가능하다. 하지만 toString()은 최상위에 있기 때문에 대부분 가능!
return true;
}
return false;
}
}
class Pikachu extends Pokemon{
@Override
void action() { // 오버라이딩
if(this.check()) {
// this.attack("피카츄");
System.out.println(this.name + "이(가) 백만볼트!");
this.success();
}
else {
this.fail();
}
}
Pikachu(){
super("피카츄");
}
}
class Pieri extends Pokemon{
@Override
void action() {
System.out.println(this.name + "이(가) 불꽃공격!");
if(this.check()) {
this.success();
}
else {
this.fail();
}
}
Pieri(){
super("파이리");
}
}
public class Test02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Pokemon[] data = new Pokemon[3];
// Pikachu pika = new Pikachu();
// pika.action();
// pika.action();
// pika.action();
// pika.action();
// pika.action();
// System.out.println(pika);
// 원래는 Pokemon을 넣는 것이 올바르다.(하지만 자식클래스도 넣을 수 있더라)
data[0] = new Pikachu();
data[1] = new Pikachu();
data[2] = new Pieri();
int num = 0;
System.out.print("입력 : ");
String name = sc.next();
for(int i = 0; i < data.length; i++) {
data[i].action();
}
for(int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
for(int i = 0; i < data.length; i++) {
if(name.equals(data[i].name)) { // 이렇게 나오는 건 거의 없다
// 대부분 data[i].getName과 같이 받아온다.
num++; // 카운팅
}
}
System.out.print(name + "는(은) "); // 반복되는 출력문 빼기
if(num == 0) {
System.out.println("없습니다..");
}
else {
System.out.println(num + "마리 존재합니다!");
}
}
}
--2번 출력
package class04;
import java.util.Random;
import java.util.Scanner;
class Pokemon{
String name; // => ☆
int level;
int exp;
String obj;
String attack() {
return "ㅁㅁㅁ";
}
void action() {
System.out.println(this.name + "이(가)" + this.attack() + "공격!");
if(this.check()) {
this.success();
}
else {
this.fail();
}
}
boolean check() {
Random rand = new Random();
int num = rand.nextInt(5); // 성공 80%, 실패 20%
if(num == 0) {
return false;
}
return true;
}
void success() {
Random rand = new Random();
int exp = rand.nextInt(201) + 10; // 10 ~ 210
this.exp += exp;
while(this.exp >= 100) {
this.exp -= 100;
this.level++;
System.out.println(this.name + ", 레벨 업!");
}
System.out.println(this.name + " 공격 성공! 획득 경험치 " + exp);
}
void fail() {
System.out.println(this.name + "공격 실패");
if(this.level == 1) {
System.out.println("레벨은 1미만이 불가능합니다.");
return;
}
level--;
}
Pokemon(String name){
this.name = name;
Random rand = new Random();
this.level = rand.nextInt(5)+5;
this.exp = 0;
}
@Override
public String toString() {
String msg = this.name + " ";
msg += "Lv." +this.level + " ";
msg += "[" + this.exp + "/100]";
return msg;
}
@Override
public boolean equals(Object obj) { // 문자열이 들어왔지만 Object로 보임
// 현재 obj의 상태 main()에서는 실제로 문자열(String)을 보낸 상태
// 받을 때는 Object로 받았기 때문에, 현재 상자가 Object
if(this.name.equals(obj.toString())) {// 인자로 받은 name문자열이 내 이름과 같니?
// 자동 호출되는지 알았다면 그냥 obj, 저렇게 쓰는 것도 맞다!
// 타입캐스팅도 가능하다. 하지만 toString()은 최상위에 있기 때문에 대부분 가능!
return true;
}
return false;
}
}
class Pikachu extends Pokemon{
@Override
String attack() {
return "백만볼트";
}
Pikachu(){
super("피카츄");
}
}
class Pieri extends Pokemon{
@Override
String attack() {
return "불꽃";
}
Pieri(){
super("파이리");
}
}
public class Test02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Pokemon[] data = new Pokemon[3];
// Pikachu pika = new Pikachu();
// pika.action();
// pika.action();
// pika.action();
// pika.action();
// pika.action();
// System.out.println(pika);
// 원래는 Pokemon을 넣는 것이 올바르다.(하지만 자식클래스도 넣을 수 있더라)
data[0] = new Pikachu();
data[1] = new Pikachu();
data[2] = new Pieri();
int num = 0;
System.out.print("입력 : ");
String name = sc.next();
for(int i = 0; i < data.length; i++) {
data[i].action();
}
for(int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
for(int i = 0; i < data.length; i++) {
if(name.equals(data[i].name)) { // 이렇게 나오는 건 거의 없다
// 대부분 data[i].getName과 같이 받아온다.
num++; // 카운팅
}
}
System.out.print(name + "는(은) "); // 반복되는 출력문 빼기
if(num == 0) {
System.out.println("없습니다..");
}
else {
System.out.println(num + "마리 존재합니다!");
}
}
}
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(과제)' 카테고리의 다른 글
[코딩 문제] - 6/23 강사님 문제 (0) | 2022.06.23 |
---|---|
[설계 문제] - 6/22 치킨집 프렌차이즈 (0) | 2022.06.22 |
[코딩문제] - 6/20 카드 사용 문제 (0) | 2022.06.20 |
[코딩 문제] - 6/15 ~ 6/17 퀵 정렬 (0) | 2022.06.17 |
[수업 내용 발표] - 6/15 발표 자료 PowerPoint (0) | 2022.06.17 |