클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

자바 기본 프로그래밍 11 - 단원 마무리 연습문제 이론편 틀린문제 다시 풀기 본문

프로그래밍 언어/자바

자바 기본 프로그래밍 11 - 단원 마무리 연습문제 이론편 틀린문제 다시 풀기

huenuri 2024. 8. 10. 14:36

어제는 저녁에 공부가 정말 하기 싫어서 그냥 놀다가 잠자리에 들었다. 책을 펼쳐보기는 했으나 가볍게 훑는 정도라 공부라 할 수는 없었다. 그리고 10시 조금 넘어서 잠자리에 들었을까. 잠자리에 든지 1시간 반도 되지 않아서 몸의 통증과 힘든 증세로 겪다 도저히 잠을 청할 수가 없어서 일어났다.
난 화학조미료에 무척 민감한 몸이라 음식에 그런 것이 들어가면 바로 증세가 나타나는 편이다. 어제 저녁 밥이 없어 간단하게 먹을 수 있는 떡과 두유를 사먹었는데 이 역시 내게 정말 맞지 않음을 느꼈다.

이제 다시는 이런 음식을 가까이하지 말아야겠다고 다짐해본다. 일어나서 한참 힘들었지만 30분 정도 지나니 잠도 깨고 증세도 더 나아져서 공부를 하기로 결심했다.


가끔 공부 기록을 남기는 것이 귀찮아서 눈으로만 보거나 과정을 건너뛰고 싶은 마음이 든다. 하지만 그럴 때마다 꼭 문제가 생기고 공부가 하기 싫어진다. 딱 하루 하지 않아도 한번 습관이 틀어지면 다시 회복하기 힘든 경우를 지금껏 숯하게 보았기에 빠른 시간 내에 다시 마음을 잡아야 한다.

8시간 정도 공부할 시간이 있다. 1시간 반은 어제 풀다만 연습문제를 풀고, 3시간은 반복문 학습을 진행할 예정이다. 그런 다음 3시간은 자격증 시험 공부를 하고 30분 이상은 팀프로젝트 과제에 대해 고민을 해보려고 한다.
이번주 화요일부터 파이썬 응용 수업을 나가는데 너무나 어렵다. 어제 오전에는 너무 안되자 화가 나고 답답해서 감정이 잘 절제가 안 되었다. 파이썬 공부도 해야 하는데 배우는 게 정말 많아서 무엇을 해야 할지 막막할 때가 많다.
그래도 일단 시작해보자! 오늘 하루에 대해서만 생각하는 거다. 그럼, 지금부터 8시간 동안 공부에 집중해볼 것이다. 어떤 일도 나쁜 일은 없고 내가 다 겪어야 하는 과정인 것이다. 오늘의 신체적 고통도 분명 내게 얻는 바와 배울 점이 있으리라 믿는다.


 

 

 

연습문제 이론편 틀린문제 다시 풀기

연습문제를 홀수번만 제공하여 어떤 것이 틀렸는지 잘 구별하기 어려웠는데 조금 전에 이 정답을 풀이한 어떤 블로거를 알게 되었다. 그 코드를 보면서 틀린 부분이 어떤 것인지 알 수 있었다.
그리고 엊그제는 바빠서 문제를 푸는데만 집중하여 무엇이 틀렸는지 고쳐보지 않았다. 오늘은 이 부분을 수정하며 확실히 이해하고 넘어가려고 한다.

 

 

2번 문제

다음은 10과 20을 더해 합을 출력하고 작성한 자바 프로그램이지만 오류가 있다. 오류를 찾아내서 고쳐라.

이 문제는 맞았지만 코드를 친 걸 붙이지 않아서 한번 붙여본다.

 

 

main() 메소드가 있어야 실행이 된다.

 


 

 

7번 문제

다음 각 항목의 코드에서 컴파일 오류를 수정하라.

 

(1) while(1)

1이 아니라 true가 되어야 한다. C 언어에서는 1이었던 것 같은데 자바는 다른 모양이다.

 

(2) int n = 3.5

난 3.5를 3으로 바꾸면 되는줄 알았는데 그건 문제에서 요구하는 방식이 아니다. 정수가 되려면 형변환을 해야 한다.

int n = (int)3.5;

 

(3) int b = (3<5) ? true : false

 

true와 false를 5와 3이라는 숫자로 바꾸어주었으나 아니었다. 참과 거짓 조건이 성립하려면 int가 아닌 boolean형이 되어야 한다.

 

(4) int score = 85;

if(80 < score < 90) System.out.print(score);

