제가 이렇게 코드를 했는데 소수점을 안 찍으면 5를 입력 할 때 5가 제대로 나오는데 5.4 등을 입력하면 소수점 부터는 안읽는거같아요 하나씩 지우면서 봤을때는 16번째줄 까지는 맞는거같은데 input이 0~9일때 랑 .일때로 나눠서 if ,else if 를 사용하고 else if일때 while 사용하려고 했는데 여기서부터 잘 안댑니다 선생님들 조언 구합니다 ㅠ
- dc official App
댓글 39
else if는 if문과 연결됨. 첫번째 while문에서 벗어나면 else if로 넘어가는게 아니라 그 아래로 넘어감. input이 dot이니까 쭉 내려가겠지
익명(180.228)2020-04-05 21:20
답글
헐 잠시먼요... - dc App
익명(222.237)2020-04-05 21:21
정수형(int) 끼리 나눗셈을 하면 나머지를 제외하고 몫만 남아서 5/10을 하면 0.5가 아니고 0이 됨
0xrgb(0xrgb)2020-04-05 21:20
답글
그럼 int를 float으로 바꾸면 대나요...??!? - dc App
익명(222.237)2020-04-05 21:20
답글
일단 result2는 원하는대로 하려면 float이 되야겠지?
0xrgb(0xrgb)2020-04-05 21:21
답글
그리고 (input-'0') / 10 부분도 생각해보면 int / int 니까 이 부분은 float으로 캐스팅을 해줘야함
0xrgb(0xrgb)2020-04-05 21:21
답글
그리고 본문을 읽어보면 else if 안에서 while을 사용하고 싶은 것 같은데 아래에 있는 while을 elseif 안으로 집어넣어야지
0xrgb(0xrgb)2020-04-05 21:22
답글
아 그런데 if elseif면 동작이 제대로 안되겠네 elseif 대신 if를 써야하는데 5.4를 입력한다고 생각하고 코드를 따라가보면 왜 그래야하는지 이해갈거임
0xrgb(0xrgb)2020-04-05 21:24
답글
헒 ㅣ친 - dc App
익명(222.237)2020-04-05 21:24
답글
그리고 이거 다 고쳐도 답이 이상하게 나올거임 12.3456 입력하면 12.6543 나올걸 ㅋㅋ 이거 고치는건 잘 생각해보셈
최초에 if while 구문에서 정수를 찍다가 최초로 dot를 찍을 경우에, 13번줄의 while문이 끝나고 나서 dot에 대한 후처리를 해주는 구문이 없음. 그래서 그 이후로 어떤 처리도 안하고 쭉 빠져버림. 17번줄의 else if는 12번의 if랑 쌍을 이루니까 해당 처리는 최초에 dot을 찍는 경우에만 의미있지 정수를 찍다가 dot을 찍는 경우에는 의미 없음.
익명(124.63)2020-04-05 21:39
답글
11번 이하 while 구문을 제대로 들어가도 주황이형 말대로 int/int연산이라서 1미만의 값은 값의 표현범위 문제로 강제로 0으로 표현될거임. 그래서 원하는 대로 표현이 안될거. 그 부분 고쳐도 소숫점 자리수의 숫자가 거꾸로 표현되는 문제가 남아있고.
else if는 if문과 연결됨. 첫번째 while문에서 벗어나면 else if로 넘어가는게 아니라 그 아래로 넘어감. input이 dot이니까 쭉 내려가겠지
헐 잠시먼요... - dc App
정수형(int) 끼리 나눗셈을 하면 나머지를 제외하고 몫만 남아서 5/10을 하면 0.5가 아니고 0이 됨
그럼 int를 float으로 바꾸면 대나요...??!? - dc App
일단 result2는 원하는대로 하려면 float이 되야겠지?
그리고 (input-'0') / 10 부분도 생각해보면 int / int 니까 이 부분은 float으로 캐스팅을 해줘야함
그리고 본문을 읽어보면 else if 안에서 while을 사용하고 싶은 것 같은데 아래에 있는 while을 elseif 안으로 집어넣어야지
아 그런데 if elseif면 동작이 제대로 안되겠네 elseif 대신 if를 써야하는데 5.4를 입력한다고 생각하고 코드를 따라가보면 왜 그래야하는지 이해갈거임
헒 ㅣ친 - dc App
그리고 이거 다 고쳐도 답이 이상하게 나올거임 12.3456 입력하면 12.6543 나올걸 ㅋㅋ 이거 고치는건 잘 생각해보셈
아씨.. 그거 물어보려했는데 ㅋㅋㅋㅋ 일단 고민해보겠습니다 - dc App
10^반복한수 라는 기능은 없나봐요 .. - dc App
아니야 있어!!! 거기까지 해왔으면 선물드림
https://www.geeksforgeeks.org/math-pow-method-in-java-with-example/
다만 double로 나오기 때문에 결과를 float로 바꿔줘야한다는거
왜 하나를 해결하면 다른 하나가 문제인거죠? ㅋㅋㅋㅋ - dc App
이쯤줬으면 힌트는다준거니까 알아서잘마무리하셈
제가 result3 = (float) (input * Math.pow(0.1,result2)); 라고 했는데 머가 문제가 있을까요..? - dc App
(input - '0')으로 바꾸고 pow(0.1, result2)는 뭘 하려고 했는지 모르겠어
0.1^While 반복한수...를 생각한건데 안대나봐요 - dc App
result2가 반복한 수야? while 한 번 돌때마다 1씩 증가하고 있어?
와 당신은 천재 - dc App
근데 전 멍청이 인듯 - dc App
내가 자바문법책의 역할을 해준거지 결국 아이디어는 너가냈잖아 이렇게계속하면 앞으로도 잘 작성할 수 있을거야
?? while 한번 돌때마다 0.1 0.01 0.001 곱하면 대는거 아닌가요..? - dc App
그렇게 해도 되지 결국 그렇게 하려고 pow 쓴거 아니었어?
result3 = (float) ((input -'0') * Math.pow(0.1,i++));로 했는데 12.3456 했을때 12.0006으로 나와요.. - dc App
아니야 잠시망요 - dc App
댔다 !! - dc App
니가 의도한대로 하려면 else if를 그냥 if로 하면 될듯
디버깅도 써보셈
디버깅?? 그게 뭐죠 - dc App
코드 한 줄씩 실행해보면서 변수 확인 가능함 이거 하면 질문 횟수도 줄어들거임
https://dpdpwl.tistory.com/62
대충 이렇게해서 result2가 입력에 따라 어떻게 바뀌는지 보셈
최초에 if while 구문에서 정수를 찍다가 최초로 dot를 찍을 경우에, 13번줄의 while문이 끝나고 나서 dot에 대한 후처리를 해주는 구문이 없음. 그래서 그 이후로 어떤 처리도 안하고 쭉 빠져버림. 17번줄의 else if는 12번의 if랑 쌍을 이루니까 해당 처리는 최초에 dot을 찍는 경우에만 의미있지 정수를 찍다가 dot을 찍는 경우에는 의미 없음.
11번 이하 while 구문을 제대로 들어가도 주황이형 말대로 int/int연산이라서 1미만의 값은 값의 표현범위 문제로 강제로 0으로 표현될거임. 그래서 원하는 대로 표현이 안될거. 그 부분 고쳐도 소숫점 자리수의 숫자가 거꾸로 표현되는 문제가 남아있고.
지금 자릿수가 거꾸로 가는 거 말고 다해결한거같슴다 - dc App
굳
주딱 열일하네