java 개념정리 2 - 조건문, 분기문, 메소드

조건문

조건문이란?

  • 특정 조건에 따라서 실행의 흐름을 달리해야하는 경우에 사용
  • 조건문은 주어진 조건에 따라 서로 다른 실행을 할 수 있는 구문
  • if, else , else if, switch문 등의 명령 키워드를 사용!

if문

if문과 같은경우에는 만약 조건문이 true라면? 조건절 실행.
버스 전용차로 단속 프로그램의 코드를 보며 설명하겠음!

import java.util.Scanner;

public class BusRoadEx {

	public static void main(String[] args) {
		// 버스 전용차로 단속 프로그램
		// 버스 전용차로에 버스가 아닌 차종이 주행할 경우 단속
		// 단 토요일 및 공휴일은 단속을 하지 않음
		
		Scanner scan = new Scanner(System.in);
		System.out.println("1.월~금 2.토요일 3.공휴일");
		System.out.print("요일을 선택하세요(1~3) -->");
		int yoil=scan.nextInt(); //요일 정수 형태로 입력받음
		
		if(yoil==1) { //만약에 입력받은 값이 1이면?
			System.out.println("버스 전용차로 단속중입니다.");
			
			System.out.print("차종을 선택하세요(1,2)--> ");
			int car = scan.nextInt(); //차종을 입력받음
			
			if(car==1) //입력받은 차종의 값이 1이라면?
				System.out.println("버스임");
			else //1이 아니라면?
				System.out.println("버스 전용차로 위반!!");
		} else //입력받은 요일의 값이 1이 아니라면?
			System.out.println("토요일, 공휴일은 단속하지 않아요~");
		
		
		
	}

}

if(비가온다){
부침개를 먹어야지
} else {
굶어야지
}
비가 온다면? 비가오는게 찐이라면 부침개를 먹고
비가 오지 않는다면 굶는다. 라는 코드였습니다.
조건문이란 이런것입니다.

else if문

또 다른 예제를 보겠습니다.

import java.util.Scanner;

public class ElectronicEx {

	public static void main(String[] args) {
		// 전기요금 계산 프로그램
		// 전기를 많이 사용하면 누진율이 적용되어 단가와 기본요금이 상승한다
		// 다음의 단가표를 참고하여 전기 사용량을 입력하면 전기료가 출력되는 
        	//프로그램작성
		// 기본요금+(사용량*단가) if조건문 사용
		
		Scanner scan = new Scanner (System.in);
		
		
		System.out.print("전기 사용량을 입력하세요 --> ");
		double yang = scan.nextDouble(); //전기사용량 입력받음
		double y,z; //기본요금,단가
		
		if(yang<=200) { //전기 사용량이 200이하라면
			y=910; z=99.3; //기본요금은 910, 단가는 99.3으로 세팅
		}else if(yang<=400) { //전기 사용량이 200초과 400이하라면?
			y= 1600; z= 187.9;
		}	
		else //위의 조건절 둘 다 아니라면?
			y= 7300; z= 280.6;
			
		double money = yang+(y*z); //전기요금
		System.out.printf("사용량: %5.1f km/h\n",yang);
		System.out.printf("기본 요금 : %5.1f원\n", y);
		System.out.printf("단가 : %5.1f원\n", z);
		System.out.printf("전기 요금 : %6.1f 원", money);

	}

}

else if는 if문의 조건문이 아니라면 else였지만, else에 조건을 하나 달아주는 것입니다.
if(비가온다){
부침개를 먹어야지
}else if(눈이 온다){
눈사람을 만들어야지
}else {
굶어야지
}
비가 온다면? 부침개를 먹고, 비가 오지않는데 눈이온다면? 눈사람을 만들고
비도 안오고, 눈도 오지 않는다면 굶겠다는 코드입니다.

하나 더 해보겠습니다.

import java.util.Scanner;

public class BirthYearEx {

