제어문 (if, swtich, for, while)
Java에서 제어문 활용할 때는 boolean 처리됩니다.
따라서, C언어와 같이 『 0 』 과 『 1 』이 분기 조건이 될 수 없습니다.
『if ~ else if ~ else』를 활용할 때는
아래로 갈수록 조건 범위가 넓어지게 하는 것이 좋습니다.
즉, 조건이 상단에 위치할수록 찾고자 하는 범위를 제한합니다.
[윤년 여부 판별]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int year = Integer.parseInt(sc.nextLine());
if(year % 400 == 0) {
System.out.println(year + "년은 윤년입니다.");
}else if(year % 100 == 0) {
System.out.println(year + "년은 평년입니다.");
}else if(year % 4 ==0) {
System.out.println(year + "년은 윤년입니다.");
}
}
}
for 문 vs while 문
for문 : 주로 횟수가 지정된 경우에 사용
while 루프: 얼마나 반복하는지를 결정하지 못하는 경우에 주로 이용.
『break』 : 루프를 벗어날 때 사용
{ } 개수와 관계없이 가장 가까운 루프에서 탈출
『continue』: 해당 시점 아래의 코드를 수행하지 않고 루프 재순회,
ex) continue를 통한 간결한 코드
삼항 연산자
내부적으로는 if문으로 처리되기에 미세한 속도차이는 있지만
현대 컴파일러에서는 그 차이가 매우 미미.
result = Math.max(a, b);
result = a < b ? b : a;
switch문
public class Main {
public static void main(String[] args) {
int score = 80;
switch(score/10){
case 9 :
System.out.println("A 등급");
break;
case 8 :
System.out.println("B 등급");
break;
case 7 :
System.out.println("C 등급");
break;
default :
System.out.println("탈락");
}
}
}
경우에 따라서는 switch 문이 가독성이 좋은경우가 있습니다.
부등호 연산, 논리 연산, 산술연산마저도 사용 없기에 정확한 값의 제어가 힘듦
- 『break』 문을 빼먹으면 다음 『case』문까지 실행되는데,
컴파일 시점에서 검출되지 않기 때문에 의도하지 않은 결과가 나올 수 있습니다.
- 세미콜로 『 ; 』과 콜론 『 : 』을 구분하기 힘들기도 합니다.
- switch문은 내부적으로 『if~else if~else』 문으로 변형되어 실행됩니다.
따라서 가독성은 좋더라도 속도면에서는 『if』문이 더 좋습니다.
Java에서 반복문은 for문, while 문, do-while 문 세 가지라고 보면 됩니다.
public class Main {
public static void main(String[] args) {
int i = 1, j = 1;
while( j-- <= 0 ) {
i++;
}
System.out.println("i = " + i +" and j = " + j );
}
}
while문 조건에서 j=1인 상태에서 비교대상 처리 후, j--가 실행됩니다.
논리 연산자는 '제어문'에서 여러 개의 조건을 검사하기 위해서 많이 사용합니다.
『A && B』 : A 조건도 '참'이고 B 조건도 '참'인 경우만 '참'으로 판단합니다.
그렇기에 A 참, 거짓과 관계없이 B 조건이 수행됩니다.
『A || B』: A, B 조건 둘 중에서 하나라도 '참'이라면 '참으로 판단합니다.'
그렇기에 A 참이면 B 조건은 수행하지 않습니다.
[참고 코드]
public class Main {
public static void main(String[] args) {
int x = 1;
System.out.println("====start====");
if( ++x > 1 ) {
System.out.println("[1] x = " + x);
}
if((++x == 3) || (++x==4)) {
System.out.println("[2] x = " + x);
}
if((++x==5) && (++x==6)) {
System.out.println("[3] x = " + x);
}
System.out.println("최종 x의 값: " + x);
System.out.println("====end====");
}
}
[분석]
OR(||) 연산자는 좌항이 true이기 때문에 더 이상 조건확인할 필요가 없어진 것이고,
AND(&&) 연산자는 좌항이 false이기에 더 이상 조건확인할 필요가 없어진 것.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 객체 소멸 (0) | 2021.03.02 |
---|---|
[Java] 절차적 vs 함수적 vs 객체지향 프로그래밍 비교 (0) | 2021.03.02 |
[Java] static 키워드 (0) | 2021.03.02 |
[Java] Map 인터페이스를 구현한 HashMap (0) | 2021.03.02 |
[Java] [예제] 사칙연산 계산기 (0) | 2021.03.02 |
댓글