명품 자바 프로그래밍 2장 110~112쪽 연습문제 실습문제_정답
luxury java programming ch2 p110~112 exercise practice correct answer
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
|
import java.util.Scanner;
public class Ch2_1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 변수 및 상수 선언
final double rate = 1100.0;
int won = 0;
double dollar = 0;
// 1. 원화 입력
System.out.print("원화를 입력하세요(단위 원)>>");
won = scanner.nextInt();
// 2. 달러화 연산
dollar = won/rate;
// 3. 결과 출력
System.out.println(won + "원은 $"+ dollar +"입니다.");
scanner.close();
}
}
|
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
25
26
27
28
29
30
|
import java.util.Scanner;
public class Ch2_2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 변수 및 상수 선언
int number, ten, one;
String result = "";
// 로직
// 1. 정수 입력
System.out.print("2자리 정수 입력(10~99)>>");
number = scanner.nextInt();
// 2. 십의 자리, 일의 자리 같은지 판별
ten = number / 10;
one = number % 10;
if(ten == one)
result = "Yes! 10의 자리와 1의 자리가 같습니다.";
else
result = "No! 10의 자리와 1의 자리가 다릅니다.";
// 3. 결과 출력
System.out.println(result);
scanner.close();
}
}
|
cs |
// 두 자리 정수의 십의 자리 수와 일의 자리 수 추출은 나누기, 나머지 연산자를 이용하여 할 수 있다.
3번
답:
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
|
import java.util.Scanner;
public class Ch2_3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 변수 및 상수 선언
int money;
int manwon5, manwon1, cheonwon1, baekwon5, baekwon1, sibwon5, sibwon1, won1;
// 로직
// 1. 돈 입력
System.out.print("금액을 입력하시오>>");
money = scanner.nextInt();
// 2. 지폐 단위별 개수 변환
manwon5 = money / 50000;
money = money % 50000;
manwon1 = money / 10000;
money = money % 10000;
cheonwon1 = money / 1000;
money = money % 1000;
baekwon5 = money / 500;
money = money % 500;
baekwon1 = money / 100;
money = money % 100;
sibwon5 = money / 50;
money = money % 50;
sibwon1 = money / 10;
money = money % 10;
won1 = money / 1;
// 3. 결과 출력
if (manwon5 != 0) {
System.out.println("오만원권 " + manwon5 + "매");
}
if (manwon1 != 0) {
System.out.println("만원권 " + manwon1 + "매");
}
if (cheonwon1 != 0) {
System.out.println("천원권 " + cheonwon1 + "매");
}
if (baekwon5 != 0) {
System.out.println("오백원 " + baekwon5 + "개");
}
if (baekwon1 != 0) {
System.out.println("백원 " + baekwon1 + "개");
}
if (sibwon5 != 0) {
System.out.println("오십원 " + sibwon5 + "개");
}
if (sibwon1 != 0) {
System.out.println("십원 " + sibwon1 + "개");
}
if (won1 != 0) {
System.out.println("일원 " + won1 + "개");
}
scanner.close();
}
}
|
cs |
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
35
36
37
|
import java.util.Scanner; // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
public class Ch2_4 { // Ch2_4 클래스 정의 시작
public static void main(String[] args) { // main() 메소드 정의 시작
Scanner scanner = new Scanner(System.in); // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
// 변수 및 상수 선언
int a, b, c; // int형 변수 a, b, c 선언, 정수 3개
int median; // int형 변수 median 선언, 중간값
// 로직
// 1. 정수 3개 입력
System.out.print("정수 3개 입력>>"); // System.out.print() 메소드 호출하여 문자열 "정수 3개 입력>>" 출력, 정수 3개 입력 안내 메세지 출력
a = scanner.nextInt(); // 변수 a에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 리턴 받아 대입하여 초기화, 사용자가 입력한 정수
b = scanner.nextInt(); // 변수 b에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 리턴 받아 대입하여 초기화, 사용자가 입력한 정수
c = scanner.nextInt(); // 변수 c에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 리턴 받아 대입하여 초기화, 사용자가 입력한 정수
// 2. 중간값 판별
// a가 중간값인 경우
if (((b <= a) && (a <= c)) || ((c <= a) && (a <= b))) { // 만약 b가 a보다 작거나 같고 a가 c보다 작거나 같거나, c가 a보다 작거나 같고 a가 b보다 작거나 같으면
median = a; // median에 a 대입하여 초기화, 중간값은 a
}
// b가 중간값인 경우
else if (((a <= b) && (b <= c)) || ((c <= b) && (b <= a))) { // 그렇지 않고 만약 a가 b보다 작거나 같고 b가 c보다 작거나 같거나, c가 b보다 작거나 같고 b가 a보다 작거나 같으면
median = b; // median에 b 대입하여 초기화, 중간값은 b
}
// c가 중간값인 경우
else { // 그렇지 않으면
median = c; // median에 c 대입하여 초기화, 중간값은 c
}
// 3. 결과 출력
System.out.println("중간값은 " + median); // System.out.println() 메소드 호출하여 문자열 "중간값은 " + median 출력, 중간값 출력 안내 메세지 출력
scanner.close(); // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
} // main() 메소드 정의 끝
} // Ch2_4 클래스 정의 끝
|
cs |
// 평균 값 찾아내기는 순열이므로 총 6가지, 중간 값은 3가지의 경우가 있다.
// a이 중간 값인 경우는 총 2가지이다. b <= a <= c 인 경우와 c <= a <= b인 경우가 있다.
// b이 중간 값인 경우는 총 2가지이다. a <= b <= c 인 경우와 c <= b <= a 인 경우가 있다.
// c이 중간 값인 경우는 총 2가지이다. a <= c <= b 인 경우와 b <= c <= a 인 경우가 있다.
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
|
import java.util.Scanner; // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
public class Ch2_5 { // Ch2_5 클래스 정의 시작
public static void main(String[] args) { // main() 메소드 정의 시작
Scanner scanner = new Scanner(System.in); // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
// 변수 및 상수 선언
int a, b, c; // int형 변수 a, b, c 선언, 삼각형의 세 변의 길이
boolean isTriangle = false; // boolean형 변수 isTriangle 선언 동시에 false 대입하여 초기화, 삼각형 가능 여부
// 로직
// 1. 세 변의 길이 입력
System.out.print("정수 3개를 입력하시오>>"); // System.out.print() 메소드 호출하여 문자열 "정수 3개를 입력하시오>>" 출력, 정수 3개 입력 안내 메세지 출력
a = scanner.nextInt(); // 변수 a에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 삼각형의 한 변의 길이
b = scanner.nextInt(); // 변수 b에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 삼각형의 한 변의 길이
c = scanner.nextInt(); // 변수 c에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 삼각형의 한 변의 길이
// 2. 삼각형 여부 판별
if((a + b > c) || (a + c > b) || (b + c > a)) { // a + b가 c보다 크거나 a + c가 b보다 크거나 b + c가 a보다 크면
isTriangle = true; // 변수 isTriangle에 true 대입
}
// 3. 판별 결과 출력
System.out.println("삼각형이 " + (isTriangle? "됩니다.": "되지 못합니다.")); // System.out.println() 메소드 호출하여 문자열 "삼각형이 " + (isTriangle? "됩니다.": "되지 못합니다.") 출력, 삼각형 판별 결과 출력
scanner.close(); // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
} // main() 메소드 정의 끝
} // Ch2_5 클래스 정의 끝
|
cs |
// 삼각형이 되려면 두 변의 합이 다른 한 변의 길이 보다 커야 한다.
// 두 변의 합은 조합이므로 총 3가지 경우의 수가 있다.
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
|
import java.util.Scanner; // 다른 패키지 클래스 사용하기위해 컴파일러에게 경로명 알려줌
public class Ch2_6 { // Ch2_6 클래스 정의 시작
public static void main(String[] args) { // main() 메소드 정의 시작
Scanner scanner = new Scanner(System.in); // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
// 변수 및 상수 선언
int number, ten, one, count = 0; // int형 변수 number, ten, one, count 선언 동시에 count에 0 대입하여 초기화, 사용자가 입력한 정수, 십의 자리 수, 일의 자리 수, 3, 6, 9 개수
String result = ""; // String형 변수 result 선언 동시에 빈 문자열 "" 대입하여 초기화, 결과
// 로직
// 1. 정수 입력
System.out.print("1~99 사이의 정수를 입력하시오>>"); // System.out.print() 메소드 호출하여 문자열 "1~99 사이의 정수를 입력하시오>>" 출력, 입력 안내 메세지 출력
number = scanner.nextInt(); // 변수 number에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 사용자로 부터 정수 입력
// 2. 십의 자리 수 및 일의 자리 수 추출
ten = number / 10; // 변수 ten에 number / 10 연산 결과 리턴 받아 대입하여 초기화, 십의 자리 수 추출
one = number % 10; // 변수 one에 number % 10 연산 결과 리턴 받아 대입하여 초기화, 일의 자리 수 추출
// 3. 3, 6, 9 개수 세기
if((ten == 3) || (ten == 6) || (ten == 9)) { // 만약 ten에 저장된 값이 3 또는 6 또는 9면, 즉 십의 자리 수가 3 또는 6 또는 9면
count++; // count에 +1, 즉 3, 6, 9 개수 +1
}
if((one == 3) || (one == 6) || (one == 9)) { // 만약 one에 저장된 값이 3 또는 6 또는 9면, 즉 일의 자리 수가 3 또는 6 또는 9면
count++; // count에 +1, 즉 3, 6, 9 개수 +1
}
// 4. 결과 출력
if (count == 1) { // 만약 count에 저장된 값이 1이면, 즉 3, 6, 9 개수가 1개이면
result = "박수짝"; // result에 문자열 "박수짝" 대입
} else if (count == 2) { // 그렇지 않고 만약 count에 저장된 값이 2이면, 즉 3, 6, 9 개수가 2개이면
result = "박수짝짝"; // result에 문자열 "박수짝짝" 대입
}
System.out.println(result); // System.out.println() 메소드 호출하여 result에 저장된 값 출력, 즉 판별 결과 출력
scanner.close(); // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
} // main() 메소드 정의 끝
} // Ch2_6 클래스 정의 끝
|
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
|
import java.util.Scanner; // 다른 패키지의 클래스를 사용하기위해 컴파일러에게 경로명 알려줌
public class Ch2_7 { // Ch2_7 클래스 정의 시작
public static void main(String[] args) { // main() 메소드 정의 시작
Scanner scanner = new Scanner(System.in); // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
// 변수 및 상수 선언
int x1 = 100, y1 = 100, x2 = 200, y2 = 200; // int형 변수 x1, y1, x2, y2 선언 동시에 100, 100, 200, 200 대입하여 초기화, 직사각형의 두 모서리 점 좌표
int x, y; // int형 변수 x, y 선언, 사용자가 입력한 점의 좌표
boolean isIn = false; // boolean형 변수 isIn 선언, 직사각형 내외부 여부
// 로직
// 1. 판별할 점 좌표 입력
System.out.print("점 (x,y)의 좌표를 입력하시오>>"); // System.out.print() 메소드 호출하여 문자열 "점 (x,y)의 좌표를 입력하시오>>" 출력, 점 좌표 입력 안내 메세지 출력
x = scanner.nextInt(); // 변수 x에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, x 좌표 입력
y = scanner.nextInt(); // 변수 y에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, y 좌표 입력
// 2. 내외부 여부 판별
if ((x1 <= x && x <= x2) && (y1 <= y && y <= y2)) { // 만약 x에 저장된 값이 x1보다 크고 x2보다 작고, y에 저장된 값이 y1보다 크고 y2보다 작으면, 즉 사용자가 입력한 점의 x,y 좌표가 직사각형 내부에 있으면
isIn = true; // isIn에 true 대입, 즉 사용자가 입력한 점은 직사각형 내부에 있다고 판별
}
// 3. 판별 결과 출력
System.out.println("(" + x + "," + y + ")은 사각형 " + (isIn ? "안":"밖") + "에 있습니다."); // System.out.println() 메소드 호출하여 문자열 "(" + x + "," + y + ")은 사각형 " + (isIn ? "안":"밖") + "에 있습니다." 출력, 즉 직사각형 내외부 판별 결과 출력
scanner.close(); // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
} // main() 메소드 정의 끝
} // Ch2_7 클래스 정의 끝
|
cs |
// 점이 직사각형 안에 있다면, 점의 x좌표와 y좌표가 모두 직사각형의 범위 안에 있어야 한다. 그러므로 if문의 조건식에 && and 연산자를 사용하였다.
// x 좌표만 범위 안에 있고, y좌표는 범위 밖에 있는 경우
// 즉, x 좌표나 y좌표 둘 중 하나만 직사각형의 범위 안에 있는 경우는 점이 직사각형의 밖에 있을 수도 있기 때문이다.
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
|
import java.util.Scanner;
public class Ch2_8 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 변수 및 상수 선언
int x1, y1, x2, y2; // 사용자로부터 입력 받은 사각형의 두 점의 좌표
int rectangleX1 = 100, rectangleY1 = 100, rectangleX2 = 200, rectangleY2 = 200; // 충돌 판단할 직사각형의 두 점의 좌표
boolean isConflicted;
// 로직
// 1. 충돌 판단할 직사각형의 두 점 좌표 입력
System.out.print("점 (x1, y1), (x2, y2)를 입력하시오>> ");
x1 = sc.nextInt();
y1 = sc.nextInt();
x2 = sc.nextInt();
y2 = sc.nextInt();
// 2. 충돌 판단
// 입력 받은 사각형의 두 점의
// 1. x좌표가 모두 사각형의 왼쪽에 있거나 2. 오른쪽에 있거나 3. y좌표가 모두 사각형의 아래쪽에 있거나 4. 위쪽에 있거나
if((x1 < rectangleX1 && x2 < rectangleX1) || (x1 > rectangleX2 && x2 > rectangleX2) || (y1 < rectangleY1 && y2 < rectangleY1) || (y1 > rectangleY2 && y2 > rectangleY2))
isConflicted = false;
else
isConflicted = true;
// 3. 결과 출력
System.out.println(isConflicted ? "충돌합니다." : "충돌 하지 않습니다.");
sc.close();
}
}
|
cs |
// 컴퓨터에서의 좌표평면은 수학에서 사용하는 좌표평면과 같이 오른쪽으로 가면 x가 커지고, 위쪽으로 가면 y가 커지는 것이 아니라, 오른쪽으로 가면 x가 커지고, 아래쪽으로 가야 y가 커진다.
// 두 사각형이 충돌하지 않으려면, 단순히 두 점이 사각형 외부에 있는 것으로 판단하면 안된다.
// 아래와 같이 두 점이 사각형 (100, 100) (200, 200) 의 외부에 있어도 충돌하는 경우가 발생할 수 있다.
// 그러므로 아래와 같은 경우에는 두 사각형이 충돌하지 않는다로 판단할 수 있다.
// 입력 받은 사각형의 두 점의
// 1. x좌표가 모두 사각형의 왼쪽에 있거나 2. 오른쪽에 있거나
// 3. y좌표가 모두 사각형의 아래쪽에 있거나 4. 위쪽에 있거나
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
|
import java.util.Scanner; // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
public class Ch2_9 { // Ch2_9 클래스 정의 시작
public static void main(String[] args) { // main() 메소드 정의 시작
Scanner scanner = new Scanner(System.in); // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
// 변수 및 상수 선언
double ox, oy, radius; // double형 변수 ox, oy, radius 선언, 원의 중심의 x, y 좌표 및 반지름
double x, y; // double형 변수 x, y 선언, 내외부 판별할 점의 x, y 좌표
double distance; // double형 변수 distance 선언, 원의 중심과 판별한 점 사이의 거리의 제곱
boolean isIn; // boolean형 변수 isIn 선언, 원 내외부 판별 여부
// 로직
// 1. 원의 중심 좌표 및 반지름 입력
System.out.print("원의 중심과 반지름 입력>>"); // System.out.print() 메소드 호출하여 문자열 "원의 중심과 반지름 입력>>" 출력, 원의 중심과 반지름 입력 안내 메세지 출력
ox = scanner.nextDouble(); // 변수 ox에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 원 중심의 x 좌표
oy = scanner.nextDouble(); // 변수 oy에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 원 중심의 y 좌표
radius = scanner.nextDouble(); // 변수 radius에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 원의 반지름
// 2. 한 점의 좌표 입력
System.out.print("점 입력>>"); // System.out.print() 메소드 호출하여 문자열 "점 입력>>" 출력, 점 입력 안내 메세지 출력
x = scanner.nextDouble(); // 변수 x에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, x 좌표
y = scanner.nextDouble(); // 변수 y에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, y 좌표
// 3. 두 점 사이의 거리의 제곱 계산
distance = Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y)); // 변수 distance에 Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y)) 연산 결과 리턴 받아 대입하여 초기화, 원의 중심과 한 점 사이의 거리의
// 4. 점 내외부 판별
if(distance <= radius) { // 만약 distance에 저장된 값이 radius 보다 작거나 같으면, 즉 원의 중심과 한 점 사이의 거리가 원의 반지름보다 작거나 같으면
isIn = true; // isIn에 true 대입, 즉 점은 원 내부에 있다
}
else {
isIn = false;
}
// 5. 판별 결과 출력
System.out.println("점 (" + x + ", " + y + ")는 원 " + (isIn?"안":"밖") + "에 있다."); // System.out.println() 메소드 호출하여 문자열 "점 (" + x + ", " + y + ")는 원 " + (isIn?"안":"밖") + "에 있다." 출력, 즉 내외부 판별 결과 출력
scanner.close(); // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
} // main() 메소드 정의 끝
} // Ch2_9 클래스 정의 끝
|
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
|
import java.util.Scanner; // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
public class Ch2_10 { // Ch2_10 클래스 정의 시작
public static void main(String[] args) { // main() 메소드 정의 시작
Scanner scanner = new Scanner(System.in); // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
// 변수 및 상수 선언
int ox1, oy1, radius1, ox2, oy2, radius2; // int형 변수 ox1, oy1, radius1, ox2, oy2, radius2 선언, 즉 원 2개의 중심의 x, y 좌표, 반지름
double distance; // int형 변수 distance 선언, 즉 두 원의 중심 사이의 거리
boolean isOverlap; // boolean형 변수 isOverlap 선언 동시에 false 대입하여 초기화, 즉 두 원의 겹침 여부
// 로직
// 1. 첫번째 원 입력
System.out.print("첫번째 원의 중심과 반지름 입력>>"); // System.out.print() 메소드 호출하여 문자열 "첫번째 원의 중심과 반지름 입력>>" 출력, 첫번째 원의 중심과 반지름 입력 안내 메세지 출력
ox1 = scanner.nextInt(); // 변수 ox1에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 첫번째 원 중심의 x 좌표
oy1 = scanner.nextInt(); // 변수 oy1에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 첫번째 원 중심의 y 좌표
radius1 = scanner.nextInt(); // 변수 radius1에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 첫번째 원의 반지름
// 2. 두번째 원 입력
System.out.print("두번째 원의 중심과 반지름 입력>>"); // System.out.print() 메소드 호출하여 문자열 "두번째 원의 중심과 반지름 입력>>" 출력, 두번째 원의 중심과 반지름 입력 안내 메세지 출력
ox2 = scanner.nextInt(); // 변수 ox2에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 두번째 원 중심의 x 좌표
oy2 = scanner.nextInt(); // 변수 oy2에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 두번째 원 중심의 y 좌표
radius2 = scanner.nextInt(); // 변수 radius2에 scanner 객체의 nextInt() 메소드 호출하여 사용자로부터 입력 받은 값 int형으로 리턴 받아 대입하여 초기화, 두번째 원의 반지름
// 3. 두 원의 중심 사이의 거리 계산
distance = Math.sqrt((ox1 - ox2) * (ox1 - ox2) + (oy1 - oy2) * (oy1 - oy2)); // distance에 Math.sqrt((ox1 - ox2) * (ox1 - ox2) + (oy1 - oy2) * (oy1 - oy2))에 연산 결과 리턴 받아 대입하여 초기화, 두 원의 중심 사이의 거리
// 4. 겹치는지 판별
if (distance < radius1 + radius2) { // 만약 distance에 저장된 값이 radius1 + radius2 보다 작거나 같으면, 즉 두 원의 중심 사이의 거리가 두 원의 반지름의 합보다 작으면
isOverlap = true; // isOverlap에 true 대입, 즉 두 원은 서로 겹침
}
else {
isOverlap = false; // isOverlap에 false 대입, 즉 두 원은 서로 겹침
}
// 5. 결과 출력
System.out.println("두 원은 서로 " + (isOverlap ? "겹친다.":"겹치지 않는다.")); // System.out.println() 메소드 호출하여 문자열 "두 원은 서로 " + (isOverlap ? "겹친다.":"겹치지 않는다.") 출력, 즉 두 원 겹침 판별 여부 결과 출력
scanner.close(); // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
} // main() 메소드 정의 끝
} // Ch2_10 클래스 정의 끝
|
cs |
// 두 원의 중심 사이의 거리가 두 원의 반지름의 합보다 작으면 두 원은 서로 겹친다.
11번
(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
|
import java.util.Scanner;
public class Ch2_11_1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 변수 및 상수 선언
int month;
String season;
// 1. 달 입력
System.out.print("달을 입력하세요(1~12)>>");
month = sc.nextInt();
// 2. 계절 판단
if(month == 3 || month == 4 || month == 5) {
season = "봄";
}
else if(month == 6 || month == 7 || month == 8) {
season = "여름";
}
else if(month == 9 || month == 10 || month == 11) {
season = "가을";
}
else if(month == 12 || month == 1 || month == 2) {
season = "겨울";
}
else {
season = "잘못입력";
}
// 3. 출력
System.out.println(season);
sc.close();
}
}
|
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import java.util.Scanner;
public class Ch2_11_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 변수 및 상수 선언
int month;
String season;
// 1. 입력
System.out.print("달을 입력하세요(1~12)>>");
month = sc.nextInt();
// 2. 계절 판단
switch(month) {
case 3:
case 4:
case 5:
season = "봄";
break;
case 6:
case 7:
case 8:
season = "여름";
break;
case 9:
case 10:
case 11:
season = "가을";
break;
case 12:
case 1:
case 2:
season = "겨울";
break;
default:
season = "잘못입력";
}
// 3. 출력
System.out.println(season);
sc.close();
}
}
|
cs |
12번
(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
39
40
41
42
43
44
45
46
47
|
import java.util.Scanner; // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
public class Ch2_12_1 { // Ch2_12_1 클래스 정의 시작
public static void main(String[] args) { // main() 메소드 정의 시작
Scanner scanner = new Scanner(System.in); // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
// 변수 및 상수 선언
double number1, number2, result; // double형 변수 number1, number2, result 선언, 즉 피연산자 2개와 결과값
String operator; // String형 변수 operator 선언
// 로직
// 1. 연산 입력
System.out.print("연산>>"); // System.out.print() 메소드 호출하여 문자열 "연산>>" 출력, 연산 입력 안내 메세지 출력
number1 = scanner.nextDouble(); // 변수 number1에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 피연산자 입력
operator = scanner.next(); // 변수 operator에 scanner 객체의 next() 메소드 호출하여 사용자로부터 입력 받은 값 String형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 연산자 입력
number2 = scanner.nextDouble(); // 변수 number2에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 피연산자 입력
// 2. 연산 종류 판별 및 계산
if(operator.equals("+") == true) { // 변수 operator에 저장된 값이 equals() 메소드 호출하여 문자열 "+"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 +이면
result = number1 + number2; // 변수 result에 number1 + number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
}
else if(operator.equals("-") == true) { // 변수 operator에 저장된 값이 equals() 메소드 호출하여 문자열 "-"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 -이면
result = number1 - number2; // 변수 result에 number1 - number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
}
else if(operator.equals("*") == true) { // 변수 operator에 저장된 값이 equals() 메소드 호출하여 문자열 "*"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 *이면
result = number1 * number2; // 변수 result에 number1 * number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
}
else if(operator.equals("/") == true) { // 변수 operator에 저장된 값이 equals() 메소드 호출하여 문자열 "/"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 /이면
if (number2 == 0) { // 만약 number2에 저장된 값이 0이면, 즉 사용자가 0으로 나누려고 하면
System.out.println("0으로 나눌 수 없습니다."); // System.out.println() 메소드 호출하여 문자열 "0으로 나눌 수 없습니다." 출력, 즉 0으로 나눌 수 없음 안내 메세지 출력
return; // 프로그램 종료
}
else { // 그렇지 않으면, 즉 사용자가 0이 아닌 수로 나누려고 하면
result = number1 / number2; // 변수 result에 number1 / number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
}
}
else { // 그렇지 않으면, 즉 사용자가 입력한 연산 종류가 +, -, *, /가 아니면
System.out.println("해당 연산은 할 수 없습니다."); // System.out.println() 메소드 호출하여 문자열 "해당 연산은 할 수 없습니다." 출력, 즉 연산 불가 안내 메세지 출력
return; // 프로그램 종료
}
// 3. 결과 출력
System.out.println(number1 + " " + operator + " " + number2 + " 의 계산 결과는 " + result); // System.out.println() 메소드 호출하여 문자열 number1 + " " + operator + " " + number2 + " 의 계산 결과는 " + result 출력, 즉 연산 결과 메세지 출력
scanner.close(); // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
} // main() 메소드 정의 끝
} // Ch2_12_1 클래스 정의 끝
|
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
import java.util.Scanner; // 다른 패키지의 클래스 사용하기위해 컴파일러에게 경로명 알려줌
public class Ch2_12_2 { // Ch2_12_2 클래스 정의 시작
public static void main(String[] args) { // main() 메소드 정의 시작
Scanner scanner = new Scanner(System.in); // Scanner 클래스형 변수 scanner 선언 동시에 Scanner 객체 생성하여 대입하여 초기화, 사용자로부터 입력 받기 위해 Scanner 사용
// 변수 및 상수 선언
double number1, number2, result; // double형 변수 number1, number2, result 선언, 즉 피연산자 2개와 결과값
String operator; // String형 변수 operator 선언
// 로직
// 1. 연산 입력
System.out.print("연산>>"); // System.out.print() 메소드 호출하여 문자열 "연산>>" 출력, 연산 입력 안내 메세지 출력
number1 = scanner.nextDouble(); // 변수 number1에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 피연산자 입력
operator = scanner.next(); // 변수 operator에 scanner 객체의 next() 메소드 호출하여 사용자로부터 입력 받은 값 String형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 연산자 입력
number2 = scanner.nextDouble(); // 변수 number2에 scanner 객체의 nextDouble() 메소드 호출하여 사용자로부터 입력 받은 값 double형으로 리턴 받아 대입하여 초기화, 즉 사용자로부터 피연산자 입력
// 2. 연산 종류 판별 및 계산
switch(operator) { // 변수 operator에 저장된 값이
case "+": // 문자열 "+"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 +이면
result = number1 + number2; // 변수 result에 number1 + number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
break; // switch문 빠져나감
case "-": // 문자열 "-"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 -이면
result = number1 - number2; // 변수 result에 number1 - number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
break; // switch문 빠져나감
case "*": // 문자열 "*"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 *이면
result = number1 * number2; // 변수 result에 number1 * number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
break; // switch문 빠져나감
case "/": // 문자열 "/"과 같은지 비교한 결과가 true이면, 즉 사용자가 입력한 연산자가 /이면
if (number2 == 0) { // 만약 변수 number2에 저장된 값이 0이면, 즉 사용자가 0으로 나누려고 하면
System.out.println("0으로 나눌 수 없습니다.");// System.out.println() 메소드 호출하여 문자열 "0으로 나눌 수 없습니다." 출력, 즉 0으로 나눌 수 없음 안내 메세지 출력
return; // 프로그램 종료
}
else { // 그렇지 않으면, 즉 사용자가 0이 아닌 수로 나누려고 하면
result = number1 / number2; // 변수 result에 number1 / number2 연산 결과 리턴 받아 대입하여 초기화, 즉 연산 결과
break; // switch문 빠져나감
}
default: // 어떤 경우에도 해당되지 않으면
System.out.println("해당 연산은 할 수 없습니다.");// System.out.println() 메소드 호출하여 문자열 "해당 연산은 할 수 없습니다.", 즉 연산 불가 안내 메세지 출력
return; // 프로그램 종료
}
// 3. 결과 출력
System.out.println(number1 + " " + operator + " " + number2 + " 의 계산 결과는 " + result); // System.out.println() 메소드 호출하여 문자열 number1 + " " + operator + " " + number2 + " 의 계산 결과는 " + result 출력, 즉 연산 결과 메세지 출력
scanner.close(); // scanner 객체의 close() 메소드 호출하여 객체 닫기, 사용종료
} // main() 메소드 정의 끝
} // Ch2_12_2 클래스 정의 끝
|
cs |
'1. Java 자바 > 1_0. 책, 강의' 카테고리의 다른 글
[명품 자바 프로그래밍] 3장 127쪽 체크 타임_정답 (0) | 2022.10.09 |
---|---|
[명품 자바 프로그래밍] 2장 교재_실습 문제 정리 (0) | 2022.10.08 |
[명품 자바 프로그래밍] 2장 106쪽 오픈 챌린지_정답 (0) | 2022.10.05 |
[명품 자바 프로그래밍] 2장 교재_이론 문제 정리 (0) | 2022.10.05 |
[명품 자바 프로그래밍] 2장 107~109쪽 연습문제 이론문제_정답 (0) | 2022.06.04 |