	public static void main(String[] args) {
		// 출생연도(birthYear)를 입력하면 다음 요구사항에 맞춰 마스크 구매
		// 가능한 요일을 출력하는 프로그램 작성하기
		//공적 마스크 판매 관련해서 출생 연도 끝자리를 이용한 5부제 실시
		//만 65이상 어르신은 언제든지 구매가능
		// 1,6 이면 월 2,7 화 3,8 수 4,9 목
		//중첩 if문 사용
		Scanner scan = new Scanner (System.in);
		System.out.print("출생년도를 입력하세요 -->> ");
		int birthYear = scan.nextInt(); //출생년도 입력받음
		if(birthYear<=1956) //65세이상이라면
			System.out.println("언제든지 구매 가능합니다.");
		else { //65세 미만이라면
		int x=birthYear%10; // 끝자리수 구하는거
		String yoil;
		if(x==0 | x==5) {  // |은 or 이라는 뜻 0이거나 5면
        	//둘 중 하나만 만족하더라도 실행함.
			yoil="금";
		} else if(x == 4 | x ==9) {
			yoil = "목";
		} else if(x==3 | x==8) {
			yoil = "수";
		} else if( x==2 | x==7) {
			yoil="화";
		} else
			yoil="월";
		
		System.out.print(yoil+"요일에 구매가능합니다.");
		}
	}

}

공적 마스크를 구매하는 요일을 출력하는 예제였습니다. 이런식으로 조건문은 여러가지를 쓸 수 있습니다. else if 여러개 사용한 거 보이시죠

switch문

public class SwitchEx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num = 4;
		
		switch(num) {
		case 1: //num ==1 인지 판단
			System.out.println("숫자는 일임");
			break;
		case 2: //num == 2인지 판단
			System.out.println("숫자는 이임");
			break;
		case 3: 
			System.out.println("숫자는 삼임");
			break;
		default :
			System.out.println("숫자는 일도 아니고 
            	이도 아니고 삼도 아님");	
		}
	}

}

switch문은 switch문(조건절)이 이거라면~~~???
하면서 case 뭐면?
case 뭐면?
case 뭐면?
이런 조건문입니다. ㅎㅎ
마지막의 default 문은 위의 케이스가 다 아니라면 실행하는 실행문입니다.
주의할 점은 break문을 꼭 case마다 써줘야한다는 점인데요.
안쓰면 case1하고 break문이 없으면 case2도 또 실행해버립니다.....
그니까 주의!!

반복문

for문

지정된 횟수에 따라 반복할 경우 주로 사용

public class MethodEx {

	public static void main(String[] args) {
		// 메소드라는걸로 모듈화 하면 조금 더 간결해 질 수 있음
		int sum = 0;
		for(int i=1; i<=10; i++) { //i가 1일때 10이될때까지반복
        	//한번 실행하고 나서 i는 1을 증가시키고 다시 반복한다.
			sum+=i; //sum에 i를 더해준다.
		}
		System.out.printf("1부터 10까지의 합 : %d\n", sum);
		
		sum=0;
		for(int i=10; i<=100; i++) {
			sum+=i;
		}
		System.out.printf("10부터 100까지의 합: %d\n", sum);
	}

}

1부터 10까지의 총 합과, 10부터 100까지의 총합을 구하는 예제였습니다.

while문

조건식의 결과가 참일 때 반복할 경우 사용(do~while문도 마찬가지)

public class GongBaesu {

	public static void main(String[] args) {
		// 3과 8의 공배수 = 3으로도 떨어지고 8로도 나누어떨어지는것
		// 최소공배수 = 그 중에서 제일작은 수
		int num=1;
		int minNum=0;
		while(num<=100) {
			if(num%3==0 && num%8==0) { // 3과 8로 각각 나누어 
            		//나머지가 0이어야함
			System.out.println("공배수 : "+num);
			if(minNum==0)
			minNum = num; //공배수 중의 최솟값이므로 최초 출현한 
            	//공배수가 최소 공배수임
			}
			num++;
		}
		System.out.println("최소공배수 : "+minNum);
	}

}

3과 8의 공배수를 구하고, 최소 공배수를 구하는 예제입니다.
num이 100이하일 때만 조건문을 실행하도록 하고싶을 때에는 while문을 사용합니다.

do ~ while문

public class DoWhileEx {

	public static void main(String[] args) {
		int i=1;
		int sum = 0;
		do {
			sum+=i;
			i++;
		} while(i<=10);
		System.out.println("1부터 10까지의 합은"+sum);
	}

}

while문에 있는 조건이 true일 때 까지만 do문을 실행하는 조건문입니다.
그러니까 i가 10이하일 때까지만 sum에 i를 더해준다는 것입니다.
조건문을 확인한 후 do문을 실행해줍니다. 그리고 반복~~~

