if문
조건식의 연산 결과에 따라 블록 내부 문장의 실행 여부를 결정할 수 있음
- if 문
- 조건식이 true 일 경우에만 실행문이 실행됨
- if(조건식) 다음의 { } 를 생략할 수 있음. 하지만, 생략할 경우 if문에 포함되는 실행문은 단 한 줄만 포함됨. ( ; 이후 바로 실행되기 때문)
if(조건식){
실행문;
실행문;
}
- if - else 문
- 조건식이 true일 경우 if 블록의 실행문이 실행되고, flase 일 경우 else 블록의 실행문이 실행됨
if(조건식){
실행문;
실행문;
}else{
실행문;
}
- if - else if - else문
- 처음 if문의 조건식의 조건문이 true일 경우 처음 if문의 블록이 실행되고, false일 경우 다음 조건식의 결과에 따라 실행 블록이 달라짐.
- else if 문의 수는 제한이 없으나, 너무 많은 else if 문은 실행 속도를 느리게 함
- 마지막 else 블록은 생략되도 상관없음
실습 1
실습 2
논리연산자
- 논리곱( &&, & ), 논리합( ||, | ), 배타적 논리합 ( ^ ), 논리부정( ! ) 연산을 수행
- 논리연산자의 피연산자는 boolean 타입만 사용 가능하며, 결과 또한 boolean 값
boolean b1 = true;
boolean b2 = false;
boolean b3 = true;
- 논리곱 ( &&, & ) - 이항연산자 / ‘ampersand’라 읽음
- 피연산자가 모두 true일 경우에만 연산 결과가 true
- System.out.println(b1 && b2); → b2가 false이므로 결과는 false
- System.out.println(b1 && b3); → b1과 b2 모두 true이므로 결과는 true
- 피연산자가 모두 true일 경우에만 연산 결과가 true
- 논리합 ( ||, | ) - 이항연산자 / ‘바바’라고 읽음
- 피연산자 중 하나만 true면 연산 결과는 true
- System.out.println(b1 || b2); → b1 이 true이므로 결과는 true
- System.out.println(b1 || b2); → b1과 b2가 모두 false여야 결과가 false
- 피연산자 중 하나만 true면 연산 결과는 true
- 논리 부정 ( ! ) - 단항연산자 / ‘not’이라 읽음
- 피연산자의 논리값을 바꿈 (true는 false로, false는 true로)
- System.out.println(!b1); → b1이 true이므로 결과는 false
- System.out.println(!b2); → b2이 false이므로 결과는 true
- 피연산자의 논리값을 바꿈 (true는 false로, false는 true로)
- 배타적 논리합 ( ^ ) - 이항연산자 / ‘exclusive or’라 읽음
- 피연산자가 서로 다른 값일 경우만 연산 결과가 true
- System.out.println(b1 ^ b2); → b1은 true, b2는 false로 서로 다르니까, 결과는 true
- System.out.println(b1 ^ b3); → b1, b3 모두 true로 서로 같으니까, 결과는false
- 피연산자가 서로 다른 값일 경우만 연산 결과가 true
실습 1
실습 2
삼항연산자
- 형태
- 조건식 ? 피연산자1 : 피연산자2
- 결과
- 조건식의 연산결과가 true > 결과는 피연산자 1
- 조건식의 연산결과가 false > 결과는 피연산자2
int b1 = (5>4) ? 50 : 40; *//조건식이 true이므로 b1은 50이 된다.*
- 피연산자1, 피연산자2 에는 주로 값이 오지만, 경우에 따라 연산식이 올 수 있음
- 삼항 연산자가 익숙하지 않다면, if문을 사용해도 좋음
int b2 = 0;
if(5 > 4){
b2 = 50;
}else{
b2 = 40;
}
실습
switch문
- 어떤 변수의 값에 따라서 문장을 실행할 수 있도록 하는 제어문
- switch문의 형태
- switch문에서 사용하는 키워드는 switch, case, default, break
switch(변수){ case 값1 : // case는 if와 비슷한 역할 실행문; break; case 값2 : 실행문; break; default; // default는 else와 비슷한 역할 }
- switch문의 예시
int value = 1;
switch(value){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3 :
System.out.println("3");
break;
default :
System.out.println("그 외의 숫자");
}
- value의 값이 1일 경우 1이 출력, 2일 경우는 2가 출력, 3일 경우는 3이 출력, 그 외에는 그 외의 숫자가 출력됨
case 1:
System.out.println("1");
case 2:
System.out.println("2");
case 3 :
System.out.println("3");
default :
System.out.println("그 외의 숫자");
- 위의 예시에서 break를 제거하면 value가 1일 경우 1이 출력된 후 switch문장을 빠져나가지 않고 1,2,3, 그 외의 숫자가 연속해서 실행됨 (모든 결과가 출력되는 것)
- break문장이 있을 경우와 없을 경우를 확실하게 구분할 수 있어야 함
참고
- JDK7 이전에는 switch 다음 괄호 안에 정수(int) 타입의 변수만 올 수 있었음
- But, JDK7부터는 switch 다음 괄호 안에 문자열(String) 타입의 변수도 올 수 있음
String str = "A";
switch(str){
case "A":
System.out.println("1");
case "B":
System.out.println("2");
case "C" :
System.out.println("3");
default :
System.out.println("그 외의 글자");
}
- 문자열의 값에 따라서 case 블록의 내용이 출력되는 것을 알 수 있음
실습
- 어려웠던 점
- month가 이미 선언되어 있는 걸 못 보고 int month;로 선언함
- season에 계절 값만 넣어주면 되는데 자꾸 System.out.println( )로 출력하려 했음
- case 1: case 2: case 3 이런 식으로 케이스를 한 번에 배치할 수 있는지 몰라서 월별로 케이스문을 다 썼음
- 자꾸 한 문장 뒤에 ; 빠뜨렸음
while문
- 반복문
- 실행문을 반복적으로 실행해야 할 때 사용
- 반복문의 종류
- while문, do-while문, for문
- while문의 형태
- 조건문의 실행 결과가 true일 동안 반복해서 실행
while(조건문){
실행문;
}
- while문 예시
- 10번 반복하면서 0부터 9까지 출력하는 반복문
int i = 0; // while에서 사용할 변수를 선언
while(i < 10){
System.out.println(i);
i++; // 조건문을 원하는 만큼만 반복하고 빠져나가기 위한 부분
// i = i + 1;과 같음
}
- 1부터 100까지의 합을 while문을 이용하여 구현
public class WhileExam2 {
public static void main(String[] args) {
int total = 0; // i의 값을 누적할 변수를 선언
int i = 1;
while(i <= 100){
total = total + i;
i++;
}
}
}
실습 1
실습 2
- 어려웠던 점
- ‘실행시간이 10초를 초과하여 실행이 중단되었습니다.’ 에러 메시지가 뜸
- i++가 if문 안에 있으면 맨처음 i가 1일 때 if문 안으로 들어가지 못해서 i값이 증가되지 않아 실행 오류가 발생함
- if문 바깥의 while문으로 옮김
- ‘실행시간이 10초를 초과하여 실행이 중단되었습니다.’ 에러 메시지가 뜸
do while문
- 무조건 한 번은 실행되는 반복문 (do 블럭 안에 들어간 문장은 꼭 한 번은 실행됨)
- cf) while문: 조건이 만족하지 않는다면 한번도 반복하지 않을 수 있음
do{
실행문; // do 블럭 안에 들어간 문장은 꼭 한 번은 실행됨
}while(조건문); //while문으로 조건 설정
- do-while 예시
- 10이 아닐 때만 입력받은 값을 산출, 10이면 반복문 종료 (Scanner 이용)
import java.util.Scanner;
public class DoWhileExam {
public static void main(String[] args) {
int value = 0;
// Scanner: java.util 패키지에 있는 클래스. 키보드로부터 값을 입력받을 때 유용한 클래스
Scanner scan = new Scanner(System.in);
//위처럼 작성하면 키보드로부터 값을 입력받을 수 있는 Scanner객체가 생성됨
do{
value = scan.nextInt(); // Scanner클래스를 미용해 키보드로부터 숫자값을 입력받음
System.out.println("입력받은 수 : " + value);
}while(value != 10); // 입력받은 값이 10이 아닐 경우에는 계속 반복
System.out.println("반복문 종료");
}
}
- do-while 예시 2
- i가 10보다 작을 때 1씩 증가하는 값 산출, 10 이상이면 반복문 종료 (Scanner 이용)
import java.util.Scanner;
public class DoWhile {
public static void main(String[] args) {
int i = 0;
Scanner scan = new Scanner(System.in);
do {
i = scan.nextInt();
System.out.println("입력받은 값은 " + i);
i++;
}while(i < 10);
System.out.println("반복문 종료");
}
}
for문
- 변수초기화, 조건식, 증감식이 모두 한 줄에 있음
- 초기화식은 최초 한 번만 수행
- 조건식을 수행 > 수행결과가 false라면 for 반복문을 빠져나감
- 수행 결과가 true라면 실행문을 수행
- 증감식을 수행
- 2번부터 4번까지 반복적으로 수행
for(초기화식; 조건식; 증감식){
실행문;
실행문;
}
- for문 예시
- for문으로 1부터 100까지의 합을 구하는 프로그램
int total = 0; *//1부터 100까지 합한 결과값을 담기위한 변수 선언* for(int i = 1; i <= 100; i++){ *//1부터 100까지 반복하기 위한 for 반복문* total = total + i; *// 1부터 100까지 반복해서 total 변수에 값을 누적* } System.out.println(total); *//결과값 출력*
- for문으로 1부터 100까지의 짝수의 합을 구하는 프로그램
-
public class ForExam { public static void main(String[] args) { int total = 0; for(int i = 1; i <= 100; i++){ if(i % 2 != 0){ // 2로 나눈 나머지가 0이 아니라는것은 홀수를 의미 continue; // 홀수일 경우 total = total + i; 문장이 실행되지 않으므로, 결과적으로 짝수만 더해줌 } total = total + i; } System.out.println(total); } }
- continue
- continue 이하의 반복문은 실행시키지 않은 채 다음 순서로 넘어가 반복문은 계속 실행
- 위의 예시에서, continue를 만나면 total = total + i;는 실행하지 않고 i++로 넘어가 반복문 실행
- break
- break를 만난 지점부터 반복문을 아예 빠져나옴
실습
'☕ Java 웹 프로그래밍 > Java' 카테고리의 다른 글
[프로그래머스] Java(자바) 입문 | Part 5. 클래스와 객체 (0) | 2023.05.02 |
---|---|
Java | 클래스, 객체, 인스턴스, 인스턴스화 (0) | 2023.05.01 |
[프로그래머스] Java(자바) 입문 | Part 4. 배열 (0) | 2023.04.28 |
[프로그래머스] Java(자바) 입문 | Part 2. 변수와 계산 (0) | 2023.04.26 |
[프로그래머스] Java(자바) 입문 | Part 1. 자바 시작하기 (0) | 2023.04.26 |