2023년 10월 15일

최혁·2023년 10월 18일
2
1주차 숙제를 진행하며 솔직히 처음에는 몇 분 안걸릴 줄 알았다.
한 30분이면 끝내겠지...

더 잘 해보고 싶은 욕심 때문에 자잘한 부분에서 신경쓰이는게 많아
이런 저런 부분 손대는데 두 세시간정도 걸린듯 하다.
import java.util.Scanner;

// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {
    public static void main(String[] args) {

        
        Scanner scanner = new Scanner(System.in);
        String title = scanner.nextLine();
        double rating = scanner.nextDouble();

        String[] strings = new String[11];

        // scanner 뒤에 숫자 타입이 오게 되면 숫자만 읽게 되고 그 뒤에 오는 화이트 스페이스를 남긴다.
        // 다음 for문의 string[0] 에 화이트 스페이스를 저장 시킴으로 픽스
        /*

백종원 돼지고기 김치찌개 만들기
4.5
돼지고기는 핏물을 빼주세요.
잘익은 김치 한포기를 꺼내서 잘라주세요.
냄비에 들기름 적당히 두르고 김치를 넣고 볶아주세.요
다진마늘 한스푼, 설탕 한스푼 넣어주세요.
종이컵으로 물 8컵 부어서 센불에 끓여주세요.
핏물 뺀 돼지고기를 넣어주세요.
된장 반스푼, 양파 반개, 청양고추 한개를 썰어서 넣어주세요.
간장 두스푼반, 새우젓 두스푼, 고춧가루 두스푼반 넣어주세요.
중불로 줄여서 오래 끓여주세요~!!
마지막에 파 쏭쏭 썰어서 마무리하면 돼요^^

*/


        for (int i = 0; i < 11; i++) {
            strings[i] = scanner.nextLine();
        }

        System.out.println('\n'); // 복붙 줄바꿈

        System.out.println("[ " + title + " ]");
        System.out.println("별점 : " + rating +" ("+ (int)rating * 20.0 +"%)");

        for (int i = 1; i < 11; i++) {
            System.out.println(i + ". " + strings[i]);
        }

    }
}


intelliJ 상에서 scanner 를 동작시킬 때
한줄 한줄 넣어가며 엔터를 치는게 아니라 위에 있는

백종원 돼지고기 김치찌개 만들기
4.5
돼지고기는 핏물을 빼주세요.
잘익은 김치 한포기를 꺼내서 잘라주세요.
냄비에 들기름 적당히 두르고 김치를 넣고 볶아주세.요
다진마늘 한스푼, 설탕 한스푼 넣어주세요.
종이컵으로 물 8컵 부어서 센불에 끓여주세요.
핏물 뺀 돼지고기를 넣어주세요.
된장 반스푼, 양파 반개, 청양고추 한개를 썰어서 넣어주세요.
간장 두스푼반, 새우젓 두스푼, 고춧가루 두스푼반 넣어주세요.
중불로 줄여서 오래 끓여주세요~!!
마지막에 파 쏭쏭 썰어서 마무리하면 돼요^^

부분을 전부 드래그 해서 넣어버리면 된다는걸 알았다.

(scanner + 숫자) / 숫자 ❌

총 줄 수 는 12줄.
따라서 첫 시도는 12개의 슬롯을 가진 배열을 만들어 for 문으로 12번의 scan후,
내부에서 if 문을 통해 2번째 줄에 들어올 별점만 따로 처리하여 간단하게 처리하려고 했다.

개같이 실패.

string 으로 읽어 들인 4.5 를 (int)array[1] 로 변환 날먹 할 수 없었다.

scanner + 숫자 ...

어쩔 수 없이 scanner 파트를 셋으로 나누었다.


	Scanner scanner = new Scanner(System.in);
    String title = scanner.nextLine(); // 요리제목
    double rating = scanner.nextDouble(); // 별점

    String[] strings = new String[10];

    for (int i = 0; i < 10; i++) {
        strings[i] = scanner.nextLine();
    } // 10줄
    

그리고 다시 for 문으로 출력해보았더니

첫 줄이 출력이 안된다.
마지막 줄은 아예 씹혔다.

배열이 하나씩 밀렸다?

왜 그럴까.
한 줄씩 출력을 시도 했을 때에는 잘 되는데 12줄 전체를 복사 붙여넣기를 시도할 때
이런 버그가 발생하더라.

scanner + 숫자 뒤에는 화이트스페이스가 남는다.

강의를 들을 때, char 자료형은 1 or 2 byte로 문자 하나만 담긴다. 라고 배웠다.
(해당 부분은 나중에 추가 공부 후 추가 작성)
조사해보니 숫자 타입도 비슷하더라.

무슨소리냐 하면

	double rating = scanner.nextDouble();

이 친구가 문제였던 것.

백종원 돼지고기 김치찌개 만들기
4.5
돼지고기는 핏물을 빼주세요.

이 부분에서 4.5 가 scanner.nextDouble(); 된 이후에 화이트 스페이스인
줄 바꿈 문자 (아마 \n이려나) 가 남아

	String[] strings = new String[10];

의 첫번째 배열에 홀랑 들어가 버린것.

화이트 스페이스가 뭔데?

42 과정중에 ascii를 다뤘던 경험이 도움이 됐다.
ascii 표에서 0번부터 32번 까지, 그리고 127 번의 문자는
문자이되, 기능으로 존재하는 문자 이다.

표기되지 않지만 결국 문자라는 소리다.

이 부분을 해결하기 위해 scanner 사이에 줄 바꿈을 출력해 넣는 빡대가리 짓도 시도해보았다.
복사 붙여넣기 중, 줄바꿈을 시도하고 출력할거라는 기대를 담은 말도 안되는 시도였다...

배열을 11 개로

이런 저런 방법을 시도해보다가 그냥 배열 한칸을 증설하기로 했다.
저걸 잡을 방법이 없더라. 나중에 보니 있더라!

	String[] strings = new String[11];

그냥 배열 첫 번째 칸 [0] 에 화이트 스페이스를 버려버리고 [1] 번 부터 출력하기로 했다.

0개의 댓글