분기문

continue문

반복문에 continue키워드를 사용하면 이후 실행을 생략하고 다시 반복문의 처음으로 돌아감

public class ContinueEx {

	public static void main(String[] args) {
		int sum = 0; //sum 초기화
		for(int i =1; i<=100; i++) { //i=1일 때 i가 100이하일때까지 
        	//반복 , i는 조건문을 실행완료 하면 1씩 증가함.
			if(i%2==1)
				continue; // continue문을 만나면 실행안하고
                	//다시 for문의 처음으로 돌아가서 i를 1증가시킨 후 for문 
                    	//실행	
			else
				sum+=i;
		}
		System.out.println("1부터 100까지 짝수의 합은"+sum);
	}

}

continue문으로 짝수일 때에만 sum에 값을 더해줘서 짝수의 합을 구해주는 프로그램이었습니다.

break문

continue문은 for문을 빠져나가고 증감식을 실행 한 후에 다시 for문으로 들어가지만,
break문은 아예 for문과 같은 조건문을 나가버립니다.

import java.util.Scanner;

public class BusCard {

	public static void main(String[] args) {
		// 버스 1회당 사용요금은 1250원으로 카드를 사용할때마다 사용횟수와 
        	//사용후 잔액을
		// 출력하는 프로그램 생성
		// 표준 입력으로 충전금액을 입력
		// 최초 금액을 출력한 다음, 사용 횟수와 함께 잔액을 출력
		//잔액이 부족하면 출력 종료
		
		Scanner scan = new Scanner(System.in);
		System.out.print("최초 충전금액 -->> ");
		int first = scan.nextInt();
		System.out.printf("%d원이 충전되었음\n", first);
		int i=0;
		while(true) {
			first = first-1250;
			i++;
			System.out.printf("%d회 사용한 후 현재 잔액은 %d원\n"
            		,i,first);
			if(first<1250) 
				break; //잔액이 1250원 이하라면 조건문 나가버림
		}

	}

}

while문을 나가버리니까 반복문이 바로 끝나버리는 것입니다!

라벨

라벨이라는 것도 있는데, 기존의 분기문은 {} 하나를 나가는 것이었지만, 라벨은 {}가 중첩되어 있을 때에 원하는 {}의 위치를 나갈 수 있도록 해줍니다.

public class LabelEx {

	public static void main(String[] args) {
		Loops: //loop는 반복문 위에 바로 붙어있어야함
			for(int i=2; i<=9; i++) {
				for(int j=1; j<=9; j++) {
					if(j==5)
						break Loops;// 아예 탈출
					//continue Loops; // i를 증가시키러감
					//continue; // 다음턴으로 이동 j=6으로!
					
					System.out.println(i+"*"+j+"="+i*j);
				}
			}

	}

}

Loops가 라벨 이름입니다. Loops바로 밑줄을 탈출하겠다는 뜻입니다.

메소드

메소드를 이용한다면
-매번 중복되는 코드를 함수로 만들어 재사용하면 프로그램 코드 양이 줄어들고 간결해집니다.
-코드를 모듈화 하여 가독성을 높이므로 프로그램의 품질을 향상시킵니다.

메소드는 정말 중요한 것이 있습니다.

반환타입이 int형이면 반드시 int형을 return해줘야하고
반환타입이 String형이면 반드시 String형을 return 해줘야합니다.
반환값이 없는 경우엔 void형으로 선언합니다.
public static void sum(){
System.out.println("합은 없지롱^^");
}
과 같이요. return이 없어도 될 때는 void로 선언합니다.

public class MethodEx2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("합(1~10) : "+sum(1,10)); 
        	// 필요한 곳에서 호출함
		//(1부터 10까지의 합을 계산 후 반환해 달라)
		System.out.println("합(10~100) : "+sum(10,100));
	}
	public static int sum(int i1, int i2) { // i1,i2는 매개변수 --> 
    	//매소드정의
		int sum=0;
		for(int i = i1; i<=i2; i++)
			sum+=i;
		return sum; // 결과값은 sum에 저장되어있고 sum을 반환
	}

}

메인 메소드 밑에 int형 메소드 sum을 선언했습니다.
int형이니까 반환값도 int형 sum 을 반환해줍니다.

좋은 웹페이지 즐겨찾기