어제 내용 정리
byte < short < int < long < float < double
(1) (2) (4) (8) (4) (8)
정수 타입 | 실수 타입
* float는 표현범위가 더 크기 때문에 더 큰 타입으로 들어감.
(정수와 소수까지 표현하기 때문에)
실수 연산에서의 자동 타입 변환
마찬가지로 작은타입(float)에서 큰타입(double)으로 변환하고 계산을 수행함.
- 정수 + 실수는?
정수 + 실수 : 정수를 실수로 변환하고 계산함
package ch02;
public class OperatorPromotionExample {
public static void main(String[] args) {
// 실수(float)+실수(double) - 작은타입(float)에서 큰타입(double)으로 변환하고 계산을 수행함.
double result = 1.2f + 3.4;
// 정수 + 실수 - 정수(10)를 실수(10.0)로 변환하고 계산함
double result2 = 10 + 5.5;
//
// int result3 = 10 + 5.5;
// Type mismatch: cannot convert from double to float
// 10(int)+5.5(double)를 int에 저장하려고 하니 타입이 맞지않아서 오류 발생
// 해결방법 : 강제 형변환을 통해 타입을 변경하고 계산을 수행하도록 만들어주자.
int result3 = (int)(10 + 5.5);
}
}
연산식에서 자동 타입 변환
int타입 보다 작은건 int로 변환해서 계산
int보다 큰 타입은 해당 타입을 따라서 계산
package ch02;
public class OperationPromotionExample {
public static void main(String[] args) {
byte byteValue1 = 10;
byte byteValue2 = 20;
// byte byteValue3 = byteValue1 + byteValue2;// int타입 보다 작은건 int로 변환해서 계산함
int intValue1 = byteValue1 + byteValue2; //첫번째 해결방법
byte byteValue3 = (byte)(byteValue1 + byteValue2); //두번째 해결방법
System.out.println("intValue1 : "+intValue1);
System.out.println("byteValue3 : "+byteValue3);
char charValue1 = 'A';
char charValue2 = 1;
// char charValue3 = charValue1 + charValue2;
// Type mismatch: cannot convert from int to char //int타입보다 작은건 int로 변환해서 계산함
// 65('A') + 1를 char타입에 저장하려고 하니 문제가 생김
int intValue2 = charValue1 + charValue2; //첫번째 방법
char charValue3 = (char)(charValue1 + charValue2); //두번째 방법
System.out.println("intValue2 : "+intValue2);
System.out.println("intValue2(char) : " +(char)intValue2);
System.out.println("intValue3 : "+ charValue3);
int intValue3 = 10;
int intValue4 = intValue3/4; // 10 / 4 = 2 int라 2만 남음 2.5를 담지못함
int intValue4_1 = intValue3%3; // 10 % 3 = 1 나머지
double intValue5 = intValue3/4; // 정수나누기 정수는 결과도 정수가 나옴(소수점전까지만 계산)
System.out.println("intValue4 : " + intValue4);
System.out.println("intValue4_1 : " + intValue4_1);
System.out.println("intValue5 : " + intValue5);
int intValue6 = 10;
double intValue7 = intValue6 / 4.0; //두개의 정수중에 하나를 실수로 만들면 실수나누기 실수가됨
System.out.println("intValue7 : " + intValue7);
int x = 1;
int y = 2;
double result = (double)x/y;
System.out.println("result : "+result);
}
}
+연산에서의 문자열 자동 타입 변환
피연산자가 모두 숫자일 경우 -> 덧셈 연산 수행함
피연산자중 하나가 문자열일 경우 -> 나머지 피연산자도 문자열로 자동 변환함
괄호 먼저 계산
package ch02;
public class StringConcatExample {
public static void main(String[] args) {
// 숫자 연산
int value = 10 + 2 + 8;
System.out.println("value : "+value);
// 문자열 결합 연산(+)
// 숫자 + 숫자 + 문자열
// 12 + "8" -> "128"
String str1 = 10 + 2 + "8";
System.out.println("str1 : "+str1);
// 숫자 + 문자열 + 숫자
// "10"+"2"+"8" -> "1028"
String str2 = 10 + "2" + 8;
System.out.println("str2 : "+str2);
// 문자열 + 숫자 + 숫자
// "10" + "2" + "8" -> "1028"
String str3 = "10" + 2 + 8;
System.out.println("str3 : "+str3);
// 문자열 + (숫자 + 숫자)
// "10" + (10)
// "10" + "10" -> "1010"
String str4 = "10" + (2 + 8);
System.out.println("str4 : "+str4);
String str5 = "1" + (2 + 8) + 0;
System.out.println("str5 : "+str5);
String str6 = 3 + (4 + 2) + "7";
System.out.println("str6 : "+str6);
String str7 = 0 + "6"+ 0 +(3 + 6);
System.out.println("str7 : "+str7);
}
}
문자열을 기본 타입으로 강제 타입 변환
(자바스크립트에서 parseInt() 사용하듯)
문자열을 기본 타입으로 변환하는 경우 예를들어 "12"와 "3.5"를 정수 및 실수 타입으로 변환해서 숫자 연산을 하는 경우
- 주의사항
String은 기본타입이 아님, 참조형 타입!
String str = (int)"10" + 5 ; << 이거 안됨!!!
속성
변환 타입 사용 예
String -> byte String str = "10";
byte value = Byte.parseByte(str);
String -> short String str = "200";
short value = Short.parseShort(str);
String -> int String str="300000"
int value = Integer.parseInt(str);
String -> long String str = "12.345";
long value = Long.parseLong(str);
String -> float String str = "12.345";
float value = Float.parseFloat(str);
String -> double String str = "12.345";
double value = Double.parseDouble(str);
String -> boolean String str = "true"
boolean value = Boolean.parseBoolean(str);
package ch02;
public class PrimitiveAndStringConversionExample {
public static void main(String[] args) {
// String -> int
int value1 = Integer.parseInt("10");
// String -> double
double value2 = Double.parseDouble("3.14");
// String -> boolean
boolean value3 = Boolean.parseBoolean("true");
System.out.println("value1 : " + value1);
System.out.println("value2 : " + value2);
System.out.println("value3 : " + value3);
// int -> String
String str1 = String.valueOf(10);
// double -> String
String str2 = String.valueOf(3.14);
// boolean -> String
String str3 = String.valueOf(true);
System.out.println("str1 : " + str1);
System.out.println("str2 : " + str2);
System.out.println("str3 : " + str3);
}
}
변수와 시스템 입출력
모니터로 변수값 출력하기
=== console에 결과를 출력할떄 사용 ===
System.out.println() : 괄호 안의 내용을 출력하고 행을 바꿔라
System.out.print() : 괄호 안의 내용을 출력만 해라
System.out.printf() : 괄호 안의 첫 번째 문자열 형식대로 내용을 출력
=== 키보드로 값을 입력 ===
System.in.read()
Scanner
printf("형식문자열", 값1, 값2);
속성
형식화된 문자열 설명 출력 형태
정수 %d 정수 123
%6d 6자리 정수, 왼쪽 빈 자리 공백 _ _ _123
%-6d 6자리 정수, 오른쪽 빈 자리 공백 123_ _ _
%06d 6자리 정수, 왼쪽 빈자리 0채움 000123
실수 %10.2f 소수점 이상 7자리, 소수점 이하 2자리. 왼쪽 빈 자리 공백 _ _ _ _123.45
%-10.2f 소수점 이상 7자리, 소수점 이하 2자리. 오른쪽 빈 자리 공백 123.45_ _ _ _
%010.2f 소수점 이상 7자리, 소수점 이하 2자리, 왼쪽 빈자리 0채움 0000123.45
문자열 %s 문자열 abc
%6s 6자리 문자열, 왼쪽 빈 자리 공백 _ _ _ abc
%-6s 6자리 문자열, 오른쪽 빈 자리 공백 abc _ _ _
특수 문자 \t 탭(tab)
\n 줄 바꿈
%% % %
package ch02;
public class PrintfExample {
public static void main(String[] args) {
int value = 123;
System.out.printf(" 상품의 가격: %d원 \n", value);
System.out.printf(" 상품의 가격: %6d원 \n", value);
System.out.printf(" 상품의 가격: %d-6d원 \n", value);
System.out.printf(" 상품의 가격: %06d원 \n", value);
double area = 3.14159 * 10 * 10;
System.out.printf("반지름이 %d인 원의 넓이:%10.2f\n", 10, area);
// 10.2 소수 둘째자리까지 표현
String name = "홍길동";
String job = "도적";
System.out.printf("%6d | %-10s | %10s\n", 1, name, job);
System.out.println(" "+1+" | "+name+" | " + " "+job);
}
}
키보드에서 입력된 내용을 변수에 저장하기
System.in.read();
// System.in.read(); 사용하려면 아래와 같이throws Exception를 추가해주어야함.
package ch02;
public class keyCodeExample {
public static void main(String[] args) throws Exception{
int keyCode;
keyCode = System.in.read();
// Unhandled exception type IOException(처리되지 않은 예외 유형 IO 예외)
// System.in.read(); 사용하려면 throws Exception를 추가해주어야함.
System.out.println("keyCode : "+keyCode);
keyCode = System.in.read();
System.out.println("keyCode : "+keyCode);
keyCode = System.in.read();
System.out.println("keyCode : "+keyCode);
}
}
키보드에서 입력된 내용을 문자열로 얻기
Scanner scanner = new Scanner(System.in); //생성된 scanner를 변수에 저장
//Scanner 변수선언 시스템의 입력장치로 부터 읽는 scanner 생성
String inputData = scanner.nextline(); //읽을 문자열을 String 변수에 저장
//String 변수 선언 enter키 이전까지 입력된 문자열을 읽음
- 자바는 기본타입(byte, short, int, long, float, double, boolean)의 값이 동일한지 비교할 때에는 ==를 사용하고,
문자열이(String)이 동일한지 비교할 때에는 equals() 메소드를 사용합니다.
package ch02;
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) throws Exception{
Scanner s = new Scanner(System.in);
String inputData;
while(true) {
inputData = s.nextLine();
System.out.println("입력된 문자열: \""+inputData+"\"");
// " " 표시를 위해 작성됨
// 만약에 사용자가 입력한 값이 q이면
if(inputData.equals("q")) {
// 반복문을 종료해라~
break;
}
}
System.out.println("종료");
}
}
끝
'프로그래밍 언어 > Java' 카테고리의 다른 글
Java 조건문과 반복문 #1 (0) | 2023.02.02 |
---|---|
Java 연산자 #2 (0) | 2023.02.02 |
Java 연산자 #1 (0) | 2023.02.01 |
Java 기초 #2 (0) | 2023.01.30 |
Java 기초 #1 (0) | 2023.01.27 |