04-1 조건문
-1. 조건문이란?
-2. if문과 else문
if(조건식) {
수행문; //조건식이 참일 경우에 이문장을 수행
}
if(조건식) {
수행문; //조건식이 참일 경우에 이문장을 수행
}
else {
수행문2; //조건식이 거짓일 경우에 이 문장을 수행
}
package ifexample;
public class IfExample1{
public static void main(String[] args){
int age = 7;
if(age >= 8){
System.out.println("학교에 다닙니다.");
}
else{
System.out.println("학교에 안 다닙니다.");
}
}
-3. if-else if-else문
if(조건식1){
수행문1; //조건문1이 참일 경우 수행함
}
else if(조건식2){
수행문2; //조건문2가 참일 경우 수행함
}
else if(조건식3){
수행문3; //조건문3이 참일 경우 수행함
}
else(조건식4){
수행문4; //위의 조건이 모두 해당하지 않는 경우에 수행함
}
수행문5; //if-else if-else무니 끝난 후 수행함
1. if-else문 예제
아래의 예제는 하나의 조건을 만족하면 나머지 조건을 비교하지 않고 다음 수행문으로 넘어간다.
package ifexample;
public class IfExample2{
public static void main(String[] args){
int age = 9;
int charge;
if (age < 8){
charge = 1000;
System.out.println("취학 전 아동입니다.");
}
else if (age < 14){
charge = 2000;
System.out.println("초등학생입니다.");
}
else if (age < 20){
charge = 2500;
System.out.println("중, 고등학생입니다.");
}
else {
charge = 3000;
System.out.println("일반인입니다.");
}
System.out.println("입장료는 "+ charge + "원 입니다.");
//초등학생입니다.
//입장료는 2000원입니다.
}
}
2. if-if문 예제
아래의 예제 같은 경우에는 조건마다 각각 비교합니다.
따라서 if문을 2개 방문하고 출력결과가 예상과는 다르게 나오는 것을 알 수 있다.
package ifexample;
public class IfExample2{
public static void main(String[] args){
int age = 9;
int charge;
if (age < 8){
charge = 1000;
System.out.println("취학 전 아동입니다.");
}
if (age < 14){
charge = 2000;
System.out.println("초등학생입니다.");
}
if (age < 20){
charge = 2500;
System.out.println("중, 고등학생입니다.");
}
else {
charge = 3000;
System.out.println("일반인입니다.");
}
System.out.println("입장료는 "+ charge + "원 입니다.");
//초등학생입니다.
//중, 고등학생입니다.
//입장료는 2500원입니다.
}
}
-4. 조건문과 조건 연산자
1. if-else문
if (a > b)
max = a;
else
max = b;
2. 조건 연산자 : 간단한 조건문이고 선택이 두가지만 있는 경우에 주로 사용
max = (a > b) ? a:b;
-5. switch-case문
조건식의 결과가 정수 또는 문자열 값이고 그 값에 따라 수행되는 경우가 각각 다른 경우에는 switch-case문으로 구성하는 것이 코드도 깔끔하고 가독성도 좋다.
- switch-casea문에서는 default문이 if-else의 else역할이다.
- break문은 switch-case문의 수행을 멈추고 빠져나가도록 만든다.
- switch-case문은 주로 조건이 하나의 변수 값이나 상수 값으로 구분되는 경우 사용한다.
switch(조건){
case 값1 : 수행문1;
break;
case 값1 : 수행문2;
break;
case 값1 : 수행문3;
break;
default : 수행문4;
}
package ifexample;
public class SwitchCase {
public static void main(String[] args){
int ranking = 1;
char medalColor;
switch(ranking){
case 1:
medalColor = 'G';
break;
case 2:
medalColor = 'S';
break;
case 3:
medalColor = 'B';
break;
default:
medalColor = 'A';
}
System.out.println(ranking + "등 메달의 색깔은 " + medalColor + " 입니다.");
}
}
1. case문 동시에 사용하기
각 달의 날짜를 출력하는 예제를 생각해보자. 1,3,5 기자,7,8,10,12 월은 31일까지 4,6,9,11월은 30일까지이고 2월은 편의상 28일까지라고 하겠다.
case 1: case 3 : case 5 : case 7 : case 8 : case 10 : case 12 :
day = 31;
break;
case 4 : case 6 : case 9 : case 11 :
day = 30;
break;
case 2 :
day = 28;
break;
2. switch-case문에서 break문의 역할
break문을 사용하지 않으면 첫번째 case 조건을 만족했다고 하더라도 잇따라 나오는 문장까지 모두 수행되어서 맨 마지막 default문까지 다 수행한 후에 switch-case문을 나온다.
따라서 조건에 맞는 수행문을 수행한 후 switch-case문을 빠져나올 수 있도록 break문을 꼭 사용해야 한다.
-6. case문에 문자열 사용하기
자바7부터는 switch-case문의 case 값에 정수 값뿐 아니라 문자열도 사용할 수 있다.
이전에는 if (medal.equals("Gold")){ .. } 형태로 문자열을 비교하는 equals() 메소드를 사용해야했지만 자바 7부터는 문자열을 직접 case문에 사용할 수 있으므로 프로그램을 더 간결하게 구현할 수 있다.
package ifexample;
public class SwitchCase2 {
public static void main(String[] args){
String medal = "Gold";
switch(medal){
case "GOld":
System.out.println("금메달입니다.");
break;
case "Silver":
System.out.println("은메달입니다.");
break;
case "Bronze":
System.out.println("동메달입니다.");
break;
default:
System.out.println("메달이 없습니다.");
break;
}
}
}
04-2 반복문
-0. 반복문이란?
지금까지 우리가 배운 것만으로 1 부터 10까지 더하여 그 합을 계산해보자
package loopexample;
public class SwitchCase2 {
public static void main(String[] args){
int num = 1;
num += 2;
num += 3;
num += 4;
num += 5;
num += 6;
num += 7;
num += 8;
num += 9;
num += 10;
System.out.println("1부터 10까지의 합은 " + num + "입니다.");
}
}
그냥 보기에도 비효율적이다. 이렇게 반복되는 일을 처리하기 위해 사용하는 것이 '반복문'이다.
자바프로그램에서 사용하는 반복문의 종류에는 while문, do-while문, for문 이렇게 세가지가 있다.
-1. While문
while(조건식){
수행문1; //조건식이 참인 동안 반복 수행
....
}
수행문2;
....
1. 반복 횟수가 정해진 경우의 조건식
package loopexample;
public class WhileExample1 {
public static void main(String[] args){
int num = 1;
int sum = 0;
while (num <= 10){
sum += num;
num++;
}
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
}
}
2. 무한히 반복되는 경우
while(true){
...
}
-2. do-while문
while문은 조건을 먼저 검사하기 때문에 조건식에 맞지 않으면 반복 수행이 한번도 일어나지 않는다.
do-while문은 { } 안의 문장을 무조건 한 번 수행한 후에 조건식을 검사한다. 즉 조건이 만족하는지 여부를 마지막에 검사하는 것이다.
따라서 중괄호 안의 문장을 반드시 한번 이상 수행해야할 때 do-while문을 사용한다.
do{
수행문1;
...
} while (조건식);
수행문2;
...
package loopexample;
public class DoWhileExample {
public static void main(String[] args){
int num = 1;
int sum = 0;
do{
sum += num; //조건식이 참이 아니더라도 무조건 한번 수행함
num++;
} while(num <= 10);
System.out.println("1부터 10까지의 합은 " + sum + "입니다."); //55
}
}
-3. for문
for(초기화식;조건식;증감식){
수행식;
}
package loopexample;
public class ForExample1 {
public static void main(String[] args){
int i;
int sum;
for(i = 1, sum = 0; i <= 10; i++){
sum += i;
}
System.out.println("1부터 10까지의 합은 " + sum + "입니다."); //55
}
}
- 초기화부분과 증감식 부분도 콤마(,)로 구분하여 여러문장을 사용할 수 있다.
for문을 구성하는 요소는 코드가 중복되거나 논리 흐름상 필요없으면 생략할 수 있다.
(1) 초기화식 생략 : 다른곳에서 변수가 초기화 되었을 때
(2) 조건식 생략 : 어떤 연산 결과 값이 나왔을 때 for문의 수행을 멈추려는 경우
(3) 증감식 생략 : 연산이 복잡하거나 다른 변수의 연산결과값애 좌우되는 경우
(4) 요소 모두 생략 : 무한 반복
-4. 중첩된 반복문
package loopexample;
public class NestedLoop {
public static void main(String[] args){
int dan;
int times;
for(dan = 2; dan <= 9; dan++){
for(times = 1; times <= 9; times++){
System.out.println(dan + "X" + times + "=" + dan * times);
}
System.out.println();
}
}
}
<while, do-while, for문은 각각 어떤 경우에 사용하는 것이 가장 좋을까요?>
1. while문 : 참-거짓에 따라 반복문이 수행하는 경우
2. do-while문 : 수행문을 반드시 한 번 이상 수행해야 하는 경우
3. for문 : 반복횟수가 정해진 경우
-5. continue문
continue문은 반복문과 함께 쓰인다. continue문을 만나면 이후의 문장은 수행하지 않고 for문의 처음으로 돌아가 증감식을 수행한다.
- continue문은 특정조건에서는 수행하지 않고 건너뛰어야 할 때 사용한다.
package loopexample;
public class ContinueExample {
public static void main(String[] args){
int total = 0;
int num;
for(num = 1; num <= 100; num++){ //100까지 반복
if (num % 2 == 0) //num 값이 짝수인경우
continue; //이후 수행을 생략하고 num++ 수행
total += num; //num값이 홀수인 경우에만 수행
}
System.out.println("1부터 100까지의 홀수의 합은: "+ total + "입니다.");
}
}
-6. break문
반복문에서 break문을 사용하면 그 지점에서 더 이상 수행문을 반복하지 않고 반복문을 빠져나온다.
1. 0부터 시작해 숫자를 1씩 늘리면서 합을 계산할 때 숫자를 몇까지 더하면 100이 넘는지 알고싶다.
- 아래의 에제는 합이 105, num은 15가 출력 되었다.
- 그러면 1부터 15까지 더햇을 때 100이 넘는가 --> 아니다.
- 합이 105가 되었을 때의 num값은 14다.
- num 14값을 얻으려면 증감이 이루어지기 전에 반복문을 끝내야한다.
public class BreakExample1 {
public static void main(String[] args){
int sum = 0;
int num = 0;
for(num = 0; sum < 100; num++){
sum += num;
}
System.out.println("num: " + num ); //15
System.out.println("sum: " + sum ); //105
}
}
2. 해결
package loopexample;
public class BreakExample2 {
public static void main(String[] args){
int sum = 0;
int num = 0;
for(num = 0; sum < 100; num++){
sum += num;
if(sum >= 100)
break;
}
System.out.println("num: " + num ); //14
System.out.println("sum: " + sum ); //105
}
}
3. break문의 위치
반복문이 중첩된 경우, break문을 사용하면, 모든 반복문을 빠져나오는 것이 아니고 break문이 감싸고 있는 반복문만 빠져나온다.
'Programming > JAVA' 카테고리의 다른 글
[JAVA] List와 ArrayList차이(Generic) (0) | 2023.09.05 |
---|---|
[JAVA] Integer와 Int의 차이 (Wrapper Class란) (0) | 2023.09.05 |
Ch3. 자바의 여러 가지 연산자 (0) | 2021.07.17 |
Ch2. 변수와 자료형 (0) | 2021.07.06 |
Ch1. 자바 프로그래밍 시작하기 (0) | 2021.07.06 |
댓글