본문 바로가기
1. Java 자바/1_0. 책, 강의

[명품 자바 프로그래밍] 3장 164~170쪽 연습문제 실습문제_정답

by 비소야 2022. 10. 10.
728x90

명품 자바 프로그래밍 3장 164~170쪽 연습문제 실습문제_정답

luxury java programming ch3 p164~170 exercise practice correct answer
1번

 

(1) 답: 0부터 100미만까지 짝수들의 합을 계산하는 코드이며, 실행 결과 2450이 출력된다.

 

(2) 답: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class WhileTest {
    public static void main(String[] args) {
        // 변수
        int sum = 0, i = 0;                     // int형 변수 sum, i 선언 동시에 0 대입, i에 0 대입하여 초기화
 
        // 연산                                  // 총합, 반복제어변수
        while(i < 100) {                        // 변수 i가 100보다 작을동안 반복
            sum = sum + i;                      // sum에 i 합함
            i += 2;                             // 변수 i에 +2
        }
 
        // 출력
        System.out.println(sum);                // System.out.println() 메소드 호출하여 변수 sum에 저장된 값 출력
    }
}
cs

 

(3) 답:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ForTest {
    public static void main(String[] args) {
        // 변수 선언
        int sum = 0;
 
        // 연산
        for(int i = 0; i < 100; i += 2) {
            sum += i;
        }
 
        // 출력
        System.out.println(sum);
    }
}
cs

 

(4) 답: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class DoWhileTest {
    public static void main(String[] args) {
        // 변수 선언
        int sum = 0, i = 0;                     // while이나 doWhile문의 반복제어변수는 그 전에 선언되어 있어야 한다.
 
        // 연산
        do{
            sum += i;
            i += 2;
        }while(i < 100);
 
        // 출력
        System.out.println(sum);
    }
}
cs

 

2번

 

답: 

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Ch3_2 {
    public static void main(String[] args) {
        int[][] n = {{1}, {123}, {1}, {1234}, {12}};        // int형 2차원 비정방형 배열 n 선언 동시에 초기화 블럭으로 초기화하여 배열 생성
 
        for(int i = 0; i < n.length; i++) {                             // 반복제어변수 int형 변수 i 선언 동시에 0 대입하여 초기화, i가 배열 n의 행의 크기인 length 보다 작을동안 반복, i에 +1
            for(int j = 0; j < n[i].length; j++) {                      // 반복제어변수 int형 변수 j 선언 동시에 0 대입하여 초기화, j가 배열 n의 인덱스 i번째 행의 열의 크기인 length보다 작을동안 반복, j에 +1
                System.out.print(n[i][j] + "\t");                       // System.out.print() 메소드 호출하여 배열 n의 인덱스 i번째 행의 j번째 열의 요소 출력
            }                                                           // 한 행의 모든 요소 출력 완료
            System.out.println();                                       // 줄바꿈
        }                                                               // 배열 n의 모든 요소 출력 완료
 
    }
}
cs

 

// 비정방형 배열이므로 length 필드로 반복문을 제어한다.

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
import java.util.Scanner;                       
 
