728x90
- 제어문 종류
- 조건문
- [ if / if - else / if-else if / 중첩 if ]
- [ switch ]
- 반복문 - 반복 횟수 알 때 for 문, 모를 때 while 문
- for - for문, 중첩 for문
- while -while문, do-while문, break문, continue
- 조건문
1.조건문
1.1. if문
- 조건식 안 : 비교연산자, 논리 연산자로 구성 - true, false로 나와야 함
- ex) str.equals(), <=, || , ==
if(조건식) {
// 내가 쓰고 싶은 문장들 쓰기 ;
}
// 4) 가 컨벤션
1) if(x==0) ~~~; // 수행문이 한줄일 경우 {} 생략가능
2) if(x==0)
~~~;
3) if(x==0){~~~;}
4) if(x==0){
~~~;
}
주의
1) if(x=0){} // error. x=0에서 =은 대입연산자 이므로 사용 불가
2) if(x==0) // 1줄만 조건식으로 사용하겠다는 의미로 딱 1줄만 if문과 관련
System.out.println("working with if");
System.out.println("tab된거와 별개로 if문과 별개로 항상 작동");
1.2. if - else
- if 문의 조건식에서 false가 나올 때 수행할 수행문을 작성하기 위해 else가 존재. 없어도 상관없음
int x = 1;
if (x>0)
System.out.println("true");
System.out.println("working?"); // error. if-else가 같이 움직이는데 {} 없을때는 1개의 수행문만 작동함
else
System.out.println("false");
System.out.println("working?"); // 마찬가지로 if-else문과 별개
/*
if만 쓸때는 else가 없으니깐 [if() 수행문;] 이렇게 한 block으로 묶여서 그다음에 어떤 문장이 와도 상관없지만
[if() 수행문; else 수행문;] 이렇게 block일 때는 {}을 안쓸때 규칙을 지켜야함
헷갈리면 그냥 코드 치기. 빨간 밑줄 뜸 = 이런거 이해만 하고 외우지 말라는 대충 그런 뜻
*/
1.3. if - else if
- 조건식을 2개 이상으로 구성하고 싶을 때 사용
- 특징: 여러 조건식을 loop에서 true인 조건식을 만나면 그 조건식의 수행문을 수행하고 loop에서 벗어난다.
- loop: if - else if의 block이라 생각하면 됨
// int score; // 값 초기화 굳이 안해도 됨
char grade = ' '; // 변수 와 ' '으로 초기화 // D로 작성하고 시작하면 조건문이 모두 false일때 D의 값이 나옴
System.out.print("put score > ");
Scanner scanner = new Scanner(System.in);
// Scanner 사용하려면 import java.util.Scanner; 첫 줄에 넣기
int score = scanner.nextInt();
// int가 없으면 초기에 char grade = ''; 같이 변수 지정 및 값 초기화가 필요
if (score >= 90) grade = 'A';
else if (80 <= score && score < 90) grade = 'B';
else if (70 <= score && score <80) grade = 'C';
else grade = 'D'; // char grade의 초기화 값이 D 일때 생략 가능
System.out.println("Your score "+ grade +".");
1.4. 중첩 if 문
- if 조건 안에 if-else문 집어넣는 것.
- ex) 90~100 점인 학생은 a 학점인데 이중 97~100 점이면 a+, 아니면 a0
- 주의. 이때도 {} 없으면 else가 무슨 바깥 if문의 else 같지만 어쩌고 저쩌고,,, 걍 { } 사용
- 내 생각: 중첩 if문 보단 ? 조건식 사용 할 것
[backEnd/java] - 연산자(operator)- (조건식) ? a:b
- 중요개념
- ex) 에서 조건에 결과에 따라 a값을 주고 이후에 + or 0의 값을 준다. 값을 주고 저장하기 위해서는 변수가 필요하다.
- 변수는 메모리의 공간에 이름을 부여하고 어떤 type의 값이 올지 지정을 해주고 값을 기다리는 집같은 존재
- 집이 없으면 값은 갈 곳이 없다. = 이 값을 추출해서 표현할 방법이 없다.
1.5. switch문
- 조건이 많을 때 사용.
- 규칙
- if 문은 true값을 만나면 loop에서 빠져나오지만 switch문은 break를 통해서만 loop에서 나옴.
- else 역할 = default . 굳이 안써도 되고 break 쓸 필요 X -> else는 모든 조건이 false일 때 마지막으로 수행하는 문장이라서 어차피 이거 끝나면 loop 종료됨
- 제약 조건이 많아서 쓰기 힘들다.
- 제약조건
1. 조건식 결과 : 정수, 문자열
2. case 값 : 정수, 상수, 문자, 문자열 가능 / 실수, 변수 error
형식
switch (조건식) {
case 값1 :
수행문
break;
default :
수행문
}
제약조건
1. 조건식 결과 : 정수, 문자열
2. case 값 : 정수, 상수, 문자, 문자열 가능 / 실수, 변수 error
<예제>
int month = 1;
switch(month) {
case 3:
case 4:
case 5:
System.out.println("spring.");
break;
case 6: case 7: case 8:
System.out.println("summer.");
break;
case 9: case 10: case 11:
System.out.println("authom.");
break;
default:
// case 12: case 1: case 2:
System.out.println("winter.");
}
2. 반복문
2.1 for
1) for(초기화; 조건식; 증감식) {
for문의 조건식이 true일 때, 수행할 문장 == 수행문
}
조건식이 거짓이면 for 문을 빠져 나온다.
실행 순서 : 초기화 -> 조건식 -> 수행문 -> 증감식
// 초기화
// 변수의 타입이 동일할 때만 ,를 통해서 둘 이상의 변수를 초기화 가능.
for(int i=1,j=0; i<10; i++)
// 조건식
// 비교 연산자를 통해서 조건을 만듬, 변수가 2개 이상일 때 하나의 변수만 사용가능하고 2개 이상 사용하고 싶을 때 논리 연산자 이용
for(int i=1, j=1; i<10; c++)
for(int i=1, j=1; i<10 || j<20; c++)
// 증감식
// 반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식 주로 i++ 사용, i*=3(3배씩 증가) 도 사용 가능
for(int i=1; i<10; i++) //1씩 증가
for(int i=1; i<10; i*=3) //3배씩 증가
// 생략 가능 부분(상식적으로 생각 해보자)
for(int i=1; i<10; ) // 증감은 필수 아님
for(int i=1; ;) // 조건이 없어지면 항상 true로 간주 cf) while문은 아님
for(int i=1; ; i++)
for ( ; ; ) // for(true) 와 같음
int i=0;
for(;i<10;) // for(int i=0; i<10; ) 과 같음
2) 유형 연습
Q1) 1~n까지의 합 구하기
int sum = 0; // 0으로 초기화 필요
for(int i=1; i<=5 ;i++) {
System.out.println(sum +=i);
// sum = sum +i 인데 sum 초기화를 안할 시 [변수 + int] 로 되서 error
}
Q2) random 정수 만들기 -5~5 사이 수
/*
(Math.random() 이용) - 로또 할 때 유용할 듯
공식: 0.0 <= Math.random() < 1.0 사이의 double type 값을 반환
1~3 사이의 수를 원한다
0.0*3 <= (int)(Math.random()*3) < 1.0*3 -> 0<=M<3
0.0*3 + 1 <= (int)(Math.random()*3) +1 < 1.0*3 + 1 -> 1<=M<4
*/
for(int i=1; i<=5; i++) {
System.out.println((int)(Math.random()*10)-5);
}
2.2. 중첩 for문
계단을 만들어보자
*
**
***
****
for(int i=1; i<=5; i++) {
// i를 중접 for문의 조건문에 넣고 false가 될때 까지 inside for문이 돌고
// loop 빠져나오면 다시 outside for문 loop 돈다. outside for문에게 inside for문은 수행문일 뿐이다.
for(int j=1; j<=i; j++) {
System.out.print("*");
}
System.out.println();
}
2.3. while문
for문과 동일 하지만 생김새만 다름
for 문 | while 문 |
for(int i=1; i<=10; i++){ System.out.println(i); } |
int i =1; // 초기화 while(i<=10){ // 조건식 System.out.println(i); i++; // 증감식 } |
증감식 헷갈리지 말자
int i =5;
while(i-- != 0){
System.out.println(i); // 이때 결과값으로 4,3,2,1,0 이 나온다. for문과 달리 증감식에 영향을 받음
}
while(i != 0){ // 조건식을 풀어쓸 때 이렇게 됨. 먼저 조건 따지고
i--; // 1빼주고
System.out.println(i); // 실행
}
유형연습
Q1. 1부터 n까지 더했을 때 100이 넘지 않는 수 구하기
int n = 1;
int sum = 1;
while(sum < 100) {
System.out.println("1~" + n + " : " + sum);
n++;
sum = sum + n; // sum += n;
/*
++n;
sum = sum +n; // sum += n;
*/
/*
sum += ++n; //후위형은 또 안됨 후위형은 sum += n; 이후에 n++하기 때문
*/
}
2.4. do-while문
앞에 while문 작동순서는 조건식 -> 수행문 이다. 이는 while 수행문이 false일 때 아예 실행되지 않는다는 의미.
그래서 do-while문으로 false true에 상관없이 수행문을 우선 실행하는 것.
뭔가를 질문을 하고 true / false 해야되는 경우 비밀번호 칠때 내가 옳게 한지 아닌지 상관없이 우선적으로 비밀번호 치세용 하는 문구 같은 경우 do-while 문 사용
do{
// 수행문
} while (조건식);
int pw = 1234;
int try1 =0;
do{
System.out.print("비밀번호 작성");
Scanner scanner = new Scanner(System.in);
try1 = scanner.nextInt();
if(pw != try1) System.out.println("다시 하세요");
}while(pw != try1); // pw == try 가 false인 상황
System.out.println("님이 맞군요");
2.5. break문
조건문 중 switch문과 같이 반복 loop에서 빠져나오게 하는 역할. while과 if를 같이 사용할 때 주로 쓰임
int sum=0;
int i=0;
// while
while(true) { // for와 달리 조건식 안에 true를 넣어야 함
if(sum>100) break; // 100 넘어가면 loop 빠져 나옴
sum += ++i;
}
System.out.printf("i = %d, sum = %d %n" ,i,sum);
2.6. continue 문
반복문 도중 반복문의 끝으로 이동시킴. 그렇다고 반복 loop에서 나가는게 아님
조건
- 반복문 (while, for, do-while)에서만 사용 가능
- for문에서 continue 만나면 증감식으로 이동, 작동순서 : 초기화 -> 조건문 -> 수행문-> 증감식(얘가 마지막)
- do-while에서 while 조건식으로 이동
for(int i=0;i <= 10;i++) {
if (i%3==0) continue;
// 3의 배수이면 true 이후 continue 작동. 그럼 print 건너뛰기 i++ 로 이동
System.out.println(i);
}