From b34a78cc6a6f004039489ec06f6f0ae5ca86d7d3 Mon Sep 17 00:00:00 2001 From: bestfarmer94 Date: Wed, 18 Jan 2023 18:59:30 +0900 Subject: [PATCH 1/6] Report1, 2 complete --- src/kyungyeon/report1/Report1_1 | 9 +++ src/kyungyeon/report1/Report1_2 | 18 ++++++ src/kyungyeon/report1/Report1_3.java | 56 +++++++++++++++++++ src/kyungyeon/report2/Report2_1 | 19 +++++++ src/kyungyeon/report2/Report2_2.java | 20 +++++++ src/kyungyeon/report2/Report2_3.java | 17 ++++++ src/kyungyeon/report2/Report2_4.java | 11 ++++ src/kyungyeon/report2/Report2_5.java | 14 +++++ src/kyungyeon/report2/Report2_6.java | 16 ++++++ src/studentenglishname/report1/Report1_1 | 3 - src/studentenglishname/report1/Report1_2 | 3 - src/studentenglishname/report1/Report1_3.java | 17 ------ src/studentenglishname/report2/Report2_2.java | 7 --- 13 files changed, 180 insertions(+), 30 deletions(-) create mode 100644 src/kyungyeon/report1/Report1_1 create mode 100644 src/kyungyeon/report1/Report1_2 create mode 100644 src/kyungyeon/report1/Report1_3.java create mode 100644 src/kyungyeon/report2/Report2_1 create mode 100644 src/kyungyeon/report2/Report2_2.java create mode 100644 src/kyungyeon/report2/Report2_3.java create mode 100644 src/kyungyeon/report2/Report2_4.java create mode 100644 src/kyungyeon/report2/Report2_5.java create mode 100644 src/kyungyeon/report2/Report2_6.java delete mode 100644 src/studentenglishname/report1/Report1_1 delete mode 100644 src/studentenglishname/report1/Report1_2 delete mode 100644 src/studentenglishname/report1/Report1_3.java delete mode 100644 src/studentenglishname/report2/Report2_2.java diff --git a/src/kyungyeon/report1/Report1_1 b/src/kyungyeon/report1/Report1_1 new file mode 100644 index 0000000..559151b --- /dev/null +++ b/src/kyungyeon/report1/Report1_1 @@ -0,0 +1,9 @@ +2-4번 문제 + +byte b = 256; (8bit, 맨 앞은 부호, -2^7 ~ 2^7-1 , -128 ~ 127) +char c = ''; (char는 빈 문자 불가능) +char answer = 'no'; (char는 문자 하나까지만 가능) +float f = 3.14 (3.14f) +double d = 1.4e3f; (1.4e3, f는 float형) + +정답 : 전부 diff --git a/src/kyungyeon/report1/Report1_2 b/src/kyungyeon/report1/Report1_2 new file mode 100644 index 0000000..260508e --- /dev/null +++ b/src/kyungyeon/report1/Report1_2 @@ -0,0 +1,18 @@ +2-7번 번 문제 + +System.out.println("1" + "2"); +System.out.println(true+""); +System.out.println('A' + 'B'); +System.out.println('1' + 2); +System.out.println('1' + '2'); +System.out.println('J' +"ava"); +System.out.println(true + null); + +정답 : +1. 12 // "12" +2. true // "true" +3. 131 // 아스키코드 'A' = 65, 'B' = 66 +4. 51 // 아스키코드 '1' = 49 +5. 99 // 아스키코드 '2' = 50 +6. Java // 자동 형변환의 형태 Char -> String +7. error // boolean 형은 연산 불가. + null은 그냥 print 불가. \ No newline at end of file diff --git a/src/kyungyeon/report1/Report1_3.java b/src/kyungyeon/report1/Report1_3.java new file mode 100644 index 0000000..fdde271 --- /dev/null +++ b/src/kyungyeon/report1/Report1_3.java @@ -0,0 +1,56 @@ +package kyungyeon.report1; + +// 2-8 번 문제 <- 이렇게 문제 번호 작성 필수. + +public class Report1_3 { + public static void main(String[] args) { + + // 2-8. 아래는 변수 x, y, z의 값을 서로 바꾸는 예제이다. 결과와 같이 출력되도록 코드를 넣으세요 + // 예상 결과 : x=2, y=3, z=1 + int x = 1; + int y = 2; + int z = 3; + + // 정답 + // 아래 addClass가 뭘 원하는지 모르겠어서 2가지 형태로 답을 냈습니다. + + // 첫번째. + int temp = x; + x = y; + y = z; + z = temp; + System.out.println("첫번째"); + System.out.println("x=" + x); + System.out.println("y=" + y); + System.out.println("z=" + z); + System.out.println(); + + // 두번째. + x = 1; + y = 2; + z = 3; + AddClass addClass = new AddClass(x, y, z); + addClass.test(); + } +} + + +// 필요하다면 클래스 추가 +class AddClass { + int x; + int y; + int z; + + public AddClass(int x, int y, int z) { + this.x = y; + this.y = z; + this.z = x; + } + + void test() { + System.out.println("두번째"); + System.out.println("x=" + x); + System.out.println("y=" + y); + System.out.println("z=" + z); + } +} diff --git a/src/kyungyeon/report2/Report2_1 b/src/kyungyeon/report2/Report2_1 new file mode 100644 index 0000000..c8e43e7 --- /dev/null +++ b/src/kyungyeon/report2/Report2_1 @@ -0,0 +1,19 @@ +byte b = 10; +char ch = 'A'; +int i = 100; +long l = 1000L; + +//3-1. 다음 중 형변환을 생략할 수 있는 것은? (모두 고르시오) + +b = (byte)i; +ch = (char)b; +short s = (short)ch; +float f = (float)l; +i = (int)ch; + +정답 : +불가능 // 숫자 그 자체로는 범위 내이지만, i가 int 변수(4byte) 이기에 바뀔수 있음을 고려해 오류로 뱉는다. +불가능 // 숫자 그 자체로는 범위 내이지만, char 변수는 0~127, 음의 부호는 허용을 못한다. +가능 // 어떤 범위의 ch도 담을 수 있다. +가능 // 실수형이 더 넓은 범위를 표현한다. +가능 // 어떤 범위의 ch도 담을 수 있다. \ No newline at end of file diff --git a/src/kyungyeon/report2/Report2_2.java b/src/kyungyeon/report2/Report2_2.java new file mode 100644 index 0000000..c3367cc --- /dev/null +++ b/src/kyungyeon/report2/Report2_2.java @@ -0,0 +1,20 @@ +package kyungyeon.report2; +// 3-2번 문제 +public class Report2_2 { + public static void main(String[] args) { + int x = 2; + int y = 5; + char c = 'A'; // 'A'의 문자코드는 65 + + System.out.println(y >= 5 || x < 0 && x > 2); // true. y >= 5 에서 이미 true + System.out.println(y += 10 - x++); // 13. 대입연산자가 가장 마지막. y+10-2 (x는 증가했지만 연산에 포함x) + System.out.println(x += 2); // 5. 위에서 ++로 3되었는데 여기서 5가 됨. + System.out.println(!('A' <= c && c <= 'Z')); // false. 비교연산자 양쪽이 모두 true여서 !true의 형태가 되어, false + System.out.println('C' - c); // 2. 아스키코드 상으로 2차이다. + System.out.println('5' - '0'); // 5. 같은 이유. + System.out.println(c + 1); // 66. int형으로 형변환. + System.out.println(++c); // B. 'A'에서 1증가하여 c는 'B'가 되었다. + System.out.println(c++); // B. 실제 c는 'C'가 되었지만, 여기서는 원래 c인 'B'로 출력된다. + System.out.println(c); // C. + } +} diff --git a/src/kyungyeon/report2/Report2_3.java b/src/kyungyeon/report2/Report2_3.java new file mode 100644 index 0000000..0d57a1b --- /dev/null +++ b/src/kyungyeon/report2/Report2_3.java @@ -0,0 +1,17 @@ +package kyungyeon.report2; + +class Report2_3 { + public static void main(String[] args) { + + //3-3. 아래는 변수의 num 값 중에서 백의 자리 이하를 버리는 코드이다. + //만일 변수 num의 값이 '456'이라면 '400'이 되고, '111'이라면 '100'이 된다. + //알맞은 코드를 넣으시오. + + int num = 456; + int result = num - num % 100; + int result2 = 100 * (num / 100); + + System.out.println(result); + System.out.println(result2); + } +} diff --git a/src/kyungyeon/report2/Report2_4.java b/src/kyungyeon/report2/Report2_4.java new file mode 100644 index 0000000..483f795 --- /dev/null +++ b/src/kyungyeon/report2/Report2_4.java @@ -0,0 +1,11 @@ +package kyungyeon.report2; + +public class Report2_4 { + public static void main(String[] args) { + int numOfApples = 123; // 사과의 개수 + int sizeOfBucket = 10; // 바구니의 크기(바구니에 담을 수 있는 사과의 개수) + int numOfBucket = (int) Math.ceil((double)numOfApples / sizeOfBucket); // 모든 사과를 담는데 필요한 바구니의 수 + + System.out.println("필요한 바구니의 수 :" + numOfBucket); + } +} diff --git a/src/kyungyeon/report2/Report2_5.java b/src/kyungyeon/report2/Report2_5.java new file mode 100644 index 0000000..a655c12 --- /dev/null +++ b/src/kyungyeon/report2/Report2_5.java @@ -0,0 +1,14 @@ +package kyungyeon.report2; + +public class Report2_5 { + public static void main(String[] args) { + //3-5. 아래는 변수 num의 값에 따라 '양수', '음수', '0'을 출력하는 코드이다. + //삼항연산자를 이용해서 빈칸에 알맞은 코드를 넣으시오. + //Hint : 삼항 연산자를 두 번 사용할 것! + + int num = 10; + String result = num > 0 ? "양수" : num == 0 ? "0" : "음수"; + + System.out.println(result); + } +} diff --git a/src/kyungyeon/report2/Report2_6.java b/src/kyungyeon/report2/Report2_6.java new file mode 100644 index 0000000..0360095 --- /dev/null +++ b/src/kyungyeon/report2/Report2_6.java @@ -0,0 +1,16 @@ +package kyungyeon.report2; + +public class Report2_6 { + + public static void main(String[] args) { + //3-6. 아래는 화씨(Fahrenheit)를 섭씨(Celcius)로 변환하는 코드이다. + //변환 공식이 'C = 5/9*(F-32)'라고 할 때, 빈 칸에 알맞은 코드를 넣으시오. + // 단, 변환값은 소수점 셋째자리에서 반올림하며, Math.round() 함수를 사용하지 않고 처리할 것! + + int fahrenheit = 100; + float celcius = (int)(5 / 9.0 * (fahrenheit - 32.0) * 100 + 0.5) / 100.0f; + + System.out.println("Fahrenheit:" + fahrenheit); + System.out.println("Celcius:" + celcius); + } +} diff --git a/src/studentenglishname/report1/Report1_1 b/src/studentenglishname/report1/Report1_1 deleted file mode 100644 index 3f37658..0000000 --- a/src/studentenglishname/report1/Report1_1 +++ /dev/null @@ -1,3 +0,0 @@ -2-4번 문제 - -정답 : diff --git a/src/studentenglishname/report1/Report1_2 b/src/studentenglishname/report1/Report1_2 deleted file mode 100644 index f4e5811..0000000 --- a/src/studentenglishname/report1/Report1_2 +++ /dev/null @@ -1,3 +0,0 @@ -2-7번 번 문제 - -정답 : \ No newline at end of file diff --git a/src/studentenglishname/report1/Report1_3.java b/src/studentenglishname/report1/Report1_3.java deleted file mode 100644 index 5b75b9c..0000000 --- a/src/studentenglishname/report1/Report1_3.java +++ /dev/null @@ -1,17 +0,0 @@ -package studentenglishname.report1; -// 2-8 번 문제 <- 이렇게 문제 번호 작성 필수 -public class Report1_3 { - public static void main(String[] args) { - // 정답 작성 - // Ex) - AddClass addClass = new AddClass(); - addClass.test(); - } -} - -// 필요하다면 클래스 추가 -class AddClass { - void test() { - System.out.println("AddClass.test"); - } -} diff --git a/src/studentenglishname/report2/Report2_2.java b/src/studentenglishname/report2/Report2_2.java deleted file mode 100644 index 71dbb48..0000000 --- a/src/studentenglishname/report2/Report2_2.java +++ /dev/null @@ -1,7 +0,0 @@ -package studentenglishname.report2; -// 3-2번 문제 -public class Report2_2 { - public static void main(String[] args) { - - } -} From b9f7cb1a8f7eea8e48df277741e486cff76b314c Mon Sep 17 00:00:00 2001 From: bestfarmer94 Date: Thu, 19 Jan 2023 15:55:55 +0900 Subject: [PATCH 2/6] Report3, 4 complete --- src/kyungyeon/report2/Report2_1 | 2 +- src/kyungyeon/report2/Report2_6.java | 2 +- src/kyungyeon/report3/Report3_1 | 25 +++++++++++++++++++ src/kyungyeon/report3/Report3_10.java | 36 +++++++++++++++++++++++++++ src/kyungyeon/report3/Report3_2.java | 15 +++++++++++ src/kyungyeon/report3/Report3_3.java | 16 ++++++++++++ src/kyungyeon/report3/Report3_4.java | 20 +++++++++++++++ src/kyungyeon/report3/Report3_5.java | 23 +++++++++++++++++ src/kyungyeon/report3/Report3_6.java | 14 +++++++++++ src/kyungyeon/report3/Report3_7.java | 16 ++++++++++++ src/kyungyeon/report3/Report3_8.java | 9 +++++++ src/kyungyeon/report3/Report3_9.java | 18 ++++++++++++++ src/kyungyeon/report4/Report4_1 | 13 ++++++++++ src/kyungyeon/report4/Report4_2 | 10 ++++++++ src/kyungyeon/report4/Report4_3.java | 15 +++++++++++ src/kyungyeon/report4/Report4_4.java | 29 +++++++++++++++++++++ src/kyungyeon/report4/Report4_5.java | 31 +++++++++++++++++++++++ src/kyungyeon/report4/Report4_6.java | 34 +++++++++++++++++++++++++ 18 files changed, 326 insertions(+), 2 deletions(-) create mode 100644 src/kyungyeon/report3/Report3_1 create mode 100644 src/kyungyeon/report3/Report3_10.java create mode 100644 src/kyungyeon/report3/Report3_2.java create mode 100644 src/kyungyeon/report3/Report3_3.java create mode 100644 src/kyungyeon/report3/Report3_4.java create mode 100644 src/kyungyeon/report3/Report3_5.java create mode 100644 src/kyungyeon/report3/Report3_6.java create mode 100644 src/kyungyeon/report3/Report3_7.java create mode 100644 src/kyungyeon/report3/Report3_8.java create mode 100644 src/kyungyeon/report3/Report3_9.java create mode 100644 src/kyungyeon/report4/Report4_1 create mode 100644 src/kyungyeon/report4/Report4_2 create mode 100644 src/kyungyeon/report4/Report4_3.java create mode 100644 src/kyungyeon/report4/Report4_4.java create mode 100644 src/kyungyeon/report4/Report4_5.java create mode 100644 src/kyungyeon/report4/Report4_6.java diff --git a/src/kyungyeon/report2/Report2_1 b/src/kyungyeon/report2/Report2_1 index c8e43e7..0b45dfb 100644 --- a/src/kyungyeon/report2/Report2_1 +++ b/src/kyungyeon/report2/Report2_1 @@ -14,6 +14,6 @@ i = (int)ch; 정답 : 불가능 // 숫자 그 자체로는 범위 내이지만, i가 int 변수(4byte) 이기에 바뀔수 있음을 고려해 오류로 뱉는다. 불가능 // 숫자 그 자체로는 범위 내이지만, char 변수는 0~127, 음의 부호는 허용을 못한다. -가능 // 어떤 범위의 ch도 담을 수 있다. +불가능 // (char,short 2byte 이지만 범위가 달라서 형변환 필요하다고 합니다!) 가능 // 실수형이 더 넓은 범위를 표현한다. 가능 // 어떤 범위의 ch도 담을 수 있다. \ No newline at end of file diff --git a/src/kyungyeon/report2/Report2_6.java b/src/kyungyeon/report2/Report2_6.java index 0360095..50b7c36 100644 --- a/src/kyungyeon/report2/Report2_6.java +++ b/src/kyungyeon/report2/Report2_6.java @@ -8,7 +8,7 @@ public static void main(String[] args) { // 단, 변환값은 소수점 셋째자리에서 반올림하며, Math.round() 함수를 사용하지 않고 처리할 것! int fahrenheit = 100; - float celcius = (int)(5 / 9.0 * (fahrenheit - 32.0) * 100 + 0.5) / 100.0f; + float celcius = (int) (5 / 9.0 * (fahrenheit - 32.0) * 100 + 0.5) / 100.0f; System.out.println("Fahrenheit:" + fahrenheit); System.out.println("Celcius:" + celcius); diff --git a/src/kyungyeon/report3/Report3_1 b/src/kyungyeon/report3/Report3_1 new file mode 100644 index 0000000..bc2dd6a --- /dev/null +++ b/src/kyungyeon/report3/Report3_1 @@ -0,0 +1,25 @@ +//4-1. 다음의 문장들을 조건식으로 표현해보세요. + +//int형 변수 x가 10보다 크고 20보다 작을 때 true인 조건식 +if(x > 10 && x < 20) + +//char형 변수 ch가 공백이나 탭이 아닐 때 true인 조건식 +if(ch != ' ' && ch != '\t') + +//char형 변수 ch가 'x' 또는 'X'일 때 true인 조건식 +if(ch == 'x' || ch == 'X') + +//char형 변수 ch가 숫자('0'~'9')일 때 true인 조건식 +if(ch >= '0' && ch <= '9') + +//char형 변수 ch가 영문자(대문자 또는 소문자)일 때 true인 조건식 +if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) + +//int형 변수 year가 400으로 나눠떨어지거나 또는 4로 나눠떨어지고 100으로 나눠떨어지지 않을때 true인 조건식 +if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) + +//boolean형 변수 powerOn이 false일 때 true인 조건식 +if(!powerOn) + +//문자열 참조변수 str이 "yes"일 때 true인 조건식 +if(str.equals("yes")) \ No newline at end of file diff --git a/src/kyungyeon/report3/Report3_10.java b/src/kyungyeon/report3/Report3_10.java new file mode 100644 index 0000000..d180f8f --- /dev/null +++ b/src/kyungyeon/report3/Report3_10.java @@ -0,0 +1,36 @@ +package kyungyeon.report3; + +public class Report3_10 { + public static void main(String[] args) { + //4-10. 다음은 숫자맞추기 게임을 작성한 것이다. 1과 100사이의 값을 반복적으로 입력해서 + //컴퓨터가 생각한 값을 맞추면 게임이 끝난다. + //사용자가 값을 입력하면, 컴퓨터는 자신이 생각한 값과 비교해서 결과를 알려준다. + //사용자가 컴퓨터가 생각한 숫자를 맞추면 게임이 끝나고 몇 번 만에 숫자를 맞췄는지 알려준다. + + // 1~100사이의 임의의 값을 얻어서 answer에 저장한다. + int answer = (int) (Math.random() * 100) + 1; + int input = 0; //사용자입력을 저장할 공간 + int count = 0; //시도횟수를 세기위한 변수 + + // 화면으로 부터 사용자입력을 받기 위해서 Scanner클래스 사용 + java.util.Scanner s = new java.util.Scanner(System.in); + do { + count++; + System.out.print("1과 100사이의 값을 입력하세요 : "); + input = s.nextInt(); //입력받은 값을 변수 input에 저장한다. + + if (input > answer) { + System.out.println("좀 더 작은 수 입니다."); + continue; + } + if (input < answer) { + System.out.println("좀 더 큰 수 입니다."); + continue; + } + + System.out.println("정답입니다."); + System.out.println("시도 횟수 : " + count + "번"); + break; + } while (true); //무한반복문 + } +} diff --git a/src/kyungyeon/report3/Report3_2.java b/src/kyungyeon/report3/Report3_2.java new file mode 100644 index 0000000..5b70595 --- /dev/null +++ b/src/kyungyeon/report3/Report3_2.java @@ -0,0 +1,15 @@ +package kyungyeon.report3; + +public class Report3_2 { + public static void main(String[] args) { + //4-2. 1부터 20까지의 정수중에서 2 또는 3의 배수가 아닌 수의 총합을 구하세요. + int sum = 0; + for (int i = 1; i < 21; i++) { + if (i % 2 != 0 && i % 3 != 0) { + sum += i; + } + } + + System.out.println("sum=" + sum); // 73 + } +} diff --git a/src/kyungyeon/report3/Report3_3.java b/src/kyungyeon/report3/Report3_3.java new file mode 100644 index 0000000..13c71da --- /dev/null +++ b/src/kyungyeon/report3/Report3_3.java @@ -0,0 +1,16 @@ +package kyungyeon.report3; + +public class Report3_3 { + public static void main(String[] args) { + //4-3. 1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+10)의 결과를 계산하세요. + int sum = 0; + int totalSum = 0; + + for (int i = 1; i < 11; i++) { + sum += i; + totalSum += sum; + } + + System.out.println("totalSum="+totalSum); // 220 + } +} diff --git a/src/kyungyeon/report3/Report3_4.java b/src/kyungyeon/report3/Report3_4.java new file mode 100644 index 0000000..f1327d7 --- /dev/null +++ b/src/kyungyeon/report3/Report3_4.java @@ -0,0 +1,20 @@ +package kyungyeon.report3; + +public class Report3_4 { + public static void main(String[] args) { + //4-4. 1+(-2)+3+(-4)+...과 같은 식으로 계속 더해나갔을 때, + //몇까지 더해야 총합이 100 이상이 되는지 구하세요. + int sum = 0; // 총합을 저장할 변수 + int s = 1; // 값의 부호를 바꿔주는데 사용할 변수 + int num = 0; + + while (sum < 100) { + num++; + sum += num * s; + s *= -1; + } + + System.out.println("num=" + num); // 199 + System.out.println("sum=" + sum); // 100 + } +} diff --git a/src/kyungyeon/report3/Report3_5.java b/src/kyungyeon/report3/Report3_5.java new file mode 100644 index 0000000..5c4d547 --- /dev/null +++ b/src/kyungyeon/report3/Report3_5.java @@ -0,0 +1,23 @@ +package kyungyeon.report3; + +public class Report3_5 { + public static void main(String[] args) { + //4-5. 다음의 for문을 while문으로 변경하세요. + for (int i = 0; i <= 10; i++) { + for (int j = 0; j <= i; j++) + System.out.print("*"); + System.out.println(); + } + + int i = 0; + while (i <= 10) { + int j = 0; + while (j <= i) { + System.out.print("*"); + j++; + } + System.out.println(); + i++; + } + } +} diff --git a/src/kyungyeon/report3/Report3_6.java b/src/kyungyeon/report3/Report3_6.java new file mode 100644 index 0000000..5402c07 --- /dev/null +++ b/src/kyungyeon/report3/Report3_6.java @@ -0,0 +1,14 @@ +package kyungyeon.report3; + +public class Report3_6 { + public static void main(String[] args) { + //4-6. 두 개의 주사위를 던졌을 때, 눈의 합이 6이 되는 모든 경우의 수를 출력하는 프로그램을 작성하세요. + for (int i = 1; i < 7; i++) { + for (int j = 1; j < 7; j++) { + if(i+j == 6){ + System.out.println("첫번째 주사위: " + i + ", 두번째 주사위: " + j); + } + } + } + } +} diff --git a/src/kyungyeon/report3/Report3_7.java b/src/kyungyeon/report3/Report3_7.java new file mode 100644 index 0000000..1aab8d6 --- /dev/null +++ b/src/kyungyeon/report3/Report3_7.java @@ -0,0 +1,16 @@ +package kyungyeon.report3; + +public class Report3_7 { + public static void main(String[] args) { + //4-7. 숫자로 이루어진 문자열 str이 있을 때, 각 자리의 합을 더한 결과를 출력하는 코드를 완성하세요. + //만일 문자열이 "12345"라면, ‘1+2+3+4+5’의 결과인 15를 출력이 출력되어야 합니다. + String str = "12345"; + int sum = 0; + + for (int i = 0; i < str.length(); i++) { + sum += str.charAt(i) - '0'; + } + + System.out.println("sum=" + sum); + } +} diff --git a/src/kyungyeon/report3/Report3_8.java b/src/kyungyeon/report3/Report3_8.java new file mode 100644 index 0000000..af8919e --- /dev/null +++ b/src/kyungyeon/report3/Report3_8.java @@ -0,0 +1,9 @@ +package kyungyeon.report3; + +public class Report3_8 { + public static void main(String[] args) { + //4-8. Math.random()을 이용해서 1부터 6 사이의 임의의 정수를 변수 value에 저장하는 코드를 완성하세요. + int value = (int) (Math.random() * 6) + 1; + System.out.println("value:" + value); + } +} diff --git a/src/kyungyeon/report3/Report3_9.java b/src/kyungyeon/report3/Report3_9.java new file mode 100644 index 0000000..fb53cfc --- /dev/null +++ b/src/kyungyeon/report3/Report3_9.java @@ -0,0 +1,18 @@ +package kyungyeon.report3; + +public class Report3_9 { + public static void main(String[] args) { + //4-9. int 타입의 변수 num이 있을 때, 각 자리의 합을 더한 결과를 출력하는 코드를 완성하세요. + //만일 변수 num의 값이 12345라면, ‘1+2+3+4+5’의 결과인 15를 출력하세요. + //문자열로 변환하지 말고 숫자로만 처리하세요. + int num = 12345; + int sum = 0; + + while (num != 0) { + sum += num % 10; + num /= 10; + } + + System.out.println("sum=" + sum); + } +} diff --git a/src/kyungyeon/report4/Report4_1 b/src/kyungyeon/report4/Report4_1 new file mode 100644 index 0000000..724db4a --- /dev/null +++ b/src/kyungyeon/report4/Report4_1 @@ -0,0 +1,13 @@ +//5-1. 다음은 배열을 선언하거나 초기화한 것이다. 잘못된 것을 고르고 그 이유를 설명하세요. +1. int[] arr[]; +2. int[] arr = {1,2,3,}; +3. int[] arr = new int[5]; +4. int[] arr = new int[5]{1,2,3,4,5}; +5. int arr[5]; +6. int[] arr[] = new int[3][]; + +정답: +1. 잘못된 거라고 생각하는데, 되긴 된다. 2차원 배열이 생성 되버린다. +2. 잘못된 거라고 생각하는데, 되긴 된다. arr.length 는 3이었다. +4. int[] arr = new int[]{1,2,3,4,5}; 이렇게 쓰던가, new int[] 자체가 빠지면 된다. +5. 선언에서 배열 크기 저장 까지는 안되는 것 같다. int arr[] 은 된다. diff --git a/src/kyungyeon/report4/Report4_2 b/src/kyungyeon/report4/Report4_2 new file mode 100644 index 0000000..ae11ee2 --- /dev/null +++ b/src/kyungyeon/report4/Report4_2 @@ -0,0 +1,10 @@ +//5-2. 다음과 같은 배열이 있을 때, arr[3].length의 값은? +int[][]arr ={ + {5,5,5,5,5}, + {10,10,10}, + {20,20,20,20}, + {30,30} +}; + +정답 : 2 +arr[3] = {30, 30} \ No newline at end of file diff --git a/src/kyungyeon/report4/Report4_3.java b/src/kyungyeon/report4/Report4_3.java new file mode 100644 index 0000000..8522ac0 --- /dev/null +++ b/src/kyungyeon/report4/Report4_3.java @@ -0,0 +1,15 @@ +package kyungyeon.report4; + +public class Report4_3 { + public static void main(String[] args) { + //5-3. 배열 arr에 담긴 모든 값을 더하는 프로그램을 완성하세요. + int[] arr = {10, 20, 30, 40, 50}; + int sum = 0; + + for (int i : arr) { + sum += i; + } + + System.out.println("sum="+sum); + } +} diff --git a/src/kyungyeon/report4/Report4_4.java b/src/kyungyeon/report4/Report4_4.java new file mode 100644 index 0000000..207f0b9 --- /dev/null +++ b/src/kyungyeon/report4/Report4_4.java @@ -0,0 +1,29 @@ +package kyungyeon.report4; + +public class Report4_4 { + public static void main(String[] args) { + //5-4. 2차원 배열 arr에 담긴 모든 총합과 평균을 구하는 프로그램을 완성하세요. + int[][] arr = { + {5, 5, 5, 5, 5}, + {10, 10, 10, 10, 10}, + {20, 20, 20, 20, 20}, + {30, 30, 30, 30, 30} + }; + + int total = 0; + float average = 0; + int count = 0; + + for (int[] ints : arr) { + for (int anInt : ints) { + total += anInt; + count++; + } + } + + average = (float) total / count; + + System.out.println("total=" + total); + System.out.println("average=" + average); + } +} diff --git a/src/kyungyeon/report4/Report4_5.java b/src/kyungyeon/report4/Report4_5.java new file mode 100644 index 0000000..90f8dfe --- /dev/null +++ b/src/kyungyeon/report4/Report4_5.java @@ -0,0 +1,31 @@ +package kyungyeon.report4; + +public class Report4_5 { + public static void main(String[] args) { + //5-5. 다음은 1과 9 사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램이다. + //코드를 완성하세요. 다만 Math.random()을 사용했기 때문에 실행 결과 예시와 다를 수 있습니다. + int[] ballArr = {1, 2, 3, 4, 5, 6, 7, 8, 9}; + int[] ball3 = new int[3]; + + // 배열 ballArr의 임의의 요소를 골라서 위치를 바꾼다 + for (int i = 0; i < ballArr.length; i++) { + int j = (int) (Math.random() * ballArr.length); + int tmp = 0; + + tmp = ballArr[0]; + ballArr[0] = ballArr[j]; + ballArr[j] = tmp; + } + + for (int i = 0; i < 3; i++) { + ball3[i] = ballArr[i]; + } + + // 배열 ballArr의 앞에서 3개의 수를 배열 ball3로 복사한다 + // 바로위의 for문에서 복사한 것인게 아닌가? + + for (int i = 0; i < ball3.length; i++) { + System.out.print(ball3[i]); + } + } +} diff --git a/src/kyungyeon/report4/Report4_6.java b/src/kyungyeon/report4/Report4_6.java new file mode 100644 index 0000000..440bbd1 --- /dev/null +++ b/src/kyungyeon/report4/Report4_6.java @@ -0,0 +1,34 @@ +package kyungyeon.report4; + +import java.util.Scanner; + +public class Report4_6 { + public static void main(String[] args) { + //5-6. 단어의 글자위치를 섞어서 보여주고 원래의 단어를 맞추는 예제이다. + //실행결과와 같이 동작하도록 빈 칸을 채우세요. + String[] words = {"television", "computer", "mouse", "phone"}; + + Scanner scanner = new Scanner(System.in); + + for (int i = 0; i < words.length; i++) { + char[] question = words[i].toCharArray(); // String을 char[]로 변환 + + for (int j = 0; j < question.length; j++) { + int k = (int) (Math.random() * question.length); + char temp = question[0]; + + question[0] = question[k]; + question[k] = temp; + } + + System.out.printf("Q%d. %s의 정답을 입력하세요 .>", i + 1, new String(question)); + String answer = scanner.nextLine(); + + // trim()으로 answer의 좌우 공백을 제거한 후, equals로 word[i]와 비교 + if (words[i].equals(answer.trim())) + System.out.printf("맞았습니다.%n%n"); + else + System.out.printf("틀렸습니다.%n%n"); + } + } +} From 759dedea625a33ed7e339b1fddca182c9a53f2cf Mon Sep 17 00:00:00 2001 From: bestfarmer94 <95468155+bestfarmer94@users.noreply.github.com> Date: Thu, 19 Jan 2023 16:29:40 +0900 Subject: [PATCH 3/6] =?UTF-8?q?Report3=5Fflowchart.drawio.png=EC=9D=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EB=90=98=EC=97=88=EC=8A=B5=EB=8B=88=EB=8B=A4?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report3/Report3_flowchart.drawio.png | Bin 0 -> 24398 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/kyungyeon/report3/Report3_flowchart.drawio.png diff --git a/src/kyungyeon/report3/Report3_flowchart.drawio.png b/src/kyungyeon/report3/Report3_flowchart.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..f302e406daa01de178d68a05e613437322b8ef2e GIT binary patch literal 24398 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 Date: Mon, 23 Jan 2023 12:31:05 +0900 Subject: [PATCH 4/6] Report5, 6, 7 complete --- src/kyungyeon/report4/Report4_3.java | 2 +- src/kyungyeon/report5/Report5_1 | 16 +++++++ src/kyungyeon/report5/Report5_2.java | 65 +++++++++++++++++++++++++ src/kyungyeon/report5/Report5_3.java | 26 ++++++++++ src/kyungyeon/report5/Report5_4.java | 18 +++++++ src/kyungyeon/report5/Report5_5.java | 24 ++++++++++ src/kyungyeon/report6/Report6_1 | 12 +++++ src/kyungyeon/report6/Report6_2 | 8 ++++ src/kyungyeon/report6/Report6_3 | 9 ++++ src/kyungyeon/report6/Report6_4 | 12 +++++ src/kyungyeon/report6/Report6_5 | 10 ++++ src/kyungyeon/report6/Report6_6 | 7 +++ src/kyungyeon/report6/Report6_7 | 9 ++++ src/kyungyeon/report6/Report6_8 | 9 ++++ src/kyungyeon/report6/Report6_9 | 17 +++++++ src/kyungyeon/report7/Report7_1.java | 33 +++++++++++++ src/kyungyeon/report7/Report7_2.java | 34 +++++++++++++ src/kyungyeon/report7/Report7_3.java | 71 ++++++++++++++++++++++++++++ src/kyungyeon/report7/Report7_4.java | 37 +++++++++++++++ src/kyungyeon/report7/Report7_5.java | 22 +++++++++ 20 files changed, 440 insertions(+), 1 deletion(-) create mode 100644 src/kyungyeon/report5/Report5_1 create mode 100644 src/kyungyeon/report5/Report5_2.java create mode 100644 src/kyungyeon/report5/Report5_3.java create mode 100644 src/kyungyeon/report5/Report5_4.java create mode 100644 src/kyungyeon/report5/Report5_5.java create mode 100644 src/kyungyeon/report6/Report6_1 create mode 100644 src/kyungyeon/report6/Report6_2 create mode 100644 src/kyungyeon/report6/Report6_3 create mode 100644 src/kyungyeon/report6/Report6_4 create mode 100644 src/kyungyeon/report6/Report6_5 create mode 100644 src/kyungyeon/report6/Report6_6 create mode 100644 src/kyungyeon/report6/Report6_7 create mode 100644 src/kyungyeon/report6/Report6_8 create mode 100644 src/kyungyeon/report6/Report6_9 create mode 100644 src/kyungyeon/report7/Report7_1.java create mode 100644 src/kyungyeon/report7/Report7_2.java create mode 100644 src/kyungyeon/report7/Report7_3.java create mode 100644 src/kyungyeon/report7/Report7_4.java create mode 100644 src/kyungyeon/report7/Report7_5.java diff --git a/src/kyungyeon/report4/Report4_3.java b/src/kyungyeon/report4/Report4_3.java index 8522ac0..25aca90 100644 --- a/src/kyungyeon/report4/Report4_3.java +++ b/src/kyungyeon/report4/Report4_3.java @@ -10,6 +10,6 @@ public static void main(String[] args) { sum += i; } - System.out.println("sum="+sum); + System.out.println("sum=" + sum); } } diff --git a/src/kyungyeon/report5/Report5_1 b/src/kyungyeon/report5/Report5_1 new file mode 100644 index 0000000..4e7a8ae --- /dev/null +++ b/src/kyungyeon/report5/Report5_1 @@ -0,0 +1,16 @@ +//6-1. 다음과 같은 멤버 변수를 갖는 Student 클래스를 정의하세요. +//타입 : String, 변수명 : name, 설명 : 학생 이름 +//타입 : int, 변수명 : ban, 설명 : 반 +//타입 : int, 변수명 : no, 설명 : 번호 +//타입 : int, 변수명 : kor, 설명 : 국어 점수 +//타입 : int, 변수명 : eng, 설명 : 영어 점수 +//타입 : int, 변수명 : math, 설명 : 수학 점수 + +class Student{ + String name; + int ban; + int no; + int kor; + int eng; + int math; +} \ No newline at end of file diff --git a/src/kyungyeon/report5/Report5_2.java b/src/kyungyeon/report5/Report5_2.java new file mode 100644 index 0000000..d925bd4 --- /dev/null +++ b/src/kyungyeon/report5/Report5_2.java @@ -0,0 +1,65 @@ +package kyungyeon.report5; + +import java.util.Arrays; + +public class Report5_2 { + public static void main(String[] args) { + Student s = new Student("홍길동", 1, 1, 100, 60, 76); + + String str = s.info(); + System.out.println(str); + } +} + +class Student { + String name; + int ban; + int no; + int kor; + int eng; + int math; + + Student() { + } + + 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; + } + + String info() { + String[] info = new String[8]; + + int total = kor + eng + math; + double avg = Math.round(10 * total / 3.0) / 10.0; + + info[0] = name; + info[1] = "" + ban; + info[2] = "" + no; + info[3] = "" + kor; + info[4] = "" + eng; + info[5] = "" + math; + info[6] = "" + total; + info[7] = "" + avg; + + String result = Arrays.toString(info); + result = result.substring(1, result.length() - 1); + + return result; + } + + int getTotal() { + int total = kor + eng + math; + return total; + } + + double getAverage() { + int total = kor + eng + math; + double avg = Math.round(10 * total / 3.0) / 10.0; + return avg; + } +} \ No newline at end of file diff --git a/src/kyungyeon/report5/Report5_3.java b/src/kyungyeon/report5/Report5_3.java new file mode 100644 index 0000000..4323a71 --- /dev/null +++ b/src/kyungyeon/report5/Report5_3.java @@ -0,0 +1,26 @@ +package kyungyeon.report5; + +class Exercise6_3 { + public static void main(String args[]) { + //6-3. 연습문제 6-1에서 정의한 Student 클래스에 다음과 같이 정의된 두 개의 메서드를 추가하세요. + //1. 메서드명 : getTotal + //기능 : 국어(kor), 영어(eng), 수학(math)의 점수를 모두 더해서 반환한다. + //반환타입 : int + //매개변수 : 없음 + //2. 메서드명 : getAverage + //기능 : 총점(국어점수+영어점수+수학점수)을 과목수로 나눈 평균을 구한다. + //소수점 둘째자리에서 반올림할 것. + //반환타입 : float + //매개변수 : 없음 + 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()); + }//예상 결과 : 이름 : 홍길동, 총점 : 236, 평균 : 78.7 +} diff --git a/src/kyungyeon/report5/Report5_4.java b/src/kyungyeon/report5/Report5_4.java new file mode 100644 index 0000000..84f91f9 --- /dev/null +++ b/src/kyungyeon/report5/Report5_4.java @@ -0,0 +1,18 @@ +package kyungyeon.report5; + +//6-5. 다음의 코드에 정의된 변수들을 종류별(클래스 변수,인스턴스 변수, 지역변수)로 구분해서 적으세요. +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); + } +} \ No newline at end of file diff --git a/src/kyungyeon/report5/Report5_5.java b/src/kyungyeon/report5/Report5_5.java new file mode 100644 index 0000000..677ca97 --- /dev/null +++ b/src/kyungyeon/report5/Report5_5.java @@ -0,0 +1,24 @@ +package kyungyeon.report5; + +//6-7. 다음은 컴퓨터 게임의 병사(marine)를 클래스로 정의한 것이다. +//이 클래스의 멤버 중에 static을 붙여야 하는 것은 어떤 것들이고 그 이유는 무엇인가? +//(단, 모든 병사의 공격력과 방어력은 같아야 한다.) +class Marine { + int x = 0, y = 0; //Marine의 위치좌표 (x,y) : 움직이면 위치 다르다. + int hp = 60; //현재 체력 : 마린 개체마다 두들겨 맞아서 피가 전부 다르다. + static int weapon = 6; //공격력 : 모든 마린의 공격력은 같다. + static int armor = 0; //방어력 : 모든 마린의 방어력은 같다. + + void weaponUp() { + weapon++; + } + + void armorUp() { + armor++; + } + + void move(int x, int y) { + this.x = x; + this.y = y; + } +} \ No newline at end of file diff --git a/src/kyungyeon/report6/Report6_1 b/src/kyungyeon/report6/Report6_1 new file mode 100644 index 0000000..fbdae95 --- /dev/null +++ b/src/kyungyeon/report6/Report6_1 @@ -0,0 +1,12 @@ +6-8. 다음 중 생성자에 대한 설명으로 옳지 않은 것은? (모두 고르시오) +a. 모든 생성자의 이름은 클래스의 이름과 동일해야한다. +b. 생성자는 객체를 생성하기 위한 것이다. +c. 클래스에는 생성자가 반드시 하나 이상 있어야 한다. +d. 생성자가 없는 클래스는 컴파일러가 기본 생성자를 추가한다. +e. 생성자는 오버로딩 할 수 없다. + + +c. 하나 이상 있어야 한다기 보단 있다. 따로 생성자를 만들어 주지 않았다면, 기본 생성자가 내부적으로 존재한다. +e. 오버로딩 가능하다. + + diff --git a/src/kyungyeon/report6/Report6_2 b/src/kyungyeon/report6/Report6_2 new file mode 100644 index 0000000..127969b --- /dev/null +++ b/src/kyungyeon/report6/Report6_2 @@ -0,0 +1,8 @@ +6-9. 다음 중 this에 대한 설명으로 맞지 않은 것은? (모두 고르시오) +a. 객체 자신을 가리키는 참조변수이다. +b. 클래스 내에서라면 어디서든 사용할 수 있다. +c. 지역변수와 인스턴스변수를 구별할 때 사용한다. +d. 클래스 메서드 내에서는 사용할 수 없다. + + +b. 인스턴스 메서드 안에서만 가능하다. \ No newline at end of file diff --git a/src/kyungyeon/report6/Report6_3 b/src/kyungyeon/report6/Report6_3 new file mode 100644 index 0000000..b6f79b6 --- /dev/null +++ b/src/kyungyeon/report6/Report6_3 @@ -0,0 +1,9 @@ +6-10. 다음 중 오버로딩이 성립하기 위한 조건이 아닌 것은? (모두 고르시오) +a. 메서드의 이름이 같아야 한다. +b. 매개변수의 개수나 타입이 달라야 한다. +c. 리턴타입이 달라야 한다. +d. 매개변수의 이름이 달라야 한다. + + +c. 리턴타입은 오버로딩 조건이 아니다. +d. 이름은 상관없다. 타입과 갯수 \ No newline at end of file diff --git a/src/kyungyeon/report6/Report6_4 b/src/kyungyeon/report6/Report6_4 new file mode 100644 index 0000000..239f895 --- /dev/null +++ b/src/kyungyeon/report6/Report6_4 @@ -0,0 +1,12 @@ +6-11. 다음 중 아래의 add메서드를 올바르게 오버로딩 한 것은? (모두 고르시오) +> long add(int a, int b) { return a+b; } + +a. long add(int x, int y) { return x+y; } +b. long add(long a, long b) { return a+b; } +c. int add(byte a, byte b) { return a+b; } +d. int add(long a, int b) { return (int)(a+b); } + + +b, : 매개변수 타입 다름. +c, : 매개변수 타입 다름. +d : return에서 (int)처리 해줘서 반환 타입이 맞아서 된다. \ No newline at end of file diff --git a/src/kyungyeon/report6/Report6_5 b/src/kyungyeon/report6/Report6_5 new file mode 100644 index 0000000..a12a0d3 --- /dev/null +++ b/src/kyungyeon/report6/Report6_5 @@ -0,0 +1,10 @@ +6-12. 다음 중 초기화에 대한 설명으로 옳지 않은 것은? (모두 고르시오) +a. 멤버변수는 자동 초기화되므로 초기화하지 않고도 값을 참고할 수 있다. +b. 지역변수는 사용하기 전에 반드시 초기화해야 한다. +c. 초기화 블럭보다 생성자가 먼저 수행된다. +d. 명시적 초기화를 제일 우선적으로 고려해야 한다. +e. 클래스변수보다 인스턴스변수가 먼저 초기화된다. + +정답 : +c. 초기화 블럭이 먼저 수행된다. +e. 클래스 변수가 먼저다. diff --git a/src/kyungyeon/report6/Report6_6 b/src/kyungyeon/report6/Report6_6 new file mode 100644 index 0000000..de88c90 --- /dev/null +++ b/src/kyungyeon/report6/Report6_6 @@ -0,0 +1,7 @@ +6-13. 다음 중 인스턴스변수의 초기화 순서가 올바른 것은? +a. 기본값-명시적초기화-초기화블럭-생성자 +b. 기본값-명시적초기화-생성자-초기화블럭 +c. 기본값-초기화블럭-명시적초기화-생성자 +d. 기본값-초기화블럭-생성자-명시적초기화 + +정답 : a \ No newline at end of file diff --git a/src/kyungyeon/report6/Report6_7 b/src/kyungyeon/report6/Report6_7 new file mode 100644 index 0000000..134ae90 --- /dev/null +++ b/src/kyungyeon/report6/Report6_7 @@ -0,0 +1,9 @@ +6-14. 다음 중 지역변수에 대한 설명으로 옳지 않은 것은? (모두 고르시오) +a. 자동 초기화되므로 별도의 초기화가 필요없다. +b. 지역변수가 선언된 메서드가 종료되면 지역변수도 함께 소멸된다. +c. 메서드의 매개변수로 선언된 변수도 지역변수이다. +d. 클래스변수나 인스턴스변수보다 메모리 부담이 적다. +e. 힙(heap)영역에 생성되며 가비지 컬렉터에 의해 소멸된다. + +정답: a, e +지역변수는 stack 영역에 생성된다. \ No newline at end of file diff --git a/src/kyungyeon/report6/Report6_8 b/src/kyungyeon/report6/Report6_8 new file mode 100644 index 0000000..480a07b --- /dev/null +++ b/src/kyungyeon/report6/Report6_8 @@ -0,0 +1,9 @@ +6-15. 호출스택이 다음과 같은 상황일 때 옳지 않은 설명은? (모두 고르시오) +a. 제일 먼저 호출스택에 저장된 것은 main메서드이다. +b. println메서드를 제외한 나머지 메서드들은 모두 종료된 상태이다. +c. method2메서드를 호출한 것은 main메서드이다. +d. println메서드가 종료되면 method1메서드가 수행을 재개한다. +e. main-method2-method1-println의 순서로 호출되었다. +f. 현재 실행중인 메서드는 println뿐이다. + +정답 : b, 대기중이다. \ No newline at end of file diff --git a/src/kyungyeon/report6/Report6_9 b/src/kyungyeon/report6/Report6_9 new file mode 100644 index 0000000..c9541b9 --- /dev/null +++ b/src/kyungyeon/report6/Report6_9 @@ -0,0 +1,17 @@ +//6-16. 다음 코드의 실행 결과를 예측하여 적어주세요. +class Exercise6_16 { + public static void change(String str) { + str += "456"; + } + + public static void main(String[] args) { + String str = "ABC123"; + System.out.println(str); + change(str); + System.out.println("After change:" + str); + } +} + +ABC123 +After change:ABC123 +static 변수도 아니고, return을 통해 다른 변수에 저장하지도 않았다. diff --git a/src/kyungyeon/report7/Report7_1.java b/src/kyungyeon/report7/Report7_1.java new file mode 100644 index 0000000..dc37d26 --- /dev/null +++ b/src/kyungyeon/report7/Report7_1.java @@ -0,0 +1,33 @@ +package kyungyeon.report7; + +// 6-17. 다음과 같이 정의된 메서드를 작성하고 테스트하세요. +// 메서드명 : shuffle +// 기능 +// 주어진 배열에 담긴 값의 위치를 바꾸는 작업을 반복하여 뒤섞이게 한다. +// 처리한 배열을 반환한다. +// 반환타입 : int[] +// 매개변수 : int[] arr - 정수값이 담긴 배열 + +public class Report7_1 { + + static int[] shuffle(int[] arr) { + int[] result = arr.clone(); + + for (int i = 0; i < result.length; i++) { + int j = (int) (Math.random() * result.length); + int temp = result[0]; + result[0] = result[j]; + result[j] = temp; + } + + return result; + } + + public static void main(String[] args) { + int[] original = {1, 2, 3, 4, 5, 6, 7, 8, 9}; + System.out.println(java.util.Arrays.toString(original)); + + int[] result = shuffle(original); + System.out.println(java.util.Arrays.toString(result)); + } +} diff --git a/src/kyungyeon/report7/Report7_2.java b/src/kyungyeon/report7/Report7_2.java new file mode 100644 index 0000000..dd8b3f1 --- /dev/null +++ b/src/kyungyeon/report7/Report7_2.java @@ -0,0 +1,34 @@ +package kyungyeon.report7; + +//6-18. 다음과 같이 정의된 메서드를 작성하고 테스트하세요. +// 메서드명 : isNumber +// 기능 +// 주어진 문자열이 모두 숫자로만 이루어져있는지 확인한다. +// 모두 숫자로만 이루어져있으면 true를 반환하고, 그렇지 않으면 false를 반환한다. +// 만일 주어진 문자열이 null이거나 빈문자열 ""이라면 false를 반환한다. +// 반환타입 : boolean +// 매개변수 : String str - 검사할 문자열 +// (힌트) String클래스의 charAt(int i)메서드를 사용하면 문자열의 i번째 위치한 문자를 얻을 수 있다. + +public class Report7_2 { + /*isNumber 메서드를 작성하세요.*/ + + static boolean isNumber(String str) { + boolean result = true; + for (int i = 0; i < str.length(); i++) { + int number = str.charAt(i) - '0'; + if (number < 0 || number > 9) { + result = false; + break; + } + } + return result; + } + + public static void main(String[] args) { + String str = "123"; + System.out.println(str + " 는 숫자입니까? " + isNumber(str)); + str = "1234o"; + System.out.println(str + " 는 숫자입니까? " + isNumber(str)); + } +} diff --git a/src/kyungyeon/report7/Report7_3.java b/src/kyungyeon/report7/Report7_3.java new file mode 100644 index 0000000..a914d3a --- /dev/null +++ b/src/kyungyeon/report7/Report7_3.java @@ -0,0 +1,71 @@ +package kyungyeon.report7; + +// 6-19. Tv클래스를 주어진 로직대로 완성하세요. +// 완성한 후에 실행해서 주어진 실행결과와 일치하는지 확인하세요. + +class MyTv { + boolean isPowerOn; + int channel; + int volume; + final int MAX_VOLUME = 100; + final int MIN_VOLUME = 0; + final int MAX_CHANNEL = 100; + final int MIN_CHANNEL = 1; + + void turnOnOff() { + // (1) isPowerOn의 값이 true면 false로, false면 true로 바꾼다. + isPowerOn = !isPowerOn; + } + + void volumeUp() { + // (2) volume의 값이 MAX_VOLUME보다 작을 때만 값을 1 증가시킨다. + if (volume < MAX_VOLUME) { + volume += 1; + } + } + + void volumeDown() { + // (3) volume의 값이 MIN_VOLUME보다 클 때만 값을 1 감소시킨다. + if (volume > MIN_VOLUME) { + volume -= 1; + } + } + + void channelUp() { + // (4) channel의 값을 1 증가시킨다. + // 만일 channel이 MAX_CHANNEL이면 , channel의 값을 MIN_CHANNEL로 바꾼다. + if (channel != MAX_CHANNEL) { + channel += 1; + } else { + channel = MIN_CHANNEL; + } + } + + void channelDown() { + // (5) channel의 값을 1 감소시킨다 . + // 만일 channel이 MIN_CHANNEL이면, channel의 값을 MAX_CHANNEL로 바꾼다. + if (channel != MIN_CHANNEL) { + channel -= 1; + } else { + channel = MAX_CHANNEL; + } + } +} + +class Exercise6_19 { + public static void main(String args[]) { + MyTv t = new MyTv(); + t.channel = 100; + t.volume = 0; + System.out.println("CH:" + t.channel + ", VOL:" + t.volume); + t.channelDown(); + t.volumeDown(); + System.out.println("CH:" + t.channel + ", VOL:" + t.volume); + t.volume = 100; + t.channelUp(); + t.volumeUp(); + System.out.println("CH:" + t.channel + ", VOL:" + t.volume); + } +} + +//예상 결과 : CH: 100, VOL: 0 / CH: 99, VOL: 0 / CH: 100, VOL: 100 diff --git a/src/kyungyeon/report7/Report7_4.java b/src/kyungyeon/report7/Report7_4.java new file mode 100644 index 0000000..9e0501c --- /dev/null +++ b/src/kyungyeon/report7/Report7_4.java @@ -0,0 +1,37 @@ +package kyungyeon.report7; + +// 6-20. 다음과 같이 정의된 메서드를 작성하고 테스트하세요. +// 메서드명 : max +// 기능 +// 주어진 int형 배열의 값 중에서 제일 큰 값을 반환한다. +// 만일 주어진 배열이 null이거나 크기가 0인 경우, -999999를 반환한다. +// 반환타입 : int +// 매개변수 : int[] arr - 최대값을 구할 배열 + +class Exercise6_20 { + static int max(int[] arr) { + if (arr == null || arr.length == 0) { + return -999999; + } + + int result = arr[0]; + + for (int i : arr) { + if (result < i) { + result = i; + } + } + return result; + } + + public static void main(String[] args) { + int[] data = {3, 2, 9, 4, 7}; + System.out.println(java.util.Arrays.toString(data)); + System.out.println("최대값 :" + max(data)); + System.out.println("최대값 :" + max(null)); + System.out.println("최대값 :" + max(new int[]{})); // 크기가 0인 배열 } + } +} + +//예상 결과 : 최대값: 9 / 최대값: -99999 최대값: -999999 + diff --git a/src/kyungyeon/report7/Report7_5.java b/src/kyungyeon/report7/Report7_5.java new file mode 100644 index 0000000..5cebb81 --- /dev/null +++ b/src/kyungyeon/report7/Report7_5.java @@ -0,0 +1,22 @@ +package kyungyeon.report7; + +//6-21. 다음과 같이 정의된 메서드를 작성하고 테스트하시오. +// 메서드명: abs +// 기능 : 주어진 값의 절대값을 반환한다. +// 반환타입 : int +// 매개변수 : int value + +class Exercise6_21 { + /* (1) abs 메서드를 작성하시오. */ + static int abs(int value) { + return Math.abs(value); + } + + public static void main(String[] args) { + int value = 5; + System.out.println(value + "의 절대값 :" + abs(value)); + value = -10; + System.out.println(value + "의 절대값 :" + abs(value)); + } +} +//예상 결과 : 5의 절대값 : 5 / -10의 절대값 : 10 From 2d17373359cba458966ecd658a77f70874c30f70 Mon Sep 17 00:00:00 2001 From: bestfarmer94 Date: Wed, 25 Jan 2023 18:33:26 +0900 Subject: [PATCH 5/6] Report8 complete --- src/kyungyeon/report8/Report8_1.java | 97 ++++++++++++++++++++++++++++ src/kyungyeon/report8/Report8_3.java | 34 ++++++++++ src/kyungyeon/report8/Report8_4.java | 54 ++++++++++++++++ src/kyungyeon/report8/Report8_5.java | 70 ++++++++++++++++++++ 4 files changed, 255 insertions(+) create mode 100644 src/kyungyeon/report8/Report8_1.java create mode 100644 src/kyungyeon/report8/Report8_3.java create mode 100644 src/kyungyeon/report8/Report8_4.java create mode 100644 src/kyungyeon/report8/Report8_5.java diff --git a/src/kyungyeon/report8/Report8_1.java b/src/kyungyeon/report8/Report8_1.java new file mode 100644 index 0000000..b80c274 --- /dev/null +++ b/src/kyungyeon/report8/Report8_1.java @@ -0,0 +1,97 @@ +package kyungyeon.report8; + +// 7-1. +// 섯다카드 20장을 포함하는 섯다카드 한 벌(SutdaDeck클래스)을 정의한 것이다. +// 섯다카드 20장을 담는 SutdaCard배열을 초기화하시오. +// 단, 섯다카드는 1부터 10까지의 숫자 가 적힌 카드가 한 쌍씩 있고, 숫자가 1, 3, 8인 경우에는 둘 중의 한 장은 광(Kwang)이 어야 한다. +// 즉, SutdaCard의 인스턴스변수 isKwang의 값이 true이어야 한다. + +// 7-2. 연습문제 7-1. 의 SutdaDeck클래스에 다음에 정의된 새로운 메서드를 추가하고 테스트 하시오. + +import java.util.ArrayList; +import java.util.Arrays; + +class SutdaDeck { + final int CARD_NUM = 20; + SutdaCard[] cards = new SutdaCard[CARD_NUM]; + final ArrayList kwang = new ArrayList<>(Arrays.asList(1, 3, 8)); + + SutdaDeck() { + for (int i = 0; i < cards.length; i++) { + int num = i % 10 + 1; + boolean isKwang = false; + + if (kwang.contains(num) && i / 10 == 0) { + isKwang = true; + } + + cards[i] = new SutdaCard(num, isKwang); + } + } + + void shuffle() { + for (int i = 0; i < cards.length; i++) { + int num = (int) (Math.random() * cards.length); + SutdaCard temp = cards[0]; + cards[0] = cards[num]; + cards[num] = temp; + } + } + + SutdaCard pick(int index) { + return cards[index]; + } + + SutdaCard pick() { + int num = (int) (Math.random() * cards.length); + return cards[num]; + } +} + +class SutdaCard { + int num; + boolean isKwang; + + SutdaCard() { + this(1, true); + } + + SutdaCard(int num, boolean isKwang) { + this.num = num; + this.isKwang = isKwang; + } + + // info()대신 Object클래스의 toString()을 오버라이딩했다. + public String toString() { + return num + (isKwang ? "K" : ""); + } +} + +class Exercise7_1 { + public static void main(String args[]) { + SutdaDeck deck = new SutdaDeck(); + + System.out.println("7-1 정답."); + for (int i = 0; i < deck.cards.length; i++) + System.out.print(deck.cards[i] + ","); + + System.out.println(); + System.out.println("7-2 정답."); + + System.out.println(deck.pick(0)); + System.out.println(deck.pick()); + deck.shuffle(); + + for (int i = 0; i < deck.cards.length; i++) + System.out.print(deck.cards[i] + ","); + + System.out.println(); + System.out.println(deck.pick(0)); + } +} +// 예상결과) 1K,2,3K,4,5,6,7,8K,9,10,1,2,3,4,5,6,7,8,9,10, +//예상결과) +// 1K +// 7 +// 2,6,10,1K,7,3,10,5,7,8,5,1,2,9,6,9,4,8K,4,3K, +// 2 \ No newline at end of file diff --git a/src/kyungyeon/report8/Report8_3.java b/src/kyungyeon/report8/Report8_3.java new file mode 100644 index 0000000..58d56e0 --- /dev/null +++ b/src/kyungyeon/report8/Report8_3.java @@ -0,0 +1,34 @@ +package kyungyeon.report8; + +// 7-3. 다음의 코드는 컴파일하면 에러가 발생한다. +// 그 이유를 설명하고 에러를 수정하기 위해서는 코드를 어떻게 바꾸어야 하는가? + +class Product { + int price; // 제품의 가격 + int bonusPoint; // 제품구매 시 제공하는 보너스점수 + + Product(){ + // 컴파일러가 자동으로 생성자를 호출하는데, + // 기본생성자가 없어서 오류 발생. + } + + Product(int price) { + this.price = price; + bonusPoint = (int) (price / 10.0); + } +} + +class Tv extends Product { + Tv() { + } + + public String toString() { + return "Tv"; + } +} + +class Exercise7_3 { + public static void main(String[] args) { + Tv t = new Tv(); + } +} diff --git a/src/kyungyeon/report8/Report8_4.java b/src/kyungyeon/report8/Report8_4.java new file mode 100644 index 0000000..915f51b --- /dev/null +++ b/src/kyungyeon/report8/Report8_4.java @@ -0,0 +1,54 @@ +package kyungyeon.report8; + +// 7-4. MyTv클래스의 멤버변수 isPowerOn, channel, volume을 클래스 외부에서 접근할 수 없도록 제어자를 붙이고 +// 대신 이 멤버변수들의 값을 어디서나 읽고 변경할 수 있도록 getter와 setter메서드를 추가하라. + +// 7-5. 문제7-4에서 작성한 MyTv2클래스에 이전 채널(previous channel)로 이동하는 기능 의 메서드를 추가해서 +// 실행결과와 같은 결과를 얻도록 하시오. +// +// [Hint] 이전 채널의 값을 저장할 멤버변수를 정의하라. +// 메서드명 : gotoPrevChannel +// 기 능 : 현재 채널을 이전 채널로 변경한다. +// 반환타입 : 없음 +// 매개변수 : 없음 + +class MyTv { + private boolean isPowerOn; + private int channel; + private int volume; + + + final int MAX_VOLUME = 100; + final int MIN_VOLUME = 0; + final int MAX_CHANNEL = 100; + final int MIN_CHANNEL = 1; + + void setChannel(int num){ + this.channel = num; + } + + void setVolume(int num){ + this.volume = num; + } + + int getChannel(){ + return this.channel; + } + + int getVolume(){ + return this.volume; + } + +} + +class Exercise7_4 { + public static void main(String args[]) { + MyTv t = new MyTv(); + + t.setChannel(10); + System.out.println("CH:" + t.getChannel()); + t.setVolume(20); + System.out.println("VOL:" + t.getVolume()); + } +} +//예상결과) CH:10 VOL:20 diff --git a/src/kyungyeon/report8/Report8_5.java b/src/kyungyeon/report8/Report8_5.java new file mode 100644 index 0000000..01ce3a4 --- /dev/null +++ b/src/kyungyeon/report8/Report8_5.java @@ -0,0 +1,70 @@ +package kyungyeon.report8; + +// 7-5. 문제7-4에서 작성한 MyTv2클래스에 이전 채널(previous channel)로 이동하는 기능 의 메서드를 추가해서 +// 실행결과와 같은 결과를 얻도록 하시오. +// +// [Hint] 이전 채널의 값을 저장할 멤버변수를 정의하라. +// 메서드명 : gotoPrevChannel +// 기 능 : 현재 채널을 이전 채널로 변경한다. +// 반환타입 : 없음 +// 매개변수 : 없음 + +class MyTv2 { + private boolean isPowerOn; + private int channel; + private int volume; + private int prevChannel; + private int temp; + + final int MAX_VOLUME = 100; + final int MIN_VOLUME = 0; + final int MAX_CHANNEL = 100; + final int MIN_CHANNEL = 1; + + public void setVolume(int volume) { + if (volume > MAX_VOLUME || volume < MIN_VOLUME) + return; + this.volume = volume; + } + + public int getVolume() { + return volume; + } + + public void setChannel(int channel) { + if (channel > MAX_CHANNEL || channel < MIN_CHANNEL) + return; + + this.prevChannel = this.channel; + this.channel = channel; + } + + public int getChannel() { + return channel; + } + + public void gotoPrevChannel(){ + temp = channel; + channel = prevChannel; + prevChannel = temp; + } +} + +class Exercise7_5 { + public static void main(String args[]) { + MyTv2 t = new MyTv2(); + t.setChannel(10); + System.out.println("CH:" + t.getChannel()); + t.setChannel(20); + System.out.println("CH:" + t.getChannel()); + t.gotoPrevChannel(); + System.out.println("CH:" + t.getChannel()); + t.gotoPrevChannel(); + System.out.println("CH:" + t.getChannel()); + } +} + +// CH:10 +// CH:20 +// CH:10 +// CH:20 From 0002254f776ba93d1062ac7108714aaffd78e697 Mon Sep 17 00:00:00 2001 From: bestfarmer94 Date: Thu, 26 Jan 2023 13:34:33 +0900 Subject: [PATCH 6/6] Report9 complete MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OCP를 제대로 수행하지 못했습니다. 커멘트 부탁드리겠습니다. --- src/kyungyeon/report9/solid/dip/DIP.java | 94 ++++++++++++++++++ src/kyungyeon/report9/solid/isp/ISP.java | 117 +++++++++++++++++++++++ src/kyungyeon/report9/solid/lsp/LSP.java | 100 +++++++++++++++++++ src/kyungyeon/report9/solid/ocp/OCP.java | 101 +++++++++++++++++++ src/kyungyeon/report9/solid/srp/SRP.java | 88 +++++++++++++++++ 5 files changed, 500 insertions(+) create mode 100644 src/kyungyeon/report9/solid/dip/DIP.java create mode 100644 src/kyungyeon/report9/solid/isp/ISP.java create mode 100644 src/kyungyeon/report9/solid/lsp/LSP.java create mode 100644 src/kyungyeon/report9/solid/ocp/OCP.java create mode 100644 src/kyungyeon/report9/solid/srp/SRP.java diff --git a/src/kyungyeon/report9/solid/dip/DIP.java b/src/kyungyeon/report9/solid/dip/DIP.java new file mode 100644 index 0000000..b59c18a --- /dev/null +++ b/src/kyungyeon/report9/solid/dip/DIP.java @@ -0,0 +1,94 @@ +package kyungyeon.report9.solid.dip; + +// 계산기(고수준 모듈)가 개별 연산 클래스(저수준 모듈)을 포함하며, +// 계산 기능을 구현할 때 연산 클래스에 의존하고 있습니다. + +// 원칙 적용 방법 +// 고수준 모듈의 변화되는 부분을 추상화합니다. +// 저수준 모듈을 추상화에 의존시킵니다. +// 계산기 클래스에 추상화된 부모 클래스를 포함시킵니다. +// 연산 클래스는 추상화된 부모 클래스를 상속받아 기능별로 구현합니다. +// AbstractOperation : 추상 클래스 +// operate : 추상 메서드 + +class Calculator { + private AbstractOperation abstractOperation; + + public int calculate(String operator, int firstNumber, int secondNumber) { + if (operator.equals("+")) { + abstractOperation = new AddOperation(); + } else if (operator.equals("-")) { + abstractOperation = new SubstractOperation(); + } else if (operator.equals("*")) { + abstractOperation = new MultiplyOperation(); + } else if (operator.equals("/")) { + abstractOperation = new DivideOperation(); + } + + return abstractOperation.operate(firstNumber, secondNumber); + } +} + +class Client { + public static void main(String[] args) { + Calculator calculator = new Calculator(); + + int firNum = 140; + int secNum = 60; + + String operator = "+"; + int answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + + operator = "-"; + answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + + operator = "*"; + answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + + operator = "/"; + answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + } +} + +abstract class AbstractOperation { + public abstract int operate(int firstNumber, int secondNumber); +} + +class AddOperation extends AbstractOperation { + + @Override + public int operate(int firstNumber, int secondNumber) { + return firstNumber + secondNumber; + } +} + +class SubstractOperation extends AbstractOperation { + + @Override + public int operate(int firstNumber, int secondNumber) { + return firstNumber - secondNumber; + } +} + +class MultiplyOperation extends AbstractOperation { + + @Override + public int operate(int firstNumber, int secondNumber) { + return firstNumber * secondNumber; + } +} + +class DivideOperation extends AbstractOperation { + + @Override + public int operate(int firstNumber, int secondNumber) { + if (secondNumber == 0) { + return -999999; + } + return firstNumber / secondNumber; + } +} diff --git a/src/kyungyeon/report9/solid/isp/ISP.java b/src/kyungyeon/report9/solid/isp/ISP.java new file mode 100644 index 0000000..6c264ae --- /dev/null +++ b/src/kyungyeon/report9/solid/isp/ISP.java @@ -0,0 +1,117 @@ +package kyungyeon.report9.solid.isp; + +// 필요하지 않은 기능을 강제로 구현하고 있습니다. +// 사용하지 못하도록 예외처리를 구현하고 있습니다. + +// 원칙 적용 방법 +// 필요하지 않은 기능을 강제로 구현하지 않도록 인터페이스를 분리합니다. +// 연산 결과를 보여주는 방법마다 인터페이스를 구현합니다. +// DisplayResult : 인터페이스, 연산결과만 출력 +// displayResult : 추상 메서드 +// DisplayWithOperator : 인터페이스, 연산과정 포함 출력 +// displayResultWithOperator : 추상 메서드 + +class Calculator { + int calculate(AbstractOperation operation, int firstNumber, int secondNumber){ + return operation.operate(firstNumber, secondNumber); + } +} + +class Client { + public static void main(String[] args) throws Exception { + int firNum = 140; + int secNum = 60; + + // 연산 결과만 출력 + DisplayTypeA displayTypeA = new DisplayTypeA(); + displayTypeA.displayResult(new AddOperation(), firNum, secNum); + // displayTypeA.displayResultWithOperator(new AddOperation(), firNum, secNum); // Error 발생 + + // 연산 과정까지 출력 + DisplayTypeB displayTypeB = new DisplayTypeB(); + displayTypeB.displayResultWithOperator(new AddOperation(), firNum, secNum); + // displayTypeB.displayResult(new AddOperation(), firNum, secNum); // Error 발생 + } +} + +abstract class AbstractOperation { + abstract int operate(int firstNumber, int secondNumber); + abstract String getOperator(); +} + +interface DisplayResult { + abstract void displayResult(AbstractOperation operation, int firstNumber, int secondNumber) throws Exception; +} + +interface DisplayWithOperator { + abstract void displayResultWithOperator(AbstractOperation operation, int firstNumber, int secondNumber) throws Exception; +} + +// 연산 결과만 출력 +class DisplayTypeA extends Calculator implements DisplayResult { + + @Override + public void displayResult(AbstractOperation operation, int firstNumber, int secondNumber) { + int answer = operation.operate(firstNumber, secondNumber); + System.out.println(answer); + } +} + +// 연산 과정을 포함한 출력 +class DisplayTypeB extends Calculator implements DisplayWithOperator { + + @Override + public void displayResultWithOperator(AbstractOperation operation, int firstNumber, int secondNumber) { + int answer = operation.operate(firstNumber, secondNumber); + String operator = operation.getOperator(); + System.out.println(firstNumber + " " + operator + " " + secondNumber + " = " + answer); + } +} + +class AddOperation extends AbstractOperation { + @Override + int operate(int firstNumber, int secondNumber) { + return firstNumber + secondNumber; + } + + @Override + String getOperator() { + return "+"; + } +} + +class SubstractOperation extends AbstractOperation { + @Override + int operate(int firstNumber, int secondNumber) { + return firstNumber - secondNumber; + } + + @Override + String getOperator() { + return "-"; + } +} + +class MultiplyOperation extends AbstractOperation { + @Override + int operate(int firstNumber, int secondNumber) { + return firstNumber * secondNumber; + } + + @Override + String getOperator() { + return "*"; + } +} + +class DivideOperation extends AbstractOperation { + @Override + int operate(int firstNumber, int secondNumber) { + return firstNumber / secondNumber; + } + + @Override + String getOperator() { + return "/"; + } +} \ No newline at end of file diff --git a/src/kyungyeon/report9/solid/lsp/LSP.java b/src/kyungyeon/report9/solid/lsp/LSP.java new file mode 100644 index 0000000..7c54f58 --- /dev/null +++ b/src/kyungyeon/report9/solid/lsp/LSP.java @@ -0,0 +1,100 @@ +package kyungyeon.report9.solid.lsp; + +// 추가적인 기능이 필요한 자식 클래스가 존재하기 때문에 타입 확인을 진행하고 있습니다. +// 따라서 자식 클래스의 인스턴스가 부모클래스의 인스턴스 역할을 수행하는데 문제가 없다고 할 수 없습니다. +// +// 원칙 적용 방법 +// 부모 와 자식 클래스 사이의 행위가 일관성이 있도록 추상화를 좀 더 정교하게 구현합니다. +// 연산 기능을 추상화한 부모 클래스에 피연산자 값의 유효성 검사를 진행하는 메서드를 추가해 줍니다. +// 계산기 클래스에서는 이 메서드를 사용하여 유효성 검사를 진행하고, +// 이 유효성 검사가 필요한 자식 클래스에서는 이 추가된 유효성 검사 조건을 구체화 합니다. +// isInvalid : 추상 메서드 + +class Calculator { + // 연산 기능을 추상화된 부모클래스에 의존하여 처리한다. + int calculate(AbstractOperation operation, int firstNumber, int secondNumber) { + return operation.operate(firstNumber, secondNumber); + } +} + +class Client { + public static void main(String[] args) { + + Calculator calculator = new Calculator(); + + int firNum = 140; + int secNum = 60; + + int answer = calculator.calculate(new AddOperation(), firNum, secNum); + System.out.println(" + answer = " + answer); + + answer = calculator.calculate(new SubstractOperation(), firNum, secNum); + System.out.println(" - answer = " + answer); + + answer = calculator.calculate(new MultiplyOperation(), firNum, secNum); + System.out.println(" * answer = " + answer); + + answer = calculator.calculate(new DivideOperation(), firNum, secNum); + System.out.println(" / answer = " + answer); + } +} + +abstract class AbstractOperation { + abstract int operate(int firstNumber, int secondNumber); + + abstract boolean isInvalid(int secondNumber); +} + +class AddOperation extends AbstractOperation { + @Override + int operate(int firstNumber, int secondNumber) { + return firstNumber + secondNumber; + } + + @Override + boolean isInvalid(int secondNumber) { + return false; + } +} + +class SubstractOperation extends AbstractOperation { + @Override + int operate(int firstNumber, int secondNumber) { + return firstNumber - secondNumber; + } + + @Override + boolean isInvalid(int secondNumber) { + return false; + } +} + +class MultiplyOperation extends AbstractOperation { + @Override + int operate(int firstNumber, int secondNumber) { + return firstNumber * secondNumber; + } + + @Override + boolean isInvalid(int secondNumber) { + return false; + } +} + +class DivideOperation extends AbstractOperation { + @Override + int operate(int firstNumber, int secondNumber) { + if (isInvalid(secondNumber)) { + return -999999; + } + return firstNumber / secondNumber; + } + + @Override + boolean isInvalid(int secondNumber) { + if (secondNumber == 0) { + return true; + } + return false; + } +} \ No newline at end of file diff --git a/src/kyungyeon/report9/solid/ocp/OCP.java b/src/kyungyeon/report9/solid/ocp/OCP.java new file mode 100644 index 0000000..cb6f457 --- /dev/null +++ b/src/kyungyeon/report9/solid/ocp/OCP.java @@ -0,0 +1,101 @@ +package kyungyeon.report9.solid.ocp; + +// 연산자를 추가하려고 할 때 코드의 변화가 너무 많이 일어납니다. +// if else 조건문 블록이 존재하며 연산자 추가 시 코드변화가 빈번하게 일어납니다. + +// 원칙 적용 방법 +// 변화되는 부분을 추상화해서 변화를 고정 시킵니다. +// 기능이 추가될 때 클래스의 상속을 통해서 하위 클래스에서 기능을 구현 하도록 합니다. +// 기존코드를 수정하지 않아도 객체 상속의 다형성 원리에 의해 기능이 확장 되도록 합니다. +// 연산 클래스는 추상화된 부모 클래스를 상속받아 기능별로 구현합니다. +// AbstractOperation : 추상 클래스 +// operate : 추상 메서드 + + +//--------------------------------------------------------------------------------------- +// 솔직히 이 문제는 어떻게 풀어야 할지 잘 모르겠습니다. +// if else문이 빠질 수 있는 방법을 모르겠습니다. +// 고객이 무슨 연산을 원하는지 알 수 없기 때문에 뺄 수는 없을 것이라 생각하는데, +// Calculator에서 빼는 것이 목적이라면, 그 if-else문을 Client class에 넣는 것이 저에게는 최선이었습니다. + +class Calculator { + private AbstractOperation abstractOperation; + + public int calculate(String operator, int firstNumber, int secondNumber) { + if (operator.equals("+")) { + abstractOperation = new AddOperation(); + } else if (operator.equals("-")) { + abstractOperation = new SubstractOperation(); + } else if (operator.equals("*")) { + abstractOperation = new MultiplyOperation(); + } else if (operator.equals("/")) { + abstractOperation = new DivideOperation(); + } + + return abstractOperation.operate(firstNumber, secondNumber); + } +} + +class Client { + public static void main(String[] args) { + Calculator calculator = new Calculator(); + + int firNum = 140; + int secNum = 60; + + String operator = "+"; + int answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + + operator = "-"; + answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + + operator = "*"; + answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + + operator = "/"; + answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + } +} + +abstract class AbstractOperation { + public abstract int operate(int firstNumber, int secondNumber); +} + +class AddOperation extends AbstractOperation { + + @Override + public int operate(int firstNumber, int secondNumber) { + return firstNumber + secondNumber; + } +} + +class SubstractOperation extends AbstractOperation { + + @Override + public int operate(int firstNumber, int secondNumber) { + return firstNumber - secondNumber; + } +} + +class MultiplyOperation extends AbstractOperation { + + @Override + public int operate(int firstNumber, int secondNumber) { + return firstNumber * secondNumber; + } +} + +class DivideOperation extends AbstractOperation { + + @Override + public int operate(int firstNumber, int secondNumber) { + if (secondNumber == 0) { + return -999999; + } + return firstNumber / secondNumber; + } +} \ No newline at end of file diff --git a/src/kyungyeon/report9/solid/srp/SRP.java b/src/kyungyeon/report9/solid/srp/SRP.java new file mode 100644 index 0000000..58bbf9d --- /dev/null +++ b/src/kyungyeon/report9/solid/srp/SRP.java @@ -0,0 +1,88 @@ +package kyungyeon.report9.solid.srp; + +// 원칙 적용 방법 +// 더하기, 빼기, 곱하기, 나누기 연산을 기능별로 연산 클래스를 구현합니다. +// 계산기 클래스는 계산을 진행할 때 연산 클래스들을 이용합니다. +// AddOperation : + +// operate : 메서드 +// SubstractOperation : - +// operate : 메서드 +// MultiplyOperation : * +// operate : 메서드 +// DivideOperation : / +// operate : 메서드 + +class Calculator { + + public int calculate(String operator, int firstNumber, int secondNumber) { + switch (operator) { + case "+": + AddOperation add = new AddOperation(); + return add.operate(firstNumber, secondNumber); + case "-": + SubstractOperation sub = new SubstractOperation(); + return sub.operate(firstNumber, secondNumber); + case "*": + MultiplyOperation multi = new MultiplyOperation(); + return multi.operate(firstNumber, secondNumber); + case "/": + DivideOperation divide = new DivideOperation(); + return divide.operate(firstNumber, secondNumber); + default: + return -999999; + } + } +} + +class AddOperation { + public int operate(int firstNumber, int secondNumber) { + return firstNumber + secondNumber; + } +} + +class SubstractOperation { + public int operate(int firstNumber, int secondNumber) { + return firstNumber - secondNumber; + } +} + +class MultiplyOperation { + public int operate(int firstNumber, int secondNumber) { + return firstNumber * secondNumber; + } +} + +class DivideOperation { + public int operate(int firstNumber, int secondNumber) { + if(secondNumber == 0){ + return -999999; + } + return firstNumber / secondNumber; + } +} + + +class Client { + public static void main(String[] args) { + Calculator calculator = new Calculator(); + + int firNum = 140; + int secNum = 60; + + String operator = "+"; + int answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + + operator = "-"; + answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + + operator = "*"; + answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + + operator = "/"; + answer = calculator.calculate(operator, firNum, secNum); + System.out.println(operator + " answer = " + answer); + } +}