public class Ch3_3 {                            
    public static void main(String[] args) {    
        Scanner scanner = new Scanner(System.in);
 
        // 변수
        int number;                             
 
        // 로직
        // 1. 줄 개수 입력
        System.out.print("정수를 입력하시오>>");
        number = scanner.nextInt();
        // 2. 별 출력
        for(int i = number; i > 0; i--) {
            for(int j = 0; j < i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
 
        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
import java.util.Scanner;
 
public class Ch3_4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        // 변수 선언
        char c;
 
        // 입력
        System.out.print("소문자 알파벳 하나를 입력하시오>>");// 입력 안내 메세지 출력
        c = sc.next().charAt(0);                             // 문자열로 리턴 받아 charAt() 메소드 호출하여 0번째 인덱스에 해당 하는 문자 리턴 받아 대입
                                                             // Scanner는 문자를 입력 받는 기능이 없다. 그러므로 문자열을 입력 받아야 한다.
        // 출력
        for(int i = c; i >= 'a'; i--) {                      // 총 a ~ 변수 c에 저장된 문자 만큼의 줄 출력
            for(int j = 'a'; j <= i; j++) {                  // 문자 'a'부터 변수 i보다 작을 동안 반복
                System.out.print((char) j);
            }
            System.out.println();
        }
        sc.close();
    }
}
cs

 

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
import java.util.Scanner;
 
public class Ch3_4 {
    public static void main(String[] args) {                
        Scanner scanner = new Scanner(System.in);           
 
        // 선언
        char s;
 
        // 로직
        // 1. 알파벳 입력
        System.out.print("소문자 알파벳 하나를 입력하시오>>");
        s = scanner.next().charAt(0);
 
        // 2. 알파벳 출력
        for(int i = s - 'a' ; i >= 0; i--) {                // 총 문자 'a' ~ 변수 s에 저장된 문자 만큼 반복 
            for(char c = 'a'; c <= 'a' + i; c++) {          // 문자 'a' ~ 'a' + i 까지 문자 출력 
                System.out.print((char) c);
            }
            System.out.println();
        }
 
        scanner.close();                                    
    }
}
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
import java.util.Scanner;
 
public class Ch3_5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        // 변수 및 상수 선언
        int[] positiveNumber = new int[10];
 
        // 로직
        // 1. 양의 정수 10개 입력 및 배열에 저장
        System.out.print("양의 정수 10개를 입력하시오>>");
        for(int i = 0; i < positiveNumber.length; i++) {
            positiveNumber[i] = scanner.nextInt();
        }
        // 2. 3의 배수 출력
        System.out.print("3의 배수는 ");
        for(int i = 0; i < positiveNumber.length; i++) {
            if(positiveNumber[i] % 3 == 0) {
                System.out.print(positiveNumber[i] + " ");
            }
            else {
                continue;
            }
        }
 
        scanner.close();
    }
}
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
import java.util.Scanner;
 
public class Ch3_6 {
    public static void main(String[] args) {
        // 변수 선언
        Scanner sc = new Scanner(System.in);
        int[] unit = {5000010000100050010050101};
        int count, money;                                           // 동전의 개수, 사용자로부터 입력 받은 금액
 
        // 입력
        System.out.print("금액을 입력하시오>>");
        money = sc.nextInt();
 
        // 연산
        for(int i = 0; i < unit.length; i++) {
            count = money / unit[i];                                // unit[i]원 짜리 동전의 개수 구하는 연산
 
            if(count != 0) {                                        // 동전의 개수가 0이 아니면 개수 출력
                System.out.println(unit[i] + "원 짜리 : " + count + "개");
            }
 
            money = money % unit[i];                                // 나머지 돈
        }
 
        sc.close();
    }
}
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
import java.util.Scanner;
 
public class Ch3_7 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        // 변수 및 상수 선언
        int[] numbers = new int[10];
        int sum = 0;
        double average;
 
        // 로직
        // 1. 1 ~ 10 범위 정수 10개 랜덤 저장 및 배열 출력
        // 2. 합 연산
        System.out.print("랜덤한 정수들 : ");
        for(int i = 0; i < numbers.length; i++) {
            numbers[i] = (int)(Math.random() * 10 + 1);
            System.out.print(numbers[i] + " ");
            sum += numbers[i];
        }
        System.out.println();
        // 3. 평균 연산
        average = (double) sum / numbers.length;
        // 4. 결과 출력
        System.out.println("평균은 " + average);
 
        scanner.close();
    }
}
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
45
import java.util.Scanner;
 
public class Ch3_8 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        // 선언
        int[] numbers;
        int randomNumber, count;
 
        // 로직
        // 1. 저장할 정수 개수 입력
        System.out.print("정수 몇개?");
        count = scanner.nextInt();
        // 2. 배열 생성
        numbers = new int[count];
        // 3. 랜덤 정수 배열에 저장
        for(int i = 0; i < numbers.length; i++) {
            randomNumber = (int) (Math.random() * 100 + 1);
            numbers[i] = randomNumber;
 
            // 중복 검증
            for(int j = 0; j < i; j++) {                        // 지금까지 저장된 배열 요소 중에서
                if (randomNumber == numbers[j]) {               // 중복되는 수가 있다면
                    i--;                                        // 배열 요소 인덱스 증가 방지 위해 -1, 해당 인덱스에 저장할 랜덤 정수 다시 뽑게 됨
                    break;
                }
                else {
                    continue;
                }
            }                                                   // 지금까지 저장된 배열 요소 중에서 중복되는 수가 있는지 중복 검증 모두 완료
        }
 
        // 4. 배열 출력
        for(int i = 0; i < numbers.length; i++) {
            System.out.print(numbers[i] + "\t");
 
            if(i % 10 == 9) {                                   // 원소가 한 줄에 10개가 출력될 때는 인덱스가 9, 19 ... 이다.
                System.out.println();
            }
        }
 
        scanner.close();
    }
}
cs

 

