TIL)프로그래밍 기초_23.05.23

주민·2023년 5월 23일
0

TIL

목록 보기
4/84

오늘 오전에는 TIL 작성하는 법 강의를 들었다 >> TIL
그래서 내용 정리&TIL 따로 만들어 작성을 해보려한다. >> 강의내용정리-1주차
강의내용정리-2주차

Java 문법 종합반 숙제

요리 레시피 메모장 만들기

요리명, 별점, 레시피를 직접 입력하여 양식에 맞게 출력하는 문제이다.
직접 입력이다보니 1주차 강의에 나온 Scanner를 이용했다.

  • 간단 풀이
Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
float rate = sc.nextFloat();
sc.nextLine();
String input1 = sc.nextLine();
 --> System.out.println으로 출력

next() 오류
title "음식"으로 테스트를 할 때는 정상적으로 실행되었는데 예시에 있는
"백종원 돼지고기 김치찌개 만들기"로 실행하니 오류가 났다....
띄어쓰기 문제인거 같아서"음 식"으로 다시 돌려보니 동일한 오류가 나왔다.

문제가 될만한 코드가 next() 밖에 없어서 찾아봤다.
알고보니 next는 띄어쓰기가 있음 안되서 next -> nextLine으로 수정하니 정상적으로 실행됐다.

 - next() : 공백(띄어쓰기) 전까지 리턴
 - nextLine() : Enter 전 문자열까지 리턴
 - next(자료형) : 문자를 읽어와서 (자료형)으로 바꿘후 리턴

별점 계산
문제가 별점(소숫점)을 입력한 후 정수로 변경, 뒤에 %를 붙여 실수로 출력
이었는데 처음에는 아래와 같이 코드를 짰다.

System.out.println("별점 : " +  rate + "(" +((rate/5))*100 + "%)");

이렇게 하니 실수 -> 정수 과정이 없어 최종 % 값이 다르게 나와버렸다.
그래서 여러 변수를 선언해서 아래처럼 수정했다(코드 내에서 계산하지 말고 값을 변수에 지정해서 계산하는 게 좋다 들었다)

float rate = sc.nextFloat(); // 4.5
int intRate = (int)rate; // 4.5 > 4
double percentRate = intRate *100 /5;

* intRate/5 *100 으로 하면 0.0%가 나온다...! 
double로 형변환은 계산 이후라 0*100으로 계산되어 나오는 결과같다.
intRate/5 *100; = (3/5)*100 = 0 * 100
 
앞에 (double) 붙여주거나 5를 5.0으로 바꿔주면 해결!
double percentRate = (double)intRate/5 *100;
double percentRate = intRate/5.0 *100;

int -> double은 자동 형변환이 되지만 계산 내용에 따라 값이 이상하게 나올 수도 있다는 것을 알았다. 형변환이 필요한 계산할 때는 조심하자

한 줄 안나옴
float rate = sc.nextFloat();만 쓰고 출력을 하게되면 input2가 입력이 되지 않고 1번이 빈값으로 나온다. "float rate = sc.nextFloat();"에 개행문자(\n) 포함되어 있어서 그런거 같다고 공지해주셨다.

[음식]
별점 : 2.9(40.0%)
1.
2. 테스트1

관련 블로그

Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
float rate = sc.nextFloat();
 ** sc.nextLine(); // 추가할 것
String input1 = sc.nextLine();
String input2 = sc.nextLine();

강의 내용

정리한 내용 중 몰랐던 부분이나 한번 더 적으면 좋을거 같은 내용이 있어 추가했다.

  • string은 참조형 변수이다.
    -> 길이를 예측할 수 없어 주소값을 가져온다. 다만, array의 경우 그대로 출력하면 주소값이 나오는데 String은 값이 여러개가 아니라 하나의 데이터의 길이를 알 수 없는 것임으로 출력해도 잘 나온다.

  • 래퍼 함수
    -> 기존에 "Car a = new Car();" 로 봤던 함수
    -> 래퍼 클래스는 "boolean > Boolean" 로 사용하기 때문에 첫번째가 대문자가 나오는 이유는 이것 때문임

  • scanner
    -> 필수코드 한번 더 정리(int, char)

       Scanner sc = new Scanner(System.in);
    
       int a = sc.nextInt();  
       char letter = sc.nextLine().charAt(0);
 

0개의 댓글

관련 채용 정보