개인적으로 이 상속 파트가 실습문제들이 어렵습니다.
남의 코드 보는게 제일 어렵다고 이미 짜여있는 틀에서 본인 코드 삽입하기가 쉽지 않을거라 생각합니다.
저도 처음 학습할때 이파트 실습문제 풀면서 예시에 새로운 코드를 추가한다던지 하는 잘못된 방식으로 접근해서 푼것도 많습니다. 최대한 해보시다가 안되면 빠르게 답지 보고 이해하는게 좋을것 같습니다. 개인적으로 너무 어렵다면 OpenChallenge는 안푸셔도 될거 같아요. 하면 제일 좋습니다.
OpenChallenge.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
import java.util.Scanner;
abstract class GameObject {
protected int distance;
protected int x, y;
public GameObject(int startX, int startY, int distance) {
this.x = startX;
this.y = startY;
this.distance = distance;
}
public int getX() {return x;}
public int getY() {return y;}
public boolean collide(GameObject p) {
if(this.x == p.getX() && this.y == p.getY())
return true;
else
return false;
}
protected abstract void move();
protected abstract char getShape();
}
public class OpenChallenge {
public static void main(String[] args) {
Frame frame = new Frame();
frame.set();
frame.run();
}
}
class Bear extends GameObject{
public Bear(int startX, int startY, int distance) {
super(startX, startY, distance);
// TODO Auto-generated constructor stub
}
@Override
protected void move() {
Scanner sc_B = new Scanner(System.in);
System.out.print("왼쪽(a), 아래(s), 위(d), 오른쪽(f) >>");
String trig = sc_B.next();
switch(trig) {
case "a":
Frame.map[y][x] = '-';
x -= distance;
Frame.map[y][x] = getShape();
break;
case "s":
Frame.map[y][x] = '-';
y += distance;
Frame.map[y][x] = getShape();
break;
case "d":
Frame.map[y][x] = '-';
y += distance;
Frame.map[y][x] = getShape();
break;
case "f":
Frame.map[y][x] = '-';
x += distance;
Frame.map[y][x] = getShape();
break;
}
}
@Override
protected char getShape() {
return 'B';
}
}
class Fish extends GameObject{
public Fish(int startX, int startY, int distance) {
super(startX, startY, distance);
// TODO Auto-generated constructor stub
}
@Override
protected void move() {
// TODO Auto-generated method stub
switch((int)(Math.random()*3)) {
case 0:
if(x==0) {
Frame.map[y][x] = getShape();
}else {
Frame.map[y][x] = '-';
x -= distance;
Frame.map[y][x] = getShape();
}
break;
case 1:
if(y==9) {
Frame.map[y][x] = getShape();
}else {
Frame.map[y][x] = '-';
y += distance;
Frame.map[y][x] = getShape();
}
break;
case 2:
if(y==19) {
Frame.map[y][x] = getShape();
}else {
Frame.map[y][x] = '-';
y += distance;
Frame.map[y][x] = getShape();
}
break;
case 3:
if(x==9) {
Frame.map[y][x] = getShape();
}else {
Frame.map[y][x] = '-';
x += distance;
Frame.map[y][x] = getShape();
}
break;
}
}
@Override
protected char getShape() {
// TODO Auto-generated method stub
return '@';
}
}
class Frame{
static char[][] map = new char[10][20]; //map은 다른 클래스에서도 변화시킬 예정이니 static으로 선언해 놓았습니다.
Bear bear = new Bear(0,0,1);
Fish fish = new Fish(5,5,1);
public void set(){//초기설정
for(int i=0;i<10;i++) {
for(int e=0;e<20;e++) {
map[i][e] = '-';
}
}
map[0][0] = bear.getShape();
map[5][5] = fish.getShape();
}
public void printMap() {
for(int i=0;i<10;i++) {
for(int e=0;e<20;e++) {
System.out.print(map[i][e]);
}
System.out.println();
}
}
public void run() {
set();
System.out.println("**Bear의 fish 먹기 게임을 시작합니다.**");
int fish_move = 0;
int total_move = 0;
printMap();
boolean flag = true;
while(flag) {
bear.move();
int r = (int)(Math.random()*2); //0이면 움직이고 1이면 가만히 있습니다.
if(total_move ==5) {
fish_move =0;
total_move =0;
}
if(r ==0 && fish_move<2) {
System.out.println(r);
printMap();
fish.move();
fish_move+=1;
total_move+=1;
}else if(r ==1 && total_move>3 && fish_move<2) {
fish.move();
printMap();
fish_move+=1;
total_move+=1;
}else {
printMap();
total_move+=1;
}
//게임 종료조건
if(bear.collide(fish)) {
printMap();
System.out.println("Bear Wins!!");
flag = false;
}
}
}
}
|
cs |
1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package RealQuestion;
public class Q01 {
public static void main(String[] args) {
ColorTV myTV = new ColorTV(32, 1024);
myTV.printProperty();
}
}
class TV{
private int size;
public TV(int size) {
this.size = size;
}
protected int getSize() {
return size;
}
}
class ColorTV extends TV{
private int numColor;
public ColorTV(int size, int numColor) {
super(size);
this.numColor = numColor;
}
public void printProperty() {
System.out.println(getSize()+"인치 "+numColor+"컬러");
}
//2번에서 컬러수 리턴할때 쓰입니다.
public int getColor() {
return numColor;
}
}
|
cs |
2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package RealQuestion;
public class Q02 {
public static void main(String[] args) {
IPTV iptv = new IPTV("192.1.1.2", 32, 2048);
iptv.printProperty();
}
}
class IPTV extends ColorTV{
private String IP;
public IPTV(String IP,int size, int numColor) {
super(size, numColor);
this.IP = IP;
}
@Override
public void printProperty() {
System.out.println("나의 IPTV는 "+IP+" 주소의 "+getSize()+"인치 "+getColor()+"컬러");
//앞의 ColorTV 클래스의 printProperty를 출력하는 방법도 있습니다! 그게 더 깔끔하겠네요.
}
}
|
cs |
3.
4.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
public class Q04 {
public static void main(String[] args) {
Km2Mile toMile = new Km2Mile(1.6);
toMile.run();
}
}
class Km2Mile extends Converter{
public Km2Mile(double d) {
this.ration = d;
}
@Override
protected double convert(double src) {
src = src/ration;
return src;
}
@Override
protected String getSrcString() {
return "Km";
}
@Override
protected String getDestString() {
// TODO Auto-generated method stub
return "mile";
}
}
|
cs |
5.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package RealQ;
public class Q05 {
public static void main(String[] args) {
ColorPoint cp = new ColorPoint(5, 5, "YELLOW");
cp.setXY(10, 20);
cp.setColor("RED");
String str = cp.toString();
System.out.println(str + "입니다.");
}
}
class ColorPoint extends Point{
private String Color;
public ColorPoint(int x, int y, String Color) {
super(x,y);
this.Color = Color;
}
public void setXY(int x, int y) {
move(x,y);
}
public void setColor(String Col) {
Color = Col;
}
public String getColor() {
return Color;
}
public String toString() {
String str = getColor()+"색의 ("+getX()+","+getY()+")의 점";
return str;
}
}
|
cs |
6.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package RealQ;
public class Q06 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ColorPoint_two zeroPoint = new ColorPoint_two();
System.out.println(zeroPoint.toString() + "입니다.");
ColorPoint_two cp = new ColorPoint_two(10,10);
cp.setXY(5, 5);
cp.setColor("RED");
System.out.println(cp.toString()+"입니다.");
}
}
class ColorPoint_two extends Point{
String Color;
public ColorPoint_two() {
super (0,0);
Color="BLACK";
}
public ColorPoint_two(int x, int y) {
super(x, y);
Color="BLACK";
}
public void setXY(int a, int b) {
move(a,b);
}
public void setColor(String src) {
Color = src;
}
public String getColor() {
return Color;
}
public String toString() {
String str = getColor()+"색의 ("+getX()+","+getY()+")의 점";
return str;
}
}
|
cs |
7.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package RealQ;
public class Q07 {
public static void main(String[] args) {
Point3D p = new Point3D(1,2,3);
System.out.println(p.toString() +"입니다.");
p.moveUp(); //z축으로 위쪽 이동
System.out.println(p.toString() +"입니다.");
p.moveDown();
p.move(10, 10);
System.out.println(p.toString() +"입니다.");
p.move(100,200,300);
System.out.println(p.toString() +"입니다.");
}
}
class Point3D extends Point{
private int z;
public Point3D(int x, int y, int z) {
super(x, y);
this.z = z;
// TODO Auto-generated constructor stub
}
public void moveUp() {
z++;
}
public void moveDown() {
z--;
}
public void move(int x, int y, int z) {
move(x,y);
this.z = z;
}
public int getZ() {
return z;
}
public String toString() {
String str = "("+getX()+","+getY()+","+getZ()+")의 점";
return str;
}
}
|
cs |
8.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package RealQ;
public class Q08 {
public static void main(String[] args) {
// TODO Auto-generated method stub
PositivePoint p = new PositivePoint();
p.move(10, 10);
System.out.println(p.toString()); //"입니다"를 toString에 넣겠습니다.왜 나눠놨을까요?
p.move(-5, 5);
System.out.println(p.toString());
PositivePoint p2 = new PositivePoint(-10, -10);
System.out.println(p2.toString());
}
}
class PositivePoint extends Point{
int a, b;
public PositivePoint() {
super(0, 0);
}
public PositivePoint(int x, int y) {
super(x, y);
if(x<0 || y<0) {
move(0,0);
}
}
@Override
public void move(int x, int y) {
if(x>=0 && y>=0) {
super.move(x, y);
}else { //문제랑 똑같이 하고 싶으면 이부분을 빼면 됩니다!
System.out.println("음수로는 못가요!");
}
}
public String toString() {
String str = "("+getX()+","+getY()+")의 점입니다.";
return str;
}
}
|
cs |
9.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
package RealQ;
import java.util.Scanner;
public class Q09 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("총 스택 저장 공간의 크기 입력 >> ");
int len = sc.nextInt();
StringStack st = new StringStack(len);
while(true) {
System.out.print("문자열 입력 >> ");
String val = sc.next();
if(val.contentEquals("그만")) {
break;
}
if(!st.push(val)) {
System.out.println("스택이 곽차서 푸시 불가!");
}
}
System.out.print("스택에 저장된 모든 문자열 팝 : ");
for(int i=0; i<st.length(); i++) {
System.out.print(st.pop()+" ");
}
}
}
class StringStack implements Stack{
private int top;
private String[] stack;
private int len; //스택 크기
private int poss; //지금 들어찬게 몇번짼지
StringStack(int len){
this.len = len;
stack = new String[len]; //스택 크기만큼 배열 생성
top = -1; //지금 꼭대기는 -1;
poss=0;
}
@Override
public int length() {
// TODO Auto-generated method stub
return poss; // 지금 들어차있는 수
}
@Override
public int capacity() {
// TODO Auto-generated method stub
return len;
}
@Override
public String pop() { //스택의 top에 실수 저장
// TODO Auto-generated method stub
if(top == -1) {
System.out.println("스택이 비어있습니다.");
}
String s = stack[top];
top--; //pop해서 배열에 있는 값을 뻈으니 (실제로는 들어있고 삭제하지 않았습니다. top이 가리키는 변수가 하나 줄어들뿐)
return s;
}
@Override
public boolean push(String val) { // 스택의 top에 저장된 실수 리턴
if(poss == len) {
return false;
}else {
top++;
poss++; //저장 됐으니까 poss 올림
stack[top] = val;
return true;
}
}
}
|
cs |
10.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
package RealQ;
public class Q10 {
public static void main(String[] args) {
Dictionary dic = new Dictionary(10);
dic.put("황기태", "자바");
dic.put("이재문", "파이선");
dic.put("이재문", "C++");
System.out.println("이재문의 값은 "+ dic.get("이재문"));
System.out.println("황기태의 값은 "+ dic.get("황기태"));
dic.delete("황기태");
System.out.println("황기태의 값은 "+ dic.get("황기태"));
}
}
class Dictionary extends PairMap{
private int len;
private int key_num; //key랑 vlaue 저장할 순번 입니다.
private String value; //get, delete함수할때 return할때 쓸 변수.
public Dictionary(int len) {
this.len = len;
super.keyArray = new String[len];
super.valueArray = new String[len];
key_num = -1; //아무것도 없을떈 -1
}
@Override
String get(String key) {
for(int i=0; i<len; i++) {
if(key.equals(keyArray[i])) {
value = valueArray[i];
break;
}
if(i ==len-1) {
value = "null";
}
}
return value;
}
@Override
void put(String key, String value) {
for(int i=0; i<len;i++) {
if(key.equals(keyArray[i])) {
valueArray[i] = value;
break;
}
if(i==len-1) {
key_num++;
keyArray[key_num] = key;
valueArray[key_num] = value;
}
}
}
@Override
String delete(String key) {
for(int i=0; i<len;i++) {
if(key.equals(keyArray[i])) {
value = valueArray[i];
valueArray[i] = "null";
keyArray[i] = "null";
break;
}
}
return value;
}
@Override
int length() {
return key_num+1;
}
}
|
cs |
11.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
package RealQ;
import java.util.Scanner;
public class Q11 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("두 정수와 연산자를 입력하시오>>");
int a=sc.nextInt();
int b=sc.nextInt();
String cal=sc.next();
switch(cal) {
case "+":
Add add=new Add();
add.setValue(a,b);
System.out.println(add.calculate());
break;
case "-":
Sub sub=new Sub();
sub.setValue(a, b);
System.out.println(sub.calculate());
break;
case "*":
Mul mul=new Mul();
mul.setValue(a, b);
System.out.println(mul.calculate());
break;
case "%":
Div div=new Div();
div.setValue(a, b);
System.out.println(div.calculate());
break;
default :
System.out.print("제대로 입력하세요.");
}
}
}
abstract class Calc{
int a;
int b;
public void setValue(int a, int b) {
this.a = a;
this.b = b;
}
abstract int calculate(); //계산결과 리턴해야하니까 int를 반환형으로 했습니다.
}
class Add extends Calc{
public int calculate() {
return a+b;
}
}
class Sub extends Calc{
public int calculate() {
return a-b;
}
}
class Mul extends Calc{
public int calculate() {
return a*b;
}
}
class Div extends Calc{
public int calculate() {
if(b ==0) {
System.out.println("0으로는 나눌 수 없습니다.");
return -1;
}
return a/b;
}
}
|
cs |
12.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
package RealQ;
import java.util.Scanner;
public class Q12 {
public static void main(String[] args) {
GraphicEditor ge = new GraphicEditor();
ge.run();
}
}
class GraphicEditor{
Scanner sc = new Scanner(System.in);
private Shape start,end;
private int num;
public void run() {
System.out.println("그래픽 에디터 YUNO를 실행합니다.");
boolean point=true;
while(point) {
System.out.print("삽입(1), 삭제(2), 모두 보기(3), 종료(4)>>");
num = sc.nextInt();
switch(num) {
case 1:
System.out.print("Line(1), Rect(2), Circle(3)>>");
int a = sc.nextInt();
insert(a);
break;
case 2:
System.out.print("삭제할 도형의 위치>>");
int loc = sc.nextInt();
delete(loc);
break;
case 3:
Shape f = start;
while(true) {
if(start==null) { //아무것도 없을떄
System.out.println("아무것도 없어요");
break;
}
if(start.equals(end)) { //하나만 있을때
start.draw();
break;
}
else {
f.draw();
f = f.getNext();
if(f.equals(end)) {
f.draw();
break;
}
}
}
break;
case 4:
System.out.println("yuno를 종료합니다.");
point=false;
}
}
}
public void delete(int loc) {
Shape cur=start;
Shape next=start;
int i=1;
for(; i<loc; i++) {
cur = next;
next = cur.getNext();
if(cur==null) {
System.out.println("삭제할 수 없습니다(입력수보다 노드 적음)");
}
}
if(i==loc) {
cur.setNext(next.getNext());
end = cur;
}else {
cur.setNext(cur.getNext());
}
}
public void insert(int a) {
Shape obj;
switch(a) {
case 1:
if(start==null) {
obj = new Line();
start=obj;
end=obj;
}
else {
obj = new Line();
end.setNext(obj);
end = obj;
}
break;
case 2:
if(start==null) {
obj = new Rect();
start=obj;
end = obj;
}
else {
obj = new Rect();
end.setNext(obj);
end = obj;
}
break;
case 3:
if(start==null) {
obj = new Circle();
start=obj;
end=obj;
}
else {
obj = new Circle();
end.setNext(obj);
end = obj;
}
break;
}
}
}
abstract class Shape{
private Shape next;
public Shape() {next = null;}
public void setNext(Shape obj) {
next = obj;
}
public Shape getNext() {
return next;
}
public abstract void draw();
}
class Line extends Shape{
@Override
public void draw() {
System.out.println("Line");
}
}
class Rect extends Shape{
@Override
public void draw() {
System.out.println("Rect");
}
}
class Circle extends Shape{
@Override
public void draw() {
System.out.println("Circle");
}
}
|
cs |
13.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package RealQ;
public class Q13 {
public static void main(String[] args) {
Shape donut = new Circle(10);
donut.redraw();
System.out.println("면적은 "+ donut.getArea());
}
}
class Circle implements Shape{
private int r;
public Circle(int r) {
this.r = r;
}
@Override
public void draw() {
System.out.println(" 반지름이 "+ r+"인 원입니다.");
}
@Override
public double getArea() {
return r*r*PI;
}
}
interface Shape{
final double PI = 3.14;
void draw();
double getArea();
default public void redraw() {
System.out.print("--- 다시 그립니다.");
draw();
}
}
|
cs |
14.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
package RealQ;
public class Q14 {
public static void main(String[] args) {
Shape [] list = new Shape[3];
list[0] = new Circle(10);
list[1] = new Oval(20, 30);
list[2] = new Rect(10, 40);
for(int i=0; i<list.length; i++) {
list[i].redraw();
}
for(int i=0; i<list.length; i++) {
System.out.println("면적은 "+list[i].getArea());
}
}
}
class Rect implements Shape{
private int a,b;
public Rect(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public void draw() {
System.out.println(" "+a+"x"+b+"크기의 사각형 입니다.");
}
@Override
public double getArea() {
// TODO Auto-generated method stub
return a*b;
}
}
class Oval implements Shape{
private int a,b;
public Oval(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println(" "+a+"x"+b+"에 내접하는 타원입니다.");
}
@Override
public double getArea() {
// TODO Auto-generated method stub
return PI*a*b;
}
}
|
cs |
'[책]명품 JAVA Programming' 카테고리의 다른 글
명품 자바 프로그래밍 6장 OpenChallenge&실습문제 (0) | 2021.01.16 |
---|---|
명품 자바 프로그래밍 6장 요약 (0) | 2021.01.13 |
명품 자바 프로그래밍 5장 요약 (0) | 2021.01.02 |
명품 자바 프로그래밍 4장 OpenChallenge&실습문제 (0) | 2021.01.01 |
명품 자바 프로그래밍 4장 요약 (0) | 2020.12.29 |