9번

 

답: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Ch3_9 {
    public static void main(String[] args) {
        // 배열 선언 동시에 생성
        int[][] numbers = new int[4][4];                            // 크기가 4행 4열인 int형 배열 numbers 선언 동시에 생성
 
        // 배열에 랜덤 정수 저장 동시에 출력
        for(int i = 0; i < numbers.length; i++) {
            for(int j = 0; j <numbers[i].length; j++) {
                numbers[i][j] = (int) (Math.random() * 10 + 1);
 
                System.out.print(numbers[i][j] + "\t");
            }                                                       // 한 행의 모든 요소 저장 및 출력 완료
            System.out.println();                                   // 줄바꿈
        }
 
    }
}
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
public class Ch3_10 {
    public static void main(String[] args) {
        // 배열
        int[][] numbers = new int[4][4];            // 랜덤한 정수 저장 배열
        boolean[][] index = new boolean[4][4];      // 저장 위치 배열
 
        // 랜덤한 위치에 1 ~ 10 범위 랜덤 정수 저장
        for(int i = 0; i < 10; i++) {
            int row = (int) (Math.random() * 4);
            int col = (int) (Math.random() * 4);
 
            if(index[row][col] != true) {
                numbers[row][col] = (int) (Math.random() * 10 + 1);
                index[row][col] = true;
            }
            else {
                i--;
                continue;
            }
        }
 
        // 나머지 위치에 0 저장
        for(int i = 0; i < index.length; i++) {
            for(int j = 0; j < index[i].length; j++) {
                if(index[i][j] == true) {
                    continue;
                }
                else {
                    numbers[i][j] = 0;
                }
            }
        }
 
        // 배열 출력
        for(int i = 0; i < numbers.length; i++) {
            for(int j = 0; j < numbers[i].length; j++) {
                System.out.print(numbers[i][j] + "\t");
            }
            System.out.println();
        }
    }
}
cs

 

11번

 

답: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Average {
    public static void main(String[] args) {
        // 변수 선언
        int sum = 0;
        double average;
 
        // 총 합 연산
        for(int i = 0; i < args.length; i++) {
            sum += Integer.parseInt(args[i]);
        }
 
        // 평균 연산
        average = (double) sum / args.length;
 
        // 평균 출력
        System.out.println((int) average);
    }
}
cs

 

// 문자열을 정수로 변환할 때, Wrapper 클래스의 메소드를 활용한다.

 

// Integer.parseInt("10"); // int형 10을 리턴

12번

 

답: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Add {
    public static void main(String[] args) {
        // 변수 선언
        int sum = 0;                                // int형 변수 sum 선언 동시에 0 대입하여 초기화, 총합
 
        // 총 합 연산, 명령행 인자 중에서 정수만
        for(int i = 0; i < args.length; i++) {
            try {
                sum += Integer.parseInt(args[i]);   // 문자열 배열 args의 인덱스 i번째 요소에 저장된 문자열을 int형으로 변환한 뒤, sum에 합함
            }
            catch(NumberFormatException e) {        // 만약 args[i]가 정수가 아닌 경우 NumberFormatException 발생
                continue;                           // 다음 반복으로 넘어감, 즉 문자열 배열 args의 다음 요소에 접근
            }
        }
 
        // 연산 결과 출력
        System.out.println(sum);
    }
}
cs

 

13번

 

