본문 바로가기
It Study/POWER JAVA(기본서)

POWER JAVA 8장 프로그래밍 1번 문제 ~ 5번 문제

by prlkt5200 2022. 10. 29.
반응형

안녕하세요!

이번 장은 패키지와 모듈, 그리고 다양한 클래스의 메소드들을 찍먹해봤는데. 

아직은 더 복습이나 활용을 해봐야 감이 올 것 같습니다;; 아직은 완전하게 숙달이 된 거 같지는 않네요

어쨌든 8장이 끝났으니 바로 9장 들어가서 또 열심히 해야겠습니다!

java책 한권을 뗄 날도 머지 않았습니다ㅋㅋㅋ

 


1번 문제

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
public class Test {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("문자열을 입력하세요");
        String s = sc.nextLine();
        String [] tokens = s.split(" ");
        for(String s1 : tokens) {
            System.out.println(s1);
        }
        System.out.println("모두 "+tokens.length+ "개의 단어가 있습니다.");
        
        
    }
 
}
cs

 

2번 문제

 

조금 많이 헤맨 것 같습니다. 재밌었던 점은 예외처리를 while문 안에 두니 예외처리 안내문을 띄우고 바로 다음 프로세스로 가는 점이었습니다. 뜻하지 않게 자동화 프로그램을 만들기는 했지만 괜찮네요.

 

그리고 지역변수(메소드 내 변수를) 미리 초기화 하냐 안하냐에 따라서 변수로 활용가능한지를 알 수 있었고,

Integer.parseInt(sc.next());를 바로 활용해려 했더니 왜 안되나 했더니... 저 문장은 값을 반환하는 것이지 그 반환한 값을 

다른 변수에 저장시키지 않아서 활용을 못했던 부분이라는 사실을 알게 되었습니다.

 

마지막으로 전반적으로 개념이 아직 많이 약하다는 것을 느꼈습니다. 여러모로 저에게 있어서 혜자스러운 문제였습니다 ㅎㅎ.

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
package test;
 
import java.util.ArrayList;
import java.util.Scanner;
 
public class Test {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean b = true;
        int sum = 0;
 
        while (b) {
 
            try {
                System.out.println("정수를 입력해주세요: ");
                int number = Integer.parseInt(sc.next());
 
                sum += number;
 
                System.out.println("계속 입력하시겠습니까?? y or n ");
                String answer = sc.next();
 
                if (answer.equals("n"))
                    break;
            } catch (NumberFormatException e) {
                System.out.println("NumberFormatException 발생");
            }
        }
 
        System.out.println("정수들의 합은: " + sum);
 
    }
}
 
cs

 

 

3번 문제

 

(이 문제는 https://aeunhi99.tistory.com/157 코딩 못하는 컴공님의 위 게시글 중 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
package rps;
 
import java.util.Random;
import java.util.Scanner;
 
public class Game {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random random = new Random();
 
        // 컴퓨터가 사용할 값이다.
        int n = random.nextInt(3);
 
        // 가위 바위 보의 인덱스와 0~2까지의 난수의 값을 매치시켜주는
        // String[]이다
        String[] s = { "가위""바위""보" };
 
        System.out.println("가위(0) 바위(1) 보(2)를 입력하세요");
        int me = sc.nextInt();
        System.out.println("컴퓨터는 " + s[n] + "를 냈습니다.");
 
        if (me == n) {
            System.out.println("비겼습니다.");
 
        } else {
            if (me == 0) {
                if (n == 1)
                    System.out.println("졌습니다.");
                else
                    System.out.println("이겼습니다.");
            } else if (me == 1) {
                if (n == 2)
                    System.out.println("졌습니다.");
                else
                    System.out.println("이겼습니다.");
            } else {
                if (n == 0)
                    System.out.println("졌습니다.");
                else
                    System.out.println("이겼습니다.");
            }
        }
 
    }
 
}
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
38
package game;
 
public class Dice {
 
    int roll;
 
    Dice() {
        this.roll = 1;
    }
 
