안녕하세요!
이번 장은 패키지와 모듈, 그리고 다양한 클래스의 메소드들을 찍먹해봤는데.
아직은 더 복습이나 활용을 해봐야 감이 올 것 같습니다;; 아직은 완전하게 숙달이 된 거 같지는 않네요
어쨌든 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 |
'It Study > POWER JAVA(기본서)' 카테고리의 다른 글
POWER JAVA 10장 LAB 키패드 만들기 (주석) (0) | 2022.11.02 |
---|---|
POWER JAVA 9장 프로그래밍 1번 문제 ~2번 문제 (0) | 2022.11.01 |
POWER JAVA 8장 mini project 글자 추측 게임(행맨 게임) (2) | 2022.10.27 |
POWER JAVA 7장 프로그래밍 1번 문제 ~ 8번 문제 (0) | 2022.10.23 |
POWER JAVA 7장 mini project 큐(queue) 구현하기 (0) | 2022.10.23 |