답: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Ch3_13 {
    public static void main(String[] args) {
        for(int i = 1; i <= 99; i++) {
            int ten = i / 10;
            int one = i % 10;
 
            if((ten == 3 || ten == 6 || ten == 9&& (one == 3 || one == 6 || one == 9)) {
                System.out.println(i + " 박수 짝짝");
            } else if (one == 3 || one == 6 || one == 9) {
                System.out.println(i + " 박수 짝");
            } else if (ten == 3 || ten == 6 || ten == 9) {
                System.out.println(i + " 박수 짝");
            }
        }
 
    }
}
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
import java.util.Scanner;
 
public class Ch3_14 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        // 선언
        String[] course = {"java""C++""HTMLS""컴퓨터구조""안드로이드" };
        int[] score = {9588766255};
        String name;                                                     // 사용자로부터 입력 받은 과목명 저장할 String형 변수 name
 
        while(true) {
            System.out.print("과목 이름>>");
            name = sc.next();
 
            // 사용자가 그만을 입력한 경우 프로그램 종료
            if(name.equals("그만")) {
                break;
            }
 
            // 사용자가 입력한 과목에 해당하는 점수 찾기
            for(int i = 0; i < course.length; i++) {
                if(name.equals(course[i])) {                                // 사용자가 입력한 과목이 배열에 있는 경우
                    System.out.println(course[i] + "의 점수는 " + score[i]);// 점수 출력 후
                    break;                                                  // 점수 찾기 반복문 빠져나감, 다른 과목 이름 검색
                }
                else if(i + 1 == course.length) {                           // course 배열 요소 끝까지 찾아 봤을 때, 사용자가 입력한 과목이 없는 경우
                    System.out.println("없는 과목입니다.");                 // 없는 과목입니다. 안내 메세지 출력
                }
            }
 
        }
 
        sc.close();
    }
}
cs

 

15번

 

답: 

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
import java.util.InputMismatchException;
import java.util.Scanner;
 
public class Multiply {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        while(true) {
            System.out.print("곱하고자 하는 두 수 입력>>");
            try {                                                   // 사용자가 정수가 아닌 수를 입력한 경우, catch 블럭으로 분기
                // 입력
                int n = scanner.nextInt();
                int m = scanner.nextInt();
 
                // 출력
                System.out.println(n + "x" + m + "=" + n*m);
                break;
            }
            catch (InputMismatchException e) {                      // 입력 오류 시 발생하는 예외, 정수 입력을 기다리는 코드가 실행되고 있는데 정수가 아닌 문자열을 입력한 경우 발생
                System.out.println("실수는 입력하면 안됩니다.");    // 안내 메세지 호출
               scanner.nextLine();                                // 입력 버퍼에 있는 사용자가 잘 못 입력한 수를 모두 제거하기 위해 nextLine() 메소드 호출
            }
        }
 
        scanner.close();
    }
}
cs

 

16번

 

답: 

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
import java.util.Scanner;
 
public class Ch3_16 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        // 선언
        String[] str = {"가위""바위""보"};
        String user, computer;                                  // 사용자와 컴퓨터가 낸 것 저장하는 String형 변수
        int i;                                                  // 컴퓨터가 낼 것 제어할 인덱스
 
        // 게임 시작
        System.out.println("컴퓨터와 가위 바위 보 게임을 합니다.");
 
        while(true) {
            // 사용자
            System.out.print("가위 바위 보!>>");
            user = sc.next();
 
            // 컴퓨터
            i = (int) (Math.random() * 3);
            computer = str[i];
 
            // 사용자가 그만을 입력한 경우 프로그램 종료
            if(user.equals("그만")) {
                System.out.println("게임을 종료합니다...");
                break;
            }
 
            // 승패 출력
            System.out.print("사용자 = " + user + ", 컴퓨터 = " + computer + ", ");
 
            if((user.equals("가위"&& computer.equals("보")) ||
                    (user.equals("바위"&& computer.equals("가위")) ||
                    (user.equals("보"&& computer.equals("주먹"))) {
                System.out.println("사용자가 이겼습니다.");
 
            }else if((user.equals("보"&& computer.equals("가위")) ||
                    (user.equals("가위"&& computer.equals("바위")) ||
                    (user.equals("주먹"&& computer.equals("보"))) {
                System.out.println("컴퓨터가 이겼습니다.");
 
            } else if(user.equals(computer)) {
                System.out.println("비겼습니다.");
            }
        }
 
        sc.close();
    }
}
 
cs

 

728x90