[자바 day2] 자바 기본 입력과 출력

2023. 1. 26. 14:44자바/[쉽게 배우는 자바 프로그래밍] 개념

 

스트림

바이트 단위의 데이터의 연속적인 흐름입니다.
이 흐름은 논리적인 흐름입니다.


흐름의 방향에 따른 분류

입력 스트림(input stream) : 입력 장치에서 프로그램으로 읽어온 흐름입니다.
[입력 장치] => [프로그램]

출력 스트림(output stream) : 프로그램에서 출력장치로 내보낸 흐름입니다.
[출력 장치] <= [프로그램]

데이터 형태에 따른 분류

문자 스트림(character stream)


바이트 스트림(byte stream): 바이트 단위의 바이너리 값을 읽고 쓰는 스트림

모든 바이트 스트림은 Input stream과 Output stream의 서브 클래스 입니다.

기본적으로 컴퓨터 내부에서는 바이트 단위로 데이터가 흐릅니다.
파이썬에서는 입력 스트림에서 알아서 했지만,
자바에서는 바이트 스트림을 문자 스트림 형태로 바꾸는 과정을 거쳐야합니다.

System.in 이 읽어온 바이트 스트림을
Scanner를 이용해서 문자열 스트림으로 바꿉니다.


Scanner 클래스

java.util.Scanner 클래스

Scanner 객체 생성

Scanner a = new Scanner(System.in);

스캐너 클래스 타입에 새로운 객체를 하나 생성한다는 의미입니다.

여기서 스캐너 객체 이름은 a입니다.
객체( =레퍼런스,인스턴스)

import문 필요

import java.util.Scanner;


Scanner는 입력되는 키 값을 공백으로 구분되는 아이템 단위로 읽습니다.

공백류 문자

'\t'
'\f'
'\r'
' '
'\n'

홍\t길동 => 성과 이름 구분 가능

Scanner 주요 메소드

 

생성자/메소드 설명
String next() 다음 아이템을 찾아 문자열로 반환
boolean nextBoolean() 다음 아이템을 찾아 boolean으로 변환하여 반환
byte nextByte() 다음 아이템을 찾아 byte로 변환하여 반환
double nextDouble() 다음 아이템을 찾아 double로 변환하여 반환
float nextFloat() 다음 아이템을 찾아 float로 변환하여 반환
int nextInt() 다음 아이템을 찾아 int로 변환하여 반환
long nextLong() 다음 아이템을 찾아 long으로 변환하여 반환
short nextShort() 다음 아이템을 찾아 short로 변환하여 반환
String nextLine() 한 라인 전체(‘\n’ 포함)를 문자열 타입으로 반환

 

넥스트 라인은 한줄에 있는 어떤 데이터든지 다 읽습니다. 공백류 문자까지도 읽습니다.

nextInt()

나이를 입력:23
age = 23

 

System.out.println("나이를 입력:");

엔터 문자를 출력하기 때문에 입력이 안됩니다.

 

해결:

System.out.print("나이를 입력:");

 

age = sc.nextInt();

nextint가 반환하는 정수 23을 age에 집어넣습니다.

next()

이름을 입력:홍길동
name = 홍길동

 

char 타입의 blood 변수 읽어오기

어떻게 읽어올까요? nextchar()메서드는 없는데 말이죠..

1. char 일단 문자열로 간주하고, next()메서드로 읽어오겠습니다.

데이터 타입 간 용량 안맞아서 에러가 납니다.

2. sc 객체를 직접 string타입으로 변환해보겠습니다.

에러가납니다..


3. 해결! charAt 메소드 이용하기

혈액형을 입력:A
blood = A

charAt(0)은
charAt 메소드 이용해서
0번째 배열 가지고 오겠다는 것입니다.

ABCD 입력해 넣으면 0번째 배열만 가져오므로
A만 출력이 됩니다.

next()와
nextLine()


공백류 문자를 읽는지 볼 겁니다.

1. next();

System.out.print("이름을 입력:");
name = sc.next();
System.out.printf("name = %s\n", name);
이름을 입력:홍 길동
name = 홍

next 함수는 홍이라는 문자를 만나고
공백류 문자 만나는 순간, 아 사용자 입력 끝났구나 하고 종료됩니다.

그래서 홍 하나 출력됩니다.

2. nextLine();

System.out.print("이름을 입력:");
name = sc.nextLine();
System.out.printf("name = %s\n", name);
이름을 입력:홍 길동
name = 홍 길동


공백류 문자를 읽는군요!
홍 길동
공백까지 출력이 됩니다.

nextDouble()

 

증감연산자
a++
++a
b--
--b

a++은
a 변수를 1 증가시킨다는 뜻입니다.
a = a + 1이나 a += 1 과 같은 의미입니다.

b—은
b 변수를 1 감소시킨다는 뜻입니다.
b = b - 1이나 b -= 1 과 같은 의미입니다.

 
a=1
a=2
++a후 a=3
a++후 a=4


++a는 a를 먼저 1 증가시킨 뒤
a 값을 불러옵니다

a++는 a값을 불러온 뒤에
a를 1 증가시킵니다

b=9
b=8
--b후 b=7
b--후 b=6

—b와 b—도 같은 원리입니다.

 

조건 연산자
?:
조건식 ? 연산식1 : 연산식2

조건식이 true이면 결과값은 연산식 1의 값이 되고,

false면 결과값은 연산식 2의 값이 됩니다.

8

 

c > d 이므로 c가 출력됩니다.