1) sout 단축... 인텔리제이 제공. (System.out.println)
2) deprecated : 더 이상 사용하지 않는 표현. 지원 종료
3) 문자(char)와 문자열(String), 저장 관점의 차이점
문자(char)는 1byte만 쓰기 때문에 끝을 알고 있음. 따라서 문자 뒤에 \0(널문자)가 없음.
문자열(String)은 몇 개의 byte를 쓸지 모르기 때문에 끝을 표시해야 함. 따라서 문장의 끝에 \0(널문자) 사용.
동적 : 알 수 없을 때 / 정적 : 항상 고정됨
변수 선언해보기
mport java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 참조형 변수
// (1) 문자열
// String helloWorld = "Hello world!";
// (2) 배열
// 타입 뒤에 []대괄호는 배열 값을 선언할 것임을 표시, 해당 변수에 들어갈 배열 값은 {}중괄호 안에, (,)쉼표를 사용하여 구분하여 기재
int[] a = {1,2,3};
// 참조형 데이터는 주소값을 저장함
// Arrays 유틸리티의 tostring 기능 이용
System.out.println(Arrays.toString(a));
// 래퍼 클래스(Wrapper Class 변수)
int number = 21;
// new 연산자 없이 선언
Integer num = number; // boxing
System.out.println(num.intValue()); //unboxing
}
}
// 숫자 -> 문자
// import : 외부 유틸리티가 제공하는 기능을 가지고 옴
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//콘솔에서 입력한 값을 저장함
Scanner sc = new Scanner(System.in);
// 입력한 값을 하나 하나 읽어 아스키코드로 할당
int asciiNumber = sc.nextInt();
//아스키코드로 읽은 수를 문자로 바꿈(형변환)
char ch = (char)asciiNumber; // 문자로 형변환을 해주면 숫자에 맞는 문자로 표현됩니다.
System.out.println(ch);
}
}
// 문자 -> 숫자
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); // 첫번째 글자만 받아오기위해 charAt(0) 메서드를 사용합니다.
int asciiNumber = (int)letter; // 숫자로 형변환을 해주면 저장되어있던 아스키 숫자값으로 표현됩니다.
System.out.println(asciiNumber);
}
}
// 입력
a
// 출력
97
내가 코드를 읽을 때 키워야 하는 실력
이런 예시문을 볼 때 어느 부분이 변수 이름이고, 어느 부분이 메서드인지 정확하게 구분하기. 변수에 값이 저장되고 변환, 출력되는 경로를 항상 머릿속으로 그려보기. 변수 명, 즉 바꿀 수 있는 이름이라면 조금씩 바꿔보며 코드 작성에 익숙해지기
bit 2진수를 16진수로 저장(표현)하는 것.
이게 무슨 말이지?? 복습할 때 다시 보기.
실수 1) float → int 형변환
틀렸던 코드
//레시피 별점 입력
System.out.println("레시피의 별점을 매겨주세요.");
Scanner sc2 = new Scanner((System.in));
Float input2 = sc2.nextFloat(); // float 값을 받을 때는 nextFloat
int inputChange = (int)input2; //형 변환
System.out.println(inputChange+"점");
float 타입 선언이 아닌, Float 래퍼클래스 타입을 적어 형 변환 불가
float 타입으로 변경하여 문제 해결.
그런데 왜 Float 클래스로 적었을 때도 값 출력은 됐을까? 질문중
값 출력도 가능하고, 형 변환을 하고 싶다면... intValue() 메소드를 사용하면 됨!
내가 완성한 코드
// 문자 -> 숫자
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 레시피 제목 입력
System.out.println("레시피 제목을 입력해 주세요.");
Scanner sc1 = new Scanner(System.in); //Scanner 객체 생성
String input1 = sc1.nextLine(); //sc(Scanner)의 .next();를 실행하면 input 변수에 입력한 글자 받음. next는 공백 기준 한 단어만. nextLine은 한 줄만
//레시피 별점 입력
System.out.println("레시피의 별점을 5점 만점으로 매겨 수를 적어주세요.");
Scanner sc2 = new Scanner(System.in); // Scanner 객체 명 구분해줘야 하지 않나??
float input2 = sc2.nextFloat(); // float 값을 받을 때는 nextFloat
int inputChange = (int)input2; //형 변환
//별점을 %로 치환
float rate = input2/5*100;
//레시피 기입
System.out.println("레시피를 10줄로 적어주세요.");
Scanner sc3 = new Scanner(System.in);
String input3 = sc3.nextLine();
Scanner sc4 = new Scanner(System.in);
String input4 = sc4.nextLine();
Scanner sc5 = new Scanner(System.in);
String input5 = sc5.nextLine();
Scanner sc6 = new Scanner(System.in);
String input6 = sc6.nextLine();
Scanner sc7 = new Scanner(System.in);
String input7 = sc7.nextLine();
Scanner sc8 = new Scanner(System.in);
String input8 = sc8.nextLine();
Scanner sc9 = new Scanner(System.in);
String input9 = sc9.nextLine();
Scanner sc10 = new Scanner(System.in);
String input10 = sc10.nextLine();
Scanner sc11 = new Scanner(System.in);
String input11 = sc11.nextLine();
Scanner sc12 = new Scanner(System.in);
String input12 = sc12.nextLine();
System.out.println("["+input1+"]");
System.out.print("별점 : "+inputChange);
System.out.println(" ("+rate+"%)");
System.out.println("1. "+input3);
System.out.println("2. "+input4);
System.out.println("3. "+input5);
System.out.println("4. "+input6);
System.out.println("5. "+input7);
System.out.println("6. "+input8);
System.out.println("7. "+input9);
System.out.println("8. "+input10);
System.out.println("9. "+input11);
System.out.println("10. "+input12);
System.out.println("레시피 입력이 종료되었습니다.");
}
}
정답 코드를 보니 코드의 중복이 너무너무 많다.
다시 고쳐보자.
1. 스캐너가 너무 많다. 입력란을 구분해주려면 스캐너 구분이 필요할 것 같긴 한데. 마지막 입력란은 다 통일하자.
2. 이렇게 되면 별점과 %가 통일되지 않는다. 숙제 의도대로 %도 정수값을 받자.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 레시피 제목 입력
System.out.println("레시피 제목을 입력해 주세요.");
Scanner sc1 = new Scanner(System.in); //Scanner 객체 생성
String input1 = sc1.nextLine(); //sc(Scanner)의 .next();를 실행하면 input 변수에 입력한 글자 받음. next는 공백 기준 한 단어만. nextLine은 한 줄만
//레시피 별점 입력
System.out.println("레시피의 별점을 5점 만점으로 매겨 수를 적어주세요.");
Scanner sc2 = new Scanner(System.in); // Scanner 객체 명 구분해줘야 하지 않나??
float input2 = sc2.nextFloat(); // float 값을 받을 때는 nextFloat
int inputChange = (int)input2; //형 변환
//별점을 %로 치환
int rate = inputChange/5*100;
//레시피 기입
System.out.println("레시피를 10줄로 적어주세요.");
Scanner sc3 = new Scanner(System.in);
String input3 = sc3.nextLine();
String input4 = sc3.nextLine();
String input5 = sc3.nextLine();
String input6 = sc3.nextLine();
String input7 = sc3.nextLine();
String input8 = sc3.nextLine();
String input9 = sc3.nextLine();
String input10 = sc3.nextLine();
String input11 = sc3.nextLine();
String input12 = sc3.nextLine();
System.out.println("["+input1+"]");
System.out.print("별점 : "+inputChange);
System.out.println(" ("+rate+"%)");
System.out.println("1. "+input3);
System.out.println("2. "+input4);
System.out.println("3. "+input5);
System.out.println("4. "+input6);
System.out.println("5. "+input7);
System.out.println("6. "+input8);
System.out.println("7. "+input9);
System.out.println("8. "+input10);
System.out.println("9. "+input11);
System.out.println("10. "+input12);
System.out.println("레시피 입력이 종료되었습니다.");
}
}
오늘은 정말 집중이 안 되는 날이었다.
중요하고 필수적인 내용인데, 애매하게 아는 게 역시 제일 무섭다.
안다고 생각해도 정작 실전에서 버벅거리면 안다고 할 수 없지...
인내심을 갖고 보자.
배속은 하고...
그리고 자꾸 느낌적인 느낌으로 코드를 짜지 말자.
그것 때문에 10분 걸릴 내용을 10시간 돌아간 적이 있으니...