2022.11.14-3 JAVA 변수와 타입 2
2. 변수와 타입 - 2
2.8 강제 타입 변환
작은 허용 범위타입 = 큰 허용범위타입 강제로 변환 쪼개서 넣음.
int var1 = 10;
byte var2 = (byte) var1;
System.out.println(var2); //강제 타입 변환후에 10이 그대로 유지
long var3 = 300;
int var4 = (int) var3;
System.out.println(var4); // 강제 타입변환후에 300이 그대로 유지
int var5 = 65;
char var6 = (char) var5;
System.out.println(var6); // 'A'가 출력
double var7 = 3.14;
int var8 = (int) var7;
System.out.println(var8); //3이 출력2.9 연산식에서 자동타입 변환
int result = byte
int 연산자 byte
int -> int값으로 연산됨
long result = long타입 연산자 byte~int -> long타입됨
float + double -> double됨 int도 마찬가지
int 1 int 2 1/2 0.5지만 int로 되서 게산시 둘중하나를 (double)로 강제변환해줘야함.
byte result1 = 10 + 20; //컴파일 단계에서 연산
System.out.println("result1: " + result1);
byte v1 = 10;
byte v2 = 20;
int result2 = v1 + v2; //int변환후 연산
System.out.println("result2: " + result2);
byte v3 = 10;
int v4 = 100;
long v5 = 1000L;
long result3 = v3 + v4 + v5; //long타입 변환 후 연산
System.out.println("result3: " + result3);
char v6 = 'A';
char v7 = 1;
int result4 = v6 + v7; //int타입으로 변환후 연산
System.out.println("result4: " + result4);
System.out.println("result2: " + (char) result4);
int v8 = 10;
int result5 = v8 / 4; //정수 연ㅅ난의 결과는 정수
System.out.println("result5: " + result5);
int v9 = 10;
double result6 = v9 / 4.0; //double 타입으로 변환 후 연산
System.out.println("result6: " + result6);
int v10 = 1;
int v11 = 2;
double result7 = (double) v10 / v11; //double타입으로 변환후 연산
System.out.println("result7: " + result7);
자바의 +는 두가지 기능이있음.
모두 숫자열일경우 덧셈연산 하나라도 문자열 문자열로 자동변환하여 문자열 결합 연산
순차적으로 우선연산하고싶다면 괄호()를 친다 무조건 괄호부터 연산함.
//숫자연산
int result1 = 10 + 2+ 8;
System.out.println("result1: " + result1);
//결합연산
String result2 = 10 + 2 + "8"; //앞 숫자연산 후 문자열 8붙임 128
System.out.println("result2: " + result2);
String result3 = 10 + "2" + 8; //1028
System.out.println("result3: " + result3);
String result4 = "10" + 2 + 8; //맨앞 문자열 인식 후 뒤도 문자열됨 1028
System.out.println("result4: " + result4);
String result5 = "10" + (2 + 8); //괄호안 계산후 문자열인식 1010
System.out.println("result5: " + result5);2.10 문자열을 기본타입으로 변환
문자열을 숫자 타입으로 변환하는 경우가 있음.
Stirng -> byte \ byte value = Byte.parseByte(str);
string - > int \ int value = Integer.parseByte(str);
string -> boolean boolean value = Bollean.parseBoolean(str);
String str = String.valueOf(기본타입값); 반대 기본타입값을 문자열로 변경
int value1 = Integer.parseInt("10");
double value2 = Double.parseDouble("3.14");
boolean value3 = Boolean.parseBoolean("true");
System.out.println("value1: " + value1);
System.out.println("value2: " + value2);
System.out.println("value3: " + value3);
String str1 = String.valueOf(10);
String str2 = String.valueOf(3.14);
String str3 = String.valueOf(true);
System.out.println("str1: " + str1);
System.out.println("str2: " + str2);
System.out.println("str3: " + str3); 
2.11 변수 사용 범위
변수는 {}안에서만 사용 main전체에서 사용하려면 main안에서 만들기
if문 for문 등에서 {} 안에 써진 변수는 그 안에서만 사용가능함.
int v1 = 15;
if(v1>10)
{
int v2 = v1 -10;
}
int v3 = v1 + v2 + 5; //v2변수를 사용할 수 없어서 컴파일 에러 발생2.12 콘솔로 변수값 출력
System.out.println(리터럴 혹은 변수);
시스템으로.출력하는데.괄호안의 내용을 출력하고 행을 바꿔라
출력 방법에 따라 3가지 방식
println(내용); 괄호안의 내용을 출력하고 행을 바꿔라
print(내용); 괄호안의 내용을 출력하고 행은 바꾸지 마라
printf("형식문자열", 값1 값2,) 형식문자열에 맞추어 뒤의 값을 출력해라
형식문자열은 c언어와 동일
%d 그냥 %6d 6칸짜리만듬 %-6d 우측으로6칸짜리 %06d 왼쪽빈자리0채움
int value = 123;
System.out.printf("상품의 가격:%d원\n", value); //123원
System.out.printf("상품의 가격:%6d원\n", value); //___123원
System.out.printf("상품의 가격:%-6d원\n", value); //123___원
System.out.printf("상품의 가격:%06d원\n", value); //000123원
double area = 3.141592 * 10 * 10;
System.out.printf("반지름이 %d인 원의 넓이:%10.2f\n", 10, area);
String name = "홍길동";
String job = "도적";
System.out.printf("%6d | %-10s | %10s\n", 1, name, job);2.13 키보드 입력 데이터를 변수에 저장
클래스 위에 import java.util.Scanner; 스캐너가 java.util에 있다는 것을 컴파일러에 알려줌. 6장에서 자세히 나옴
Scanner scanner = new Scanner(System.in);
스캐너 변수 선언 <- 스캐너 객체 생성 생성된 Scanner를 변수에 대입
String inputData = scanner.nextLine();
Stirng 변수선언<- 엔터키를 누르면 입력된 문자열을 읽음. 읽은 문자열을 String 변수에 저장
Scanner scanner = new Scanner(System.in);
System.out.print("x값 입력: ");
String strX = scanner.nextLine();
int x = Integer.parseInt(strX);
System.out.print("y값 입력: ");
String strY = scanner.nextLine();
int y = Integer.parseInt(strY);
int result = x + y ;
System.out.println("x + y: " + result);
System.out.println();
while(true) //{}안을 무한히 반복 실행 입력된 문자q면 중지
{
System.out.println("입력 문자열: ");
String data = scanner.nextLine();
if(data.equals("q"))
{
break;
}
System.out.println("출력 문자열: " + data);
System.out.println();
}
System.out.println("종료");입력 할때 필요한 명령어
변수이름.nextByte() // byte 형 입력 및 리턴
변수이름.nextShort() // short 형 입력 및 리턴
변수이름.nextInt() // int 형 입력 및 리턴
변수이름.nextLong() // long 형 입력 및 리턴
변수이름.nextFloat() // float 형 입력 및 리턴
변수이름.nextDouble() // double 형 입력 및 리턴
변수이름.nextBoolean() // boolean 형 입력 및 리턴
변수이름.next() // String 형 입력 및 리턴 (공백을 기준으로 한 단어를 읽음)
변수이름.nextLine() // String 형 입력 및 리턴 (개행을 기준으로 한 줄을 읽음)
2022.11.14 리뷰
자바를 시작하였다. c언어 기반이기에 명령어 형식이 비슷하지만 조금씩 다르다.
특히 scanf만 사용하면 됬던 입력 부분이 귀찮아졌다.
메모리 자동관리 등 장점이 있으니 좀 더 배워보아야 알 것 같다.
천천히 나아가고자 한다.
중요한 것은 꺾이지 않는 마음