
System.in.read()
예외처리
- main() 뒤에 throws
- 오류 내용 작성 Ex) IOException
- 하나 지우고 자동완성하여 임포트 하면 편함
- import는 class 밖에 작성됨



System.in.read();
- 키보드가 값을 가져올 때는 바이트 > 보낼 때는 인트로 처리
- 때문에 int 변수에 담아서 처리해야 함
byte에 담으면 빨간 밑줄 뜸
System.out.println("키보드로 값을 입력하세요 >> ");
int iv = System.in.read();
byte iv = System.in.read(); << 오류
- 여러 글자 입력시 가장 앞의 글자만 받음
- ASCII 코드로 출력해줌 Ex) a = 97 , A = 65
- Ex) abc > 97
- 형변환을 통해 반대로도 가능
System.out.println("iv : " + iv);
char ca = (char)iv;
System.out.println("ca : " + ca);

buffer
buffer를 빈 상태가 되게 하는 방법
int iv = System.in.read(); 실행 시 a 를 입력 후 엔터를 치면
- buffer 에 a\r\n 가 생김
- enter = buffer 에서 \r\n
- 버퍼가 세 글자를 모두 썼기 때문에 출구 폐쇄
- Java 'enter' : \r\n
int iv = System.in.read();
char ca = (char)iv;
System.in.read(); // \r 처리
System.in.read(); // \n 처리

skip()
- 2byte를 무시하고 넘기라는 뜻
- 단, skip()은 read()를 사용할 때만 가능
System.in.skip(2);
read() - 숫자 입력
- 1을 입력하면 ascii에서 49로 나옴
-> 48을 빼야함- read의 단점 1byte만 처리 하기 때문에 1자리 숫자만 가능
-> 두 자릿수 안됨
System.out.println("숫자 입력(0~9) >> ");
int num = System.in.read() - 48;
System.out.println("num : " + num);


int로 담을 것이 아니라면 바로 char로 형변환하여 char형 변수에 담기
- 다음 read가 \r을 받음 -> int로 변환시 13이 나옴
- 두번째는 줄을 바꿔주었기 때문에 10이 나옴
System.out.print("문자 입력 >> ");
char ch = (char)System.in.read();
System.out.println("ch : "+ ch);
System.out.println("(int)ch : "+ (int)ch);
char ch2 = (char)System.in.read();
System.out.println("ch2 : "+ ch2);
System.out.println("(int)ch2 : "+ (int)ch2);
- 새로운 문자를 입력받고 싶다면 소모시키면 됨
- 데이터를 사용하고 싶으면 저장해라 -> 기본임 ㅇㅋ?
- 그래야 내가 쓰고싶을 때 사용 가능
ASCII


Scanner class
import
import java.util.Scanner;
import java.util.Scanner;
에서 java.util -> package
Scanner 객체 생성
Scanner sc = new Scanner(System.in);
문자열 : next();
주의사항
- 숫자를 입력하면 int 타입이 아니라 String 타입임
- 공백 전까지만 받음
- Ex) a b 입력 > a 만 출력
System.out.println("단어 입력 >> ");
String word = sc.next();
System.out.println("word : " + word);

숫자 : nextInt();
System.out.println("숫자 입력 >> ");
int iv = sc.nextInt();
System.out.println("iv : " + iv);

실수 : nextDouble()
System.out.println("실수 입력 >> ");
double dv = sc.nextDouble();
System.out.println("dv : " + dv);

문자 : next().charAt(index)
- 가져온 단어에 'charAt(index)'를 적용
- index 번째 문자 사용
- index는 0부터 시작
- charAt은 Scanner class가 아니라 String class 메소드
String stn = sc.next();
char ch = stn.charAt(0);
↓ 한 줄에 쓴 것
char ch = sc.next().charAt(0);
System.out.println("문자 입력 >> ");
char ch = sc.next().charAt(0);
System.out.println("ch : " + ch);

문장 : nextLine()
- next()와 다르게 공백(' ')을 인식함
System.out.println("문장 입력 >> ");
sc.nextLine();
String stn = sc.nextLine();
System.out.println("stn : " + stn);

next 추가 설명
buffer에서
다른 next 들은 데이터 처리 기준단위 공백(space)기준
단, line은 enter임
결과 -> 건너뜀
-> skip() 을 쓸 수 없음
-> 위 코드와 같이 nextLine을 한 번 더 써서 enter을 날려야함
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
#1
- 이름, 주소, 나이, 성별(m, f), 키를 입력받아서 출력하는 코드를 작성하세요
- 주소는 띄어쓰기 처리가 가능합니다
System.out.println("#1. 개인정보");
System.out.println("이름 : ");
String name = sc.next();
System.out.println("주소 : ");
sc.nextLine();
String adr = sc.nextLine();
System.out.println("나이 : ");
nt age = sc.nextInt();
System.out.println("성별 : ");
char gen = sc.next().charAt(0);
System.out.println("키 : ");
double hi = sc.nextDouble();
System.out.println("--- 입 력 정 보 ---");
System.out.println("이름 : "+ name);
System.out.println("주소 : "+ adr);
System.out.println("나이 : "+ age);
System.out.println("성별 : "+ gen);
System.out.println("키 : "+ hi +"cm");

#2
- ID 를 입력받고, 입력받은 ID 를 사용해서 E-mail 을 생성하는 코드를 작성하세요
- Ex) ID 입력 > test
E-mail : test@abc.com
String domain = "@abc.com";
System.out.println("ID 입력 : ");
String id = sc.next();
System.out.println("E-mail : " + id + domain);

#3
- 세과목의 점수를 입력받아서 총점, 평균을 구하는 코드를 작성하세요
- int : 점수, 총점
double : 평균- 평균은 소수점 첫째자리 까지만 표시됩니다
System.out.print("1과목 점수 입력 : ");
int s1 = sc.nextInt();
System.out.print("2과목 점수 입력 : ");
int s2 = sc.nextInt();
System.out.print("3과목 점수 입력 : ");
int s3 = sc.nextInt();

점수입력 한 번에 다 하기
System.out.println("세과목 점수 입력");
int s1 = sc.nextInt();
int s2 = sc.nextInt();
int s3 = sc.nextInt();

int tot = s1+s2+s3;
// avg는 double, tot는 int기 때문에 형변환을 해야 한다.
double avg = tot/3.0;
double avg1 = (double)tot/3.0;
System.out.print("[총점 : "+tot);
System.out.printf(", 평균 : %.1f]\n", avg);
System.out.printf("[평균 : %.1f]", avg1);

안녕 허니몬👻