[Java] 변수, 문자열, 입출력, 형변환

CountryGirl·2023년 5월 22일
0

Java

목록 보기
1/18
post-thumbnail

객체: 특징 (속성, 변수) / 행동 (메소드)

public class Main {
    public static void main(String[] args) {
    
    }
}

public: 제어자 👉 어디서든 접근할 수 있다
static: 이 프로그램이 시작될 때 무조건 실행되는 녀석
void: 메소드의 출력값의 데이터 타입

  • print : 줄바꿈 X
  • println : 줄바꿈 O (ln = line)

📌 접미사

데이터값 뒤에 붙이는 구분값

  • 정수형
    long num = 100000000000L
  • 실수형
    float pi = 3.14F

📌 문자 vs 문자열

문자 (char)

  • 작은 따옴표
  • 문자 뒤에 \0 (널문자)가 없다.
  • 1byte만 사용
    * 문자를 큰 따옴표로 묶을 시, 문자가 아니라 문자열로 인식하게 됨

문자열 (string)

  • 큰 따옴표
  • 문자 뒤에 \0 (널문자)가 있다.
  • 여러 문자가 붙어있는 형태라 어디서 끝나는 것인지 알 수 없음.
    👉 몇 개의 byte를 슬지 모르기 때문에 끝을 표시해야함.

📌 기본형 변수 vs 참조형 변수

📌 Stack 영역 vs Heap 영역

Stack 영역

  • 정적으로 할당된 메모리 영역
  • 크기가 몇 byte인지 정해져있는 기본형 변수를 저장
  • 크기가 정해져있는 참조형 변수의 주소값도 저장

Heap 영역

  • 동적으로 할당된 메모리 영역
  • 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장

📌 래퍼클래스

int number = 21;
Integer num = new Integer(number);

이 방식은 이미 지원이 종료돼서 이런 식으로 사용하지 않고
Integer num = number;
이렇게 더 간단하게 사용한다.

📌 입력과 출력

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        char letter = sc.nextLine().charAt(0);
        int asciiNumber = (int)letter;

        System.out.println(asciiNumber);
    }
}
  • System.in : 키보드 입력
  • nextLine() : '\n'을 포함하는 한 라인을 읽고 '\n'을 버린 나머지만 리턴
  • next() : 다음 토큰을 문자열로 리턴
  • charAt(0): 첫번째 글자만 받아온다. index = 0

📌 형변환

: 변수의 타입을 바꾸는 방법

  • 실수형 (float or double) ➡️ 정수형 (int)
    3.141592.... ➡️ 3
    소수점 아래는 버림

  • 정수형 (int) ➡️ 실수형 (float or double)
    31 ➡️ 31.0
    .0 소수점이 생김

변수 타입별 크기

byte (1) -> short (2) -> int (4) -> long (8) -> float (4)
✔️ float는 4byte이지만 부동소수점을 쓰고 있기 때문에 표현할 수 있는 식이 더 많다

자동 형변환 vs 강제 형변환

작은 타입 ➡️ 큰 타입 형변환시 (자동 형변환)

  • 더 큰 표현범위를 가진 타입으로 변환되는 것이라 값의 손실이 없다
  • 값의 손실없이 변환이 가능하기 때문에 컴파일러가 자동으로 형변환을 해준다.

큰 타입 ➡️ 작은 타입 형변환시 (강제 형변환 = 캐스팅)

  • 더 작은 표현범위를 가진 타입으로 변환되는 것이라 값의 손실이 생긴다.
  • 값의 손실이 생기기 때문에 자동으로 형변환을 해주지 않고 개발자가 선택하여 형변환을 한다.

📌 1주차 과제

💁‍♀️ **요리 레시피 메모장 만들기**
  • 입력값
    • 내가 좋아하는 요리 제목을 먼저 입력합니다.
    • 요리 별점을 1~5 사이의 소수점이 있는 실수로 입력해주세요. (ex. 3.5)
    • 이어서 내가 좋아하는 요리 레시피를 한 문장씩 10문장을 입력합니다.
  • 출력값
    • 입력이 종료되면 요리 제목을 괄호로 감싸서 먼저 출력 해줍니다.
    • 이어서, 요리 별점을 소수점을 제외한 정수로만 출력해줍니다. (ex. 3)
    • 바로 뒤에 정수별점을 5점만점 퍼센트로 표현했을 때 값을 실수로 출력해줍니다. (ex. 60.0%)
    • 이어서, 입력한 모든 문장 앞에 번호를 붙여서 모두 출력 해줍니다.

ex) 입력 예시

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

예시 출력

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

😎 내가 푼 코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 요리제목
        String title = sc.next();

        // 별점 & 퍼센트
        float score = sc.nextFloat();
        int intScore = (int)score;
        float percent;
        percent = (float) (score * 100 / 5.0);
        String resultPercent = String.format("%.1f", percent);

        // 레시피
        String[] recipe = new String[10];
        sc.nextLine();
        for(int i = 0; i < recipe.length; i++){
            recipe[i] = sc.nextLine();
        }

        // 모든 입력값 출력
        System.out.println("[ " + title + " ]");
        System.out.println("별점 : " + intScore + " (" + resultPercent + "%)");
        for(int i = 0; i < recipe.length; i++){
            System.out.println(i+1 + ". " + recipe[i]);
        }
    }
}

나는 10번을 반복하기 싫어서 반복문을 이용하여 문제를 풀어보았다.

😎 강의 정답

import java.util.Scanner;

public class Main01 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String title = sc.nextLine();
		float rate = sc.nextFloat();
		String input1 = sc.nextLine();
		String input2 = sc.nextLine();
		String input3 = sc.nextLine();
		String input4 = sc.nextLine();
		String input5 = sc.nextLine();
		String input6 = sc.nextLine();
		String input7 = sc.nextLine();
		String input8 = sc.nextLine();
		String input9 = sc.nextLine();
		String input10 = sc.nextLine();

		title = "[ " + title + " ]";  // [ 제목 ]
		System.out.println(title);
		int intRate = (int)rate; // 강제 형변환
		System.out.println(intRate);
		double percentageRate = intRate * 100 / 5.0; // 자동 형변환
		System.out.println(percentageRate);
		System.out.println("1." + input1);
		System.out.println("2." + input2);
		System.out.println("3." + input3);
		System.out.println("4." + input4);
		System.out.println("5." + input5);
		System.out.println("6." + input6);
		System.out.println("7." + input7);
		System.out.println("8." + input8);
		System.out.println("9." + input9);
		System.out.println("10." + input10);

	}

}
profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글

관련 채용 정보