복습
char 자료형
- 영문자 1글자는 1바이트
- 한글자 1글자는 2바이트
- 하지만 char 안에는 모두 한글자만 가능
char c1 = 'k'
char c2 = '안'
참조형
- 기본 자료형과 달리 값 저장 방법이 다르다.
- 값은 힙에 주소는 스택에 저장된다.
자바의 구조, api 문서
- jre의 패키지는 비슷한 클래스끼리 묶여져 있다.
- 바이트 코드를 가져와서 import해서 사용하는것이다.
- 바이트 코드 = 기계어
- 그것의 설명서가 api문서
필드 : 쉽게 말하면 멤버변수
생성자
- 여기서 제공되는 생성자중 하나를 선택해서 써야함.
- 클래스명과 반드시 동일한 이름으로 되어있고, 메소드라 무조건 괄호가 있는 형태
if~else if~else 문
- 가장 먼저 만족한 하나만 실행하고 조건문 나간다.
if (score >= 90)
grade = 'A';
else if (score >= 80)
grade = 'B';
else if (score >= 70)
grade = 'C';
else if (score >= 60)
grade = 'D';
else
grade = 'F';
- 가장 먼저 해당하는 것의 문장을 실행하고 if문 전체를 나간다
ex) 90점이면 60점이상이므로 아래 else if 도 만족하지만 첫번째에서 걸리므로 'A'만 출력된다.
난수발생 공식
- 난수 = (정수화)(Math.random() * (상한값 - 하한값 + 1)) + 하한값;
난수발생 공식 설명
0.0 <= Math.random() < 1.0
- 실수형태의 난수 발생시킴.
* 자세한 설명은 아래에서
난수발생 예시
// 주사위 번호 뽑기 : 1 ~ 6
int num = (int) (Math.random() * 6) + 1; // 1~6
System.out.println("num = " + num);
if (num == 1) {
System.out.println("1번");
} else if (num == 2) {
System.out.println("2번");
} else if (num == 3) {
System.out.println("3번");
} else if (num == 4) {
System.out.println("4번");
} else if (num == 5) {
System.out.println("5번");
} else {
System.out.println("6번");
}
난수 발생 2가지 방법
1. Math 라는 클래스 중 random()이란 '메소드'를 사용. Math.random()
2. Random 이라는 클래스를 import 하고 랜덤 객체를 생성해서 난수 발생
// 난수 발생
// 0.0 <= Math.random() < 1.0
// 1 ~ 6
Math 클래스 (by API 문서)
- java.lang의 클래스이므로 import필요없다.
java.lang.Object
java.lang.Math
- Object 클래스가 자기 부모이다(상속관계)
1. Math 클래스의 필드 = 멤버변수
* 직접 클래스를 우리가 만들떈 필드를 변수 형태로 만들게 됨.
- E는 자연로그 2.7xx , PI는 파이(원주율) 3.14xx
- static 이 붙은 변수(필드) = 정적 필드
- E는 자료형이 static double
- PI도 자료형이 static double
+ 정적 필드
- 정적 필드 들은 객체를 따로 만들지 않고 클래스명.필드 로 접근해서 바로 해당 필드 값 사용가능
ex) Math.E , Math.PI 하면 값이 나옴
System.out.println("E = " + Math.E); //E값
System.out.println("PI = " + Math.PI); //PI값
System.out.println(Math.random()); //난수 발생
2. Math 클래스의 생성자
- Math 클래스는 객체를 생성할 필요가 없으므로 (static) 생성자가 없다.
ex) Math m = new Math(); 라는 식으로 사용 불가!
- Math 클래스는 아무 생성자도 제공이 안된다
- 즉, 생성자 자체가 없기때문에 new를 쓰면 오류가 남.
3. Math 클래스의 메소드
- 정적 메소드 = static이 붙은 메소드
- Math는 전부 static이 붙은 정적메소드 뿐이다.
- Math의 메소드도 객체를 생성해서 사용하지 않고 클래스명.메소드 해서 바로 사용함
- Math 메소드 중 random() 메소드가 난수 발생 시켜주는 메소드
+ random() 메소드 :
- Type : static double
- double 형이니 실수값으로 처리됨, 양수로 double 형 값을 리턴한다.
- 0.0 보다 크거나 같고, 1.0 보다 작은 범위의 난수를 리턴
- double이 return 되므로 정수로 값을 받고 싶으면 (int) 강제 형변환
Math.random() 난수 공식의 이해
- 공식 : 난수 = (정수화)(Math.random() * (상한값 - 하한값 + 1)) + 하한값;
ex) int num = (int) (Math.random() * 6) + 1; // 1~6
- 0.0 <= Math.random() < 1.0
1. 1.0 미만 이니 1.0 이 포함되지 않는다.
2. Math.random() * 6 을 하면 0.0 <= 난수 < 6 까지 난수발생
- 즉 5.99999..까지 난수가 발생되지 6이 발생될 수 없다.
3. 그래서 +1 을 시키는 것
4. 난수값이 0.0 <= 난수 이므로 0.0 이 나온다면 6을 곱해도 0.0 이다.
- 이걸 int로 형변환하면 0이 된다.
5. 그래서 + 하한값 을 해주는 것
예시1
- 1~45사이의 난수 발생
int random;
random = (int) (Math.random() * 45 + 1);
System.out.println("난수 = " + random);
예시2
// 5~70사이의 난수 발생
int r;
r = (int) (Math.random() * 66) + 5;
- 일단 5부터가 아니라 0 부터의 기준으로 생각해야한다
- 그러면 5 ~70까지 몇개의 숫자가 있는지 생각 (70-5+1)
- 그다음 5부터 시작한다 생각해서 5를 더해주면 된다.
switch~case문
switch(변수){
case 값1: 실행될 문장;
break;
case 값2: 실행될 문장;
break;
default: 위의 case를 만족하지 않을때
실행될 문장;
}
- case를 빠져나가려면 반드시 break;를 써야한다.
- break;를 안쓰면 밑으로 내려간다.
- 아무것도 만족 안하면 아래의 default값을 실행한다.
break
- 반복문, 조건문(switch~case 만)에서 빠져나갈 때 break;
- break문은 현재 위치에서 가장 가까운 switch문 또는 반복문을 벗어나는데 사용된다.
- 주로 if문과 함께 사용되어 특정 조건을 만족하면 반복문을 벗어나도록 한다.
switch~case문 사용법
- 그냥 case 값: 이라 적고 그걸 만족하면 그 아래있는 case 가 실행됨
switch (score/10) {
case 10 :
case 9 :
grade = 'A';
break;
case 8 :
grade = 'B';
break;
+ score/10 == 10일때, case 9의 문장 실행됨, 즉 100점일때 break문이 없기때문에 내려감
switch~case문 단점
- 100~90 이런 범위값 처리위해서 위의 예제처럼 나누기하는등의 처리가 필요함
반복문 : 반복적인 걸 할 때 사용
- for , while, do~while
for문
for(초기값,조건식,증감식){
반복 실행할 문장;
}
- 초기값이 있어야함
- 비교연산자로 조건식을 씀
- 증감연산자로 증감식을 씀
- 조건식을 만족하는 경우에만 안의 식들을 수행함
- 만족안하는 경우엔 수행 안함
자바의 if 초기값 설정 2가지 방법
1. 선언하면서 초기화
2. 선언은 위에하고 for문 ()안에서 초기화
- 자바는 두가지 방법 다 가능하다
- C등의 언어는 2번 방법만 가능
if문 작동원리 예시1
for (int i = 1; i <= 10; i++) {
System.out.println(i + "사랑해요.");
}
1. i=1로 설정된다.
2. i<=10을 만족한다
3. 1사랑해요 출력
4. i++해서 i==2가 된다
5. i<=10 만족한다
6. 2사랑해요 출력
7. i++해서 i==3이 된다.
8. ...
9. 10이 되면 <=10 만족하기떄문에
10. 10사랑해요 출력하고
11. i++되어 11이 되면
12. <=10만족하지 않기 때문에
13. 출력안하고 나가게됨!
지역변수
- 지역변수는 초기화가 자동이 안됨. -> 초기화는 필수!
- 선언된 {}안에서만 사용가능
- 스택이란 메모리 영역에 공간을 할당받음
- 메소드가 실행될때 할당받고 종료되면 자동으로 지워진다
+ 멤버변수(클래스 변수, 인스턴스 변수)와 배열의 초기화는 자동(기본값으로)
if문 작동원리 예시2
int sum = 0;
for(int i = 1; i<=3; i++)
{
sum = sum + i;
}
변수값 변화
변수 sum = sum + i
0 1
1차 1
1 2
2차 3
3 3
3차 6
4 (조건 불만족) -> 끝. sum은 6이고 i는 4인 상태로 끝
- 지역변수 이므로 int sum = 0 라고 초기화를 꼭해줘야함
- 덧셈일땐 영향이 없는 0으로 초기화
+ int 형 i 도 for 문안의 지역변수 이기 때문에 for문 안에서만 사용 가능하다.
+ for문 밖에서 i를 사용하면 오류가 생김
지역변수 정의
1. 메소드 안에서 정의되는 변수 (그 안에서만 사용가능 sum은 메인 메소드의 지역변수
2. 매개 변수
3. 블럭문(조건문, 반복문) 안에서 사용되는 변수 i는 for문 안의 지역변수
* 증감식 영역에서 i++, ++i, i=i+1, i+=1 다 가능함
+ \t는 탭키만큼 간격벌림, print("\t") 라고 하면 된다.
while문
while(조건문){
반복 실행할 문장;
}
- 비교연산자로 조건문을 작성하고 조건이 참일때만 반복수행함.
- 초기값이 조건식에 안맞으면 아예 실행 안됨
while문 주의
- for문은 조건식, 증감식, 초기값 자리가 있지만 while은 조건식 외는 내가 설정해야한다
- 일반적으로, 초기값은 while문 밖 위에
- 일반적으로, 증감식은 보통 while문 맨 밑에
- 증감식 안쓰면 항상 참이라서 무한루프가 돌아감
do~while문
do{
반복 실행할 문장;
}while(조건식);
- 조건식이 거짓이라도 최소 1번은 실행됨
- 끝에 세미콜론 기억하기!!
do~while문 예시
int i = 1;
do {
System.out.println(i + "사랑해요");
i++;
}while(i<=10);
- i 초기값이 11이어도 11사랑해요 가 출력된다.
- i 가 10일때, 10사랑해요를 마지막으로 i는 11이 되어 조건 불만족하여 빠져나가게된다
do~while문 예제
System.out.println("메세지를 입력하세요?");
System.out.println("프로그램을 종료하려면 q를 입력하세요");
Scanner sc = new Scanner(System.in);
String input;
do {
System.out.println(">");
input = sc.nextLine(); //문자로 입력을 받는다.
System.out.println("입력문자 : " + input);
}while(!input.equals("q"));
System.out.println("프로그램 종료");
sc.close();
- String을 입력받기 위해 .nextLine() 메소드로 입력받는다.
- do while은 최소 1번은 실행하므로 실행 하자마자 >가 출력되며 입력할 수 있음
- 그 뒤 q를 입력시 do while을 더이상 못하고 나간다
- scanner 함수를 안전하게 close()로 닫아주는게 좋다.
+ input.equals("q") 메소드
- 값을 비교할때 사용하는 메소드, 값이 일치하면 true인데 앞에 NOT연산자 !를 붙여서 q일땐 false를 만들어서 반복문을 빠져나오게 한다.
+ nextLine() 메소드
- 문자열을 받을때 nextLine() 사용
- 결과는 String 타입 자료형에 저장한다.
- 뛰어쓰기 있어도 된다.
- 사용자가 입력한 한 줄을 통째로 받음.
지역변수 정리
- 메소드 안에서 사용되는 지역변수 = 매개변수 = 스택에 저장됨 = 메소드 종료시 삭제됨
- 블럭문 안에서 사용되었던 i 같은것도 지역변수
'국비지원 과정 > JAVA' 카테고리의 다른 글
코딩 6일 / 2022.06.28 / JAVA의 클래스,객체,필드,생성자 (0) | 2022.07.01 |
---|---|
코딩 5일 / 2022.06.27 / JAVA의 배열2,참조형,클래스,객체 (0) | 2022.06.28 |
코딩 4일 / 2022.06.24 / JAVA의 제어문3,메소드,배열1 (0) | 2022.06.27 |
코딩 2일 / 2022.06.22 / JAVA의 변수,연산자,제어문1 (0) | 2022.06.23 |
코딩 1일 / 2022.06.21 / JAVA란,JAVA의 자료형 (0) | 2022.06.22 |