출력
System.out.println(): 줄바꿈해서 출력
System.out.print(): 줄바꿈 안하고 출력
변수
: 하나의 값을 저장할 수 있는 메모리 공간(RAM)
변수에 값 저장하기 (= : 대입)
int age = 25; //오른쪽에 있는 값을 왼쪽에 대입
변수 초기화
지역변수는 읽기 전에 꼭 초기화 하기!
int x = 0, y =5;
변수 값 읽어오기
age = age + 1 //변수age의 값 1 증가시키기
변수의 타입
저장할 값의 타입과 변수의 타입이 일치해야 함
int age = 25;
age = 3.14; //실수형으로 에러
변수, 상수, 리터럴
- 변수(variable) : 하나의 값을 저장하기 위한 공간
int score = 100;
- 상수(constant) : 한 번만 값을 저장 가능한 변수
final int MAX = 200;
- literal(=기존의 constant) : 그 자체로 값을 의미하는 것
100, 200
- ctrl + / : 여러줄 주석 처리
리터럴의 타입과 접미사
boolean power = true;
char ch ='A';
byte b = 127; //-128 ~ byte ~ 127
byte b = 128 // byte범위 밖 에러
int i = 100; //10진수
int oct = 0100 //8진수 '0'
int hex = 0x100 //16진수 '0x'
'0b' -> 2진 접두사
long l = 10_000_000_000L; //L생략 불가
long l = 100; //생략가능
float f = 3.14f; //생략 불가
double d = 3.14d; //생략가능
<퀴즈>
10. = 10.0
.10 = 0.10 실수형, double타입
10f = 10.0
1e3 = 1000.0 double타입,10^3
- 변수와 리터럴의 타입 불일치
1) 범위가 변수>리터럴 인 경우 OK
int i = 'A'; //int > char
long l =123; //long > int
double d = 3.14f; //double > float
2) 범위가 '변수 < 리터럴' 인 경우, ERROR
int i = 3_000_000_000 //int의 범위 (+-20억 벗어남)
long l =3.14f; //long < float
float f = 3.14 //float < double , 실수형이면 3.14d로 d 생략가능
3) byte, short 변수에 int 리터럴 저장 가능
변수 타입의 범위 이내이어야 함
byte b = 100; //byte범위 속함
byte b = 128; // 에러, byte범위 벗어남
출력 시 접미사는 출력 안함
문자와 문자열
char ch = 'A';
char ch = 'AB'; //에러
String s = "ABC";
String s = ""; //빈 문자열
char ch =''; //에러
String s1 = "AB"; //권장
String s2 = new String ("AB"); //이렇게 많이 안씀
String s1 = "A" + "B"; //"AB"
"" + 7 -> "" + 7 -> "7" //숫자 -> 문자열
"문자열" + any type -> "문자열"
any type + "문자열" -> "문자열"
두 변수의 값 교환하기 -tmp사용
int x = 10, y = 20;
x =y ; //y의 값을 x에 저장
y = x // x의 값을 y에 저장
int x = 10, y =20;
int tmp;
tmp = x; //1. x값을 tmp에 저장
x = y; //2. x값을 y에 저장
y = tmp; //3. tmp값을 y에 저장
기본형과 참조형
기본형
- 오직 8개(boolean, char, byte(2진 데이터), short, int, long, float, double)
- 실제 값을 저장
참조형
- 기본형을 제외한 나머지(string, system 등)
- 메모리 주소를 저장(4 byte 또는 8 byte)
Date today; //참조형 변수 today 선언
today = new Date(); //today에 객체의 주소 저장
float x 2 = double
부동소수점(floating point) //떠다닌다
- 기본형
1bit :부호비트 // 0 : 양수, 1: 음수
실수형 default 타입 : double
printf이용한 출력
println() 단점 : 출력형식 지정불가
1) 실수의 자리 수 조절불가 - 소수점 n자리만 출력하려면?
system.out.println(10.0/3); //3.3333, 실수/실수 = 실수
system.out.println(10/3); //3 정수/정수 = 정수
2) 10진수로만 출력된다
system.out.println(0x1A); //26
printf()출력형식 지정가능
system.out.println("%.2f",10.0/3); //3.33 , 소수점 둘째자리
system.out.println("%d",0x1A); //26, 10진수
system.out.println("%X",0x1A); //1A, 16진수
2) 접두사 붙일 때는 #
3) 실수 출력을 위한 지시자 %f
float의 정밀도는 7자리이므로 123.4567_ _ (나머지는 의미없는 숫자)
e+02 -> 10^2, 반올림해서 표현
소수점 아래는 빈자리를 0으로 채우고, 소수점 앞은 공백으로 채움
전체자리 수는 소수점 포함해서 count
System.out.printf("[%5d]%n", 1234567); //[1234567], 5자리 출력보다 그 이상의 숫자 출력명령 시
System.out.printf("[%.10s]",\n, "www.codechobo.com"); //[www.codech], 10자리만 출력되게
화면으로부터 입력받기
Scanner : 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스
1. import문 추가
import java.util.*;
2. scanner 객체의 생성
Scanner scanner = new Scanner (System.in); //System.in :화면에서 입력받기
3. Scanner 객체를 사용
int num = scanner.nextInt(); //화면에서 입력받은 정수를 num에 저장
//위 한줄과 같음
String input = scanner.nextLine(); //행단위로 입력받을 때,화면에서 입력받은 내용을 input에 저장
int num = Integer.parseInt(input); //문자열(input)을 숫자(num)로 변환
정수형의 오버플로우
10진수
9999 ->오버플로우 발생 -> 0000
최댓값 +1 -> 최소값
최소값 -1 -> 최대값
**부호 있는 정수일 때
** 범위: 0부터 시작하니 마지막 범위에 '-1'
타입간의 변환방법
1. 문자와 숫자간의 변환
3 + '' = '3'
2. 문자열로의 변환
3 + "" = "3"
'3' + "" = "3"
3. 문자열을 숫자로 변환
"3" -> Intger.parseInt("3") -> 3
"3,4" -> Double.parseDouble("3,4") -> 3,4
4. 문자열을 문자로 변환
"3" -> charAt(0) -> '3'
[연습문제]
2-4
double은 접미사 생략 가능
float는 접미사 생략 불가
(x) float f = 3.14 // 3.14는 3.14d의 생략된 형태. 접미사f를 붙이거나 형변환필요
(o) double d = 1.4e3f; // double(8byte)에 float값(4byte)을 넣는 것이므로 OK
'Java > 자바의 정석' 카테고리의 다른 글
[ch3 연습문제] (조건)삼항 연산자 중첩 (0) | 2024.06.28 |
---|---|
[ch3 연습문제] (0) | 2024.06.28 |
코포자를 위한 코딩 공부법(남궁성) (0) | 2024.06.21 |
[ch4] 조건문과 반복문 (0) | 2024.06.19 |
[ch3] 연산자 (1) | 2024.06.18 |