본문 바로가기
일지/코딩자습

2024_06_22_토

by 알케니브 2024. 6. 22.

For문 공부하기

1) 구구단 안보고 짜보기

1. system.in.read를 이용하여 콘솔창에 입력한 값을 num에 출력하고 싶었는데 되지 않았다
↳ 선언의 개념을 제대로 파악하지 못하고 있었음=>  계속해서 오류라고 뜨니까 선언을 제대로 할 생각을 하지 않고 온갖 쌩쇼를 하며 오류만 고칠 생각을 했지 선언에 대해 제대로 생각해보려고 하지 않았음
이 때 썼던 선언들을 부끄럽지만 첨부한다..ㅠㅠ

int i = 1;
int i =0;
int num = 1;
int i, num  =1;
int num = i +1;
int i = num
int num += i;
int i = i++

 

 

2. for의 구조문에서 (i=1; i<=9; i++)로 시작했는데 i의 값은 증가했지만 윗줄에 int i = 1이라고 써두지 않으면 for구조문에 계속 오류가 떴다
↳ for문의 괄호 안의 구조는 (초기화; 조건식; 증감식) 인데 이걸 조금 전에 본 구조문에서 초기화가 i=1이라고 써둔 것을 보고 그 안에 변수가 들어가야하는 당연한 조건을 잊어버린 거였음
잊지말자!! i를 저~ 밑에 있는 코드에서 따로 넣거나 변경시키는 등의 행위를 할게 아니라면 for위에 i를 따로 선언할 필요가 없다. for문의 구조는 (변수(int나 var같은) i;  i<=조건, i++(혹은 i--;)이다

3. 콘솔창에 가장 먼저 떠야할 '보고 싶은 구구단은?' 이라는 문구를 기억력에만 의존하느라 맨 아래에 썼다
↳ 애초에 콘솔창에 바로 떠야할 문구가 저건데 아래에 쓴다는게 말이 안되는 거였음. 당연히 main 메소드 바로 아래에 system.out.println하고 바로 저 문구부터 써야하는데...

4. int num=i를 쓰고 그 아래에 int i= 1을 썼더니 오류라고 떴다
↳ 선언의 숫서를 파악하지 못하고 있었음. 선생님이 코딩은 아래로 흐른다고 백날 말하셨는데 이해도 못한 거였음. i를 선언한 뒤, int num = i 라고 해야 받아들일텐데, 너무 인간의 기준으로 생각하고 막 쓰고 있던 거였음


5. System.out.println(i + "*" + num + "=" + i * ); 라고 출력하려 했더니 1*1=1,2*1=2 따위만 출력되었다
↳ 당연함. 늘어나도록 계속 늘어나도록 출력되어야 할  i를 앞에다가 갔다 썼으니 앞은 그대로이고(심지어 num=1로 선언해둬서 system.in.read.값도 못받아들임) 뒤는 1만 나오는 이상한 구구단만 나옴. 이것은 num과 i의 위치를 바꾸니 해결되었다

6.System.in.read()-'0';에서 System.in.read(); 까지 쓰는데는 문제가 없었지만 -'0'을 뒤에 갖다붙이기면 오류가 났다
결국 -'0'을 붙이는 걸 포기하고 저대로 둔 채 밑에 식을 고치는데 콘솔창에 13이 계속해서 출력됨

ㅁㅎ씨가 설명해주고 나서야 또 내가 지레짐작으로 생각하고 있단것을 알게됨...ㅋㅋㅋ 나는 이게 system.out.println와 같은 역할을 하는줄 알았음. 변수를 선언해야하는 것인지 생각도 못했다.


여기까지 2시간이 걸렸음... 결국 헬프를 요청하고 ㅁㅎ씨가 유도한 질문과 내 답변과 해결책을 기억나는 대로 적어보겠음

Q. system.in.read가 뭐죠?   A. 콘솔창에 내가 값을 입력하게 해주도록 하는 놈이죠

Q. 정말 그거 맞아요?==>이게 유도하는거였는데 내가 생각을 더 하지 못하고 계속 위의 답만 고집함ㅋㅋㅋㅋ

결국 검색하려고 할때쯤 답을 주심

Q. 저건 정확히는 내가 입력한 문자를 아스키코드로 변환하는 식이예요. A.아..>!!13은 그거 뭐냐 그거 엔터였나 스페이스 그거 아네요?!!   Q. 네, 정확히는 carriage return이예요.   A.제가 3을 입력해서 앞에 1이 붙은건 대체 뭐지? 하고 있었는데...그냥 13이었군요...(이때 새로고침하고 4를 입력해보니까 13이 또 나왔음. 내가 입력한 3이랑은 관련없던 거임ㅠㅠㅠ)

Q. 자, 그럼 어떻게 해야하죠?   A.(우는중)
Q. system.in.read 뒤에 -'0'을 붙이고 세미콜론도 제대로 찍어주시겠어요? A.근데 아까 그렇게 했는데 계속 오류라고 떴어요.

Q. 변수 선언을 안하니까 그렇겠죠?   A. .....저거 변수예요??!!!!

 

이렇게 과정을 거치고.... 세상에 int num = system.in.read라고 치니까 거짓말처럼 -'0'밑에 그어지던 빨간줄이 사라짐...ㅋㅋㅋㅋㅋㅋ

 

이렇게 지난한 과정을 거친 간단한 구구단 공식...for문의 기초... 적어두겠습니다.. 앞전에 해뒀던 걸 참고해서 줄맞춤도 제대로 해둘테니 미래의 나님 보고 참고하길

package HW_Pratice_04;

import java.io.IOException;

public class For02 {
	
	public static void main(String[] args) throws IOException {
		System.out.println("보고 싶은 구구단 숫자는");
		int num = System.in.read()-'0';
		for (int i=1; i<=9; i++ ) {
		System.out.println(num + "*" + i + "=" + num * i);
		}	
		
	}
}

2) 거꾸로 구구단 짜보기
민행씨가 위에 것을 해봤다면 거꾸로 구구단도 짜보는 것을 추천해서 해봄. *1로 시작해서 *9이 아닌, *9로 시작해서 *1로 끝나는  구구단을 만들어보는 것. 

1.  for의 조건문을 i>=9로 해보기
↳ 작동은 됐는데 ㅁ * 9 =ㅁ 만 나오고 걍 끝났음 

 

2. 그럼 반대로 조건문을 i<=9로 해보기

  완전 난리남. 밑의 것 같은 답이 계속 반복됨. 왜일까? 9보다 작게 했는데 9에서부터 시작하는 것도 아니고 -2437어쩌고라니...?

6 * -2537666 = -15225996

6 * -2537667 = -15226002

6 * -2537668 = -15226008

6 * -2537669 = -15226014

 

3. 여기서 약간 감을 잡고 조건문을 i>=1로 고치니 완성됨

package HW_Pratice_04;

import java.io.IOException;

public class for09 {
	public static void main(String[] args) throws IOException {
		System.out.println("보고 싶은 구구단은?");
		int num = System.in.read() - '0';
		for (int i = 9; i>=1; i--)	{
		System.out.println(num + " * " + i + " = " + num * i);
		}
	}

}

 

 

'일지 > 코딩자습' 카테고리의 다른 글

취업특강 -1. 인성면접  (0) 2024.10.29
프로젝트에 깃 접목하기  (0) 2024.10.29
취업역량강화 수업  (0) 2024.10.22
War 배포 방법  (0) 2024.10.16
2024_06_23_일  (0) 2024.06.23