이렇게 조건문을 쓰면 컴파일러는 왼쪽에서 오른쪽으로 읽기 때문에 항상 참인 경우가 발생한다. 정확한 의미는 알지 못하지만 아무튼 이런 식으로 쓰면 안된다. 따라서 조건을 다음과 같이 나누어주어야 한다.

int score = 85; 
if(score > 80 && score < 90) System.out.print(score);

 

 

 

9번 문제

다음 조건문을 조건 연산자를 이용하여 한 문장으로 작성하라.

이론 문제라고 해서 그냥 책에 풀기만 했는데 그래서는 코드가 어떻게 되고 어디서 잘못 되었는지 파악하기 어렵다. 귀찮더라도 프로그램을 켜서 코드를 짜는 습관을 들어야 할 것이다.

 

if(sum > 100) sum = 100;
else sum = 0;

 

조건연산자를 사용하라고 해서 if-else문을 사용했는데 그러면 문제를 낸 까닭이 없다. 삼항연산자를 써야 한 문장으로 쓸 수 있다.

 

 

처음에는 int sum이라고 바로 쓰니 지역변수가 정의되지 않았다는 오류가 떴다. sum의 값을 할당하니 이 메시지는 사라졌다.


 

 

 

11번 문제

System.out.print(text);로 출력할 때 다음과 같이 출력되는 문장은 무엇인가?

"를 출력하려면 \ 다음에 "를 붙여 \"과 같이 하면 됩니다.

 

처음 풀 때는 이 문제가 무엇인지 잘 이해하지 못했다. 이 문장을 출력하라는 문제였다. 그냥을 출력할 수 없는 문자들이 있으니 이스케이프 문자를 써야 한다.

 

 

"와 /를 사용할 때는 중복해서 쓰거나 /를 더 붙여서 써야 한다. 이제 잘 출력이 된다.


 

 

 

13번 문제

다음 switch 문이 있을 떄, 아래 (1) ~ (4)의 각 문항에 따라 출력되는 결과는?

이 문제는 나중에 수정을 해서 연습문제 풀이에 붙여놓았지만 이번에 코드를 치며 다시 풀어보기로 했다. 그래야 값이 제대로 출력되는지 확인할 수 있다.

 

 

스스로 문제를 만들며 출력이 되게 하고 싶었는데 잘 되지 않았다. 아직 switch문을 완전히 이해하지 못한 모양이다.
switch의 변수를 string 타입으로 하니 case 문자에 빨간줄이 표시되었다. 지금은 왜 그런지 모르겠다.

아무튼 정답은 A는 190, B는 90, C는 40이 출력된다. break가 없으니 모든 값이 다 더해진 것이 sum이 된다. 근데 이 사람의 답변이 좀 틀린 것 같다.


 

 

 

14번 문제

다음 if 문을 switch 문으로 바꾸어라.

엊그제 풀 때는 문제가 맞았는지 틀렸는지도 몰랐다. 어렵사리 if문과 switch문으로 바꾸어서 문제를 만들 수 있게 되었다.

 

 

if문을 쓸 때 자바에서는 조건을 바로 String으로 사용할 수 없었다. 이때 in.equals라는 함수를 써서 문자열을 담아주어야 한다. 그리고 값을 할당하지 않으면 오류가 뜨니 값도 초기화시켰다.

 

 

1이 잘 출력되었다. 이번에는 switch문으로 만들어보았다.


 

 

 

 

 

이제 드디어 문제를 다 풀었다. 그냥 넘어갔다면 알지 못했을 것들을 새롭게 배울 수 있었다.


 

 

 

학습을 마치고

이론 문제를 푸는데만도 1시간 반이나 걸려 아무래도 일정을 좀 수정해야 할 것 같다. 다음 포스트에서는 실습문제에 도전해본다. 정말 어려워서 이것도 1시간 반 이상 걸릴 수도 있다.
그리고 어제는 그냥 코드만 쳤던 어려운 문제에도 다시 내 것으로 만들며 고민하며 문제를 풀어볼 것이다.

공부는 이렇게 하는 것 같다. 빨리 마치려고 대충 하다보면 내용을 이해하지 못하고 깊이가 없는 학습이 된다. 비슷한 문제를 만났을 때 또다시 틀리게 되는 걸 느꼈다. 이번에 파이썬을 자바스크립트를 공부하면서도 그런 걸 많이 느꼈다.
언어는 다르지만 기본 프로그래밍 베이스는 대부분 비슷하다. 그러니까 이 기본의 뿌리를 잘 다져야 코딩 실력도 크게 향상될 거라 본다.