    int roll() {
        return this.roll = (int) ((Math.random() * 6+ 1);
    }
 
    void setValue(int v) {
        this.roll = v;
    }
 
    int getValue() {
        return this.roll;
    }
 
    public String toString() {
        return "현재 주사위의 상태는 " + this.roll + "입니다.";
    }
 
    public static void main(String[] args) {
        Dice me = new Dice();
        Dice computer = new Dice();
 
        me.roll();
        computer.roll();
        System.out.println(me);
        System.out.println(computer);
    }
 
}
 
cs

 

5번 문제

 

5번 문제는 조금 고생하기도 했고, 기존에 문제에서 못보던 느낌이었기에 주석을 조금 많이 달았습니다.

이해 안되시는 분들은 댓글에 남겨주세요!

그리고 이 글은 초반에 막혀서 다음 블로그를 참조하였습니다. 문제가 될 시 삭제하겠습니다.

(https://han5ung.tistory.com/14)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package test;
 
import java.nio.CharBuffer;
import java.util.Arrays;
import java.util.Scanner;
 
public class Test {
 
    public static void main(String[] args) {
 
        // 단어에서 추출한 문자의 아스키 코드 값을 저장할 변수이다.
        int num = 0;
        // 발생횟수를 저장하는 배열이다.
        int[] numArr = new int[25];
        // 숫자를 다시 char 타입으로 변환하여 저장하는 배열이다.
        char[] reChar = new char[25];
        // 발생횟수를 늘릴 때 사용할 변수이다.
        int count = 1;
 
        // 단어를 입력해준다.
        try {
            System.out.println("단어를 입력해주세요: ");
 
            Scanner sc = new Scanner(System.in);
            String s = sc.next();
 
            // 단어를 대문자로 변환해준다.
            // 그리고 그 단어를 1개씩 쪼개서 char 배열의 각 인덱스에 저장한다.
            char[] charArr = s.toUpperCase().toCharArray();
 
            // 대문자로 변환된 char 배열 내 char타입 값은 (int)로 인해 아스키 코드 값(숫자)
            // 형태로 출력된다. ex: a -> A -> 65
            // 여기에 -65을 해주면 a값부터 z값까지 숫자가 순차적으로 나온다.
            for (int i = 0; i < charArr.length; i++) {
                num = (int) charArr[i] - 65;
 
                // 문자를 num으로 변환한 값이 발생횟수를 저장하는 배열에 인덱스가 된다.
                // 다시 말해 각 문자와 대응되는 숫자를 인덱스로 활용한다.
                // ex: a -> A -> 0 -> numArr[0]
                // 이렇게 되면 단어나 문자를 순서대로 입력안해도 발생 횟수 자체는
                // 발생횟수 배열에 순서대로 입력이 된다.
 
                // 그리고 단어가 입력될 때마다
                // 발생횟수 배열[index:단어에 해당되는 숫자] = 0;의 값을 1씩 올려주면
                // 발생횟수에 따른 counting이 완료되는 것이다.
                numArr[num] += count;
            }
            for (int j = 0; j < 25; j++) {
 
                // charArr 배열 자체는 중복값이 나오면 발생횟수 배열처럼 해당되는 인덱스의 값을
                // 중복으로 추가해주는 방식이 아니다. 즉 중복값도 인덱스를 차지한다.
                // ex: b 2번 입력은 numArr[1] += count 2번 수행 따라서 numArr[1] = 2
                // charArr[0] = B charArr[1] = B
 
                // 따라서 charArr하고 numArr의 인덱스는 매치가 안되기에 반복문을 활용해
                // 동일한 인덱스를 주고, 출력하면 엉뚱한 값이 나온다.
                // 그래서 숫자(아스키코드)를 활용해 다시 char 값이 출력되는 코드를 구성하고, 이를
                // 출력문에활용했다.
                char c = (char) (j + 65);
                reChar[j] = c;
 
                // 또 반복 횟수는 배열이 전부 출력될 수 있게 25로 구성했다.
                System.out.println(reChar[j] + ": " + numArr[j] + "번 반복되었습니다.");
            }
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("ArrayIndexOutOfBoundsException 발생");
        }
    }
 
}
 
cs

참고자료 아스키코드

반응형