ASCII코드중에서 문자 0은 48, 9는 57 ASCII코드중에서 문자 A는 65, Z는 90 ASCII코드중에서 문자 a는 97, z는 122
char과 int 자료형은 서로 호환이 가능한 범위를 가진다.
char ch3 = 65; //성공. 'A'가 입력됨.
System.out.printf("%d %n", 65); // 65 System.out.printf("%c %n", 65); // A
String str = "TEST"; System.out.printf("%c %n", str.charAt(0)); //문자열이 저장된 변수명.charAt(문자열위치값) 즉, 여기서는 T 리턴 System.out.printf("%c %n", str.charAt(1)); System.out.printf("%c %n", str.charAt(2)); System.out.printf("%c %n", str.charAt(3));
public class Test20 {
public static void main(String [] args) {
//입력
//처리
//출력
System.out.printf("%c %n", 65);
System.out.printf("%c %n", 66);
System.out.printf("%c %n", 67);
// A ~ Z 까지를 출력
for (int i=65; i<=90; i++) {
System.out.printf("%c", i);
}
System.out.println("");
// a ~ z 까지를 출력
for (int i=97; i<=122; i++) {
System.out.printf("%c", i);
}
System.out.println("");
}
}
//결과
A
B
C
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
문제) 대문자로 구성된 4글자짜리 문자열을 입력받고 나서, 소문자로 변경한 다음 출력. 실행 예) 문자열 입력(4자, 대문자)?TEST 입력된 문자열 : TEST 소문자로 변환 : test
import java.util.Scanner;
public class Test21 {
public static void main (String [] args ) {
//입력
System.out.print("문자열 입력(4자, 대문자)?");
Scanner sc = new Scanner(System.in);
String eng = sc.next();
//처리
char en1 = eng.charAt(0);
char en2 = eng.charAt(1);
char en3 = eng.charAt(2);
char en4 = eng.charAt(3);
int inten1 = en1 + 32;
int inten2 = en2 + 32;
int inten3 = en3 + 32;
int inten4 = en4 + 32;
//출력
System.out.printf("입력된 문자열 : %s %n ", eng);
System.out.printf("소문자로 변환 : %c%c%c%c %n", inten1, inten2, inten3, inten4);
}
}
//결과
문자열 입력(4자, 대문자)?TEST
입력된 문자열 : TEST
소문자로 변환 : test
자료의 형 변환
1. 자료의 형이 일치하지 않는 경우 원하는 자료형으로 변환할 수 있어야 한다.
2. 묵시적 형변환, 명시적 형 변환 묵시적 형 변환 -> 자동으로 변환시켜 주는 것. 데이터가 원래의 값을 유지하는 것이 가능. 작은 데이터를 큰 자료형에 넣는 경우에 주로 발생. 명시적 형 변환 -> 특정 명령 수행을 통해서 강제적으로 변환을 시키는 것. 데이터가 원래의 값을 유지하지 못하는 경우도 발생.
public class Test22 {
public static void main (String[]args) {
short a = 10;
System.out.printf("%d %n", a);
int b = a; //->묵시적 형 변환
System.out.printf("%d %n", b);
//short c = b;
//System.out.printf("%d %n", c);
short c = (short)b; //->명시적 형 변환
System.out.printf("%d %n", c);
int d = Short.MAX_VALUE + 1; //32767 +1
short e = (short)d; // -> 명시적 형 변환
System.out.printf("%d %n", e); //-32768
}
}
//결과
10
10
10
-32768
형 변환의 대표적인 예
문자열형 -> 숫자형, 숫자형 -> 문자열형
int 변수 = Integer.parseInt(문자열형); double 변수 = Double.parseDouble(문자열형);
String 변수 = String.valueof(정수형); String 변수 = String.valueof(실수형);
String 변수 = Integer.toString(정수형); String 변수 = Integer.toBinaryString(정수형); String 변수 = Integer.toHexString(정수형);
String 변수 = String.format("%d", 정수형); String 변수 = String.format("%f", 실수형);
char 변수 = 문자열형변수명.charAt(인덱스);
if문
1. 주어진 조건에 따라 분기 방향을 정하기 위하여 사용하는 제어문 2. 기본형식
//조건이 만족되는 경우(true인 경우)만 실행문 실행
if (조건) {
// 실행문;
}
//조건이 만족되는 경우(true인 경우)는 실행문1 실행
//조건이 만족되는 않는 경우(true인 경우)는 실행문2 실행
if (조건) {
// 실행문1;
} else {
// 실행문2;
}
사용 가능 방법
if (조건) {
//실행문1;
} else if (조건2) {
//실행문2;
} else {
//실행문3;
}
-> 다른방법으로 표기하면
if (조건) {
//실행문1;
} else {
if (조건2) {
//실행문2;
} else {
//실행문3;
}
//if, else 구문은 한번만 표기, else if (조건)은 추가 가능.
if (조건) {
//실행문1;
} else if (조건2) {
//실행문2;
} else if (조건3) {
//실행문3;
} else {
//실행문4;
}
-> 위와 같은 상황은 다른 표현으로 사용하기도 합니다. 다만, else 즉 실행문4가 없음.
if (조건1) {
// 실행문1;
}
if (조건2) {
// 실행문2;
}
if (조건3) {
// 실행문3;
}
문제) 세 개의 숫자 중에서 가장 큰 숫자 구하기. 단, if문 사용. 실행 예) 숫자1?XX 숫자2?YY 숫자3?ZZ 입력 받은 숫자 : XX, YY, ZZ 가장 큰 숫자 : ZZ
import java.util.*;
public class Test23 {
public static void main(String [] args) {
Scanner sc = new Scanner(System.in); // Scanner 변수명 = new Scanner(System.in);
- 데이터 타입의 종류 - 숫자타입: number (정수 및 실수 모두 포함) 표현범위: number(5) -> -99999 ~ 99999 number(3) -> -999 ~ 999 number(5,2) -> -999.99 ~ 999.99 number(6,3) -> -999.999 ~ 999.999
- 문자타입 ①char: 고정형 문자타입 name char(10) -> name 컬럼에 입력되는 데이터의 크기는 무조건 10Byte로 들어온다. 단, 10Byte가 넘는 데이터는 입력이 불가함. -> 한글의 경우 한글자당 2Byte 영문은 1Byte. (키보드에서 한키로 입력되는 숫자, 영어등은 1Byte. 없는 것은 2Byte)
②varchar2: 가변형 문자타입 name char(10) -> name 컬럼에 입력되는 데이터의 크기는 해당 데이터의 크기만큼 들어온다. 단, 10Byte가 넘는 데이터는 입력이 불가함.
ex: '이순신' -> 6바이트로 맞추어 들어옴 '김구' -> 4바이트로 맞추어 들어옴 '이에리사' -> 8바이트로 맞추어 들어옴 '박차고나온애가이뻐' -> 18바이트이므로 입력불가
③Nchar , Nvarchar2: 크기의 단위가 Byte가 아니라 글자수를 나타냄 name Nchar(10) -> name 컬럼에 입력되는 데이터의 크기가 유니코드등을 포함하여 글자수 최대 10글자까지 입력됨. 넘으면 당연히 입력 불가
ex: '이순신' -> 10개의 글자수로 고정되어 들어옴. -> 20Byte '김구' -> 10개의 글자수로 고정되어 들어옴. -> 20Byte '박차고나온애가이뻐' -> 10개의 글자수로 고정되어 들어옴. -> 20Byte 'John michael' -> 12개의 글자수(공백포함)이므로 입력불가.
name Nvarchar2(10) -> name 컬럼에 입력되는 데이터의 크기가 유니코드등을 포함하여 글자수 최대 10글자까지 입력됨. 넘으면 당연히 입력 불가
ex: '이순신' -> 3개의 글자수로 들어옴. -> 6Byte '김구' -> 2개의 글자수로 들어옴. -> 4Byte '박차고나온애가이뻐' -> 9개의 글자수로 들어옴. -> 18Byte 'John michael' -> 12개의 글자수(공백포함)이므로 입력불가.
- 날짜타입: date date예문: select sysdate, current_date from dual; select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), to_char(current_date, 'yyyy-mm-dd hh24:mi:ss') from dual;
※ 컬럼명에 숫자가 들어온다 하더라도 가장 앞에 숫자 0이 들어올 수 있는 개연성이 있을 경우 number 형이 아닌 문자형으로 지정하여야 한다 ※ 문자는 시작과 끝에 반드시 '을 사용해야 함. 사용하지 않을 경우 숫자로 인식함.
- table에 대한 comment 처리문 comment on table [table명] is '[주석내용]';
- table내 각 column에 대한 comment 처리문 comment on column [table명].[table내 주석처리할 column명] is '[주석내용]';
- 특정 테이블에 있는 각 컬럼에 대한 주석확인 처리문
select column_name, comments from user_col_comments where table_name = '[table명]';
- 특정 테이블의 컬럼명과 데이터 타입 조회 명령어
describe [table명]; 혹은 desc [table명];
- 특정 테이블 데이터 조회 select * from [table명];
- 데이터 입력하기 insert into [table명] values([column1 데이터], [column2 데이터], ~~~~~~~, [마지막 column 데이터]);
※ insert 명령어로 입력한 데이터는 디스크에 기록되는 것이 아닌 메모리에 기록하는 것. commit으로 디스크에 기록함
- 데이터 변경하기 update [table명] set [변경할 컬럼명1] = [변경할 데이터], [변경할 컬럼명2] = [변경할 컬럼명2] + [변경할 데이터] where [변경대상인 컬럼행] = [변경대상의 컬럼 데이터];
※ where 구문이 없을 경우 모든 행의 해당 컬럼이 변경됨 ※ 변경 데이터중, X = X + 200 으로 예를 들면 X컬럼에 있는 값과 200을 합산한 결과 데이터를 최종데이터로 치환한다는 의미임 ※ update 명령어로 변경한 데이터는 디스크에 기록되는 것이 아닌 메모리에 기록하는 것. commit으로 디스크에 기록함
- 데이터 삭제하기 delete [table명] where [삭제할 컬럼행] = [삭제할 컬럼행에 있는 열 데이터];
※ delete 명령어로 삭제한 데이터는 디스크에서 삭제하는 것이 아닌 메모리에서 삭제하는 것. commit으로 디스크에서 삭제함.