학원/Java

21-10-22 if, else, else if

링규 2021. 10. 22. 16:12

if문

 

사용자로 부터 정수를 하나 입력받는다

관계(비교) 연산의 결과를 갖고 해당 명령을 실행할지 안할지를 결정하는 명령

 

Scanner sc = new Scanner(System.in);
System.out.println("정수를 입력하세요: ");
int a = sc.nextInt();
boolean result = a%2==0;
System.out.println("입력한 정수가 짝수인가요?" + result);


if(b==0) {
System.out.println("입력한 정수는 짝수입니다");
} 

if(b!=9){
System.out.println("입력한 정수는 홀수입니다");
}

 

if문의 특징

( ) 안의 값이 true이면 { } 안의 명령을 실행, false이면 실행X

( ) 안의 값이 true이면 실행해야할 명령이 두개 이상일 수 있으므로, { }로 그 경계를 구분해준다.

( ) 안의 값이 true일 때 실행할 명령이 한 개라면, 중괄호 생략가능

if(true) { } => { }안의 내용은 무조건 실행 

( ) 안에는 비교연산과 논리연산이 조합된 복합연산식 표현이 가능

if((x==0)&&(y!=0)||(z==0)) { }

 

if (result) System.out.println("입력한 정수는 짝수입니다.");
if (a%2==0)  System.out.println("입력한 정수는 짝수입니다.");
if (result==true)  System.out.println("입력한 정수는 짝수입니다.");
if(b==0) System.out.println("입력한 정수는 짝수입니다.");
if (!result) System.out.println("입력한 정수는 홀수입니다.)";
if (a%2!=0) System.out.println("입력한 정수는 홀수입니다.)";
if (result==false) System.out.println("입력한 정수는 홀수입니다.)";
if(b!=0) System.out.println("입력한 정수는 홀수입니다.)";

 

 

else문

두개의 상호 독립적인 if 문을 하나의 if~else문으로 정리할 수 있다.

 

if(b==0) {
	System.out.println("입력한 정수는 짝수(even)입니다.");
}
if(b==1) {
	System.out.println("입력한 정수는 홀수(odd)입니다.");
}

// 위 두개의 if문을 하나로 합쳐 둘 중하나는 무조건 실행되도록
if(b==0) {
	System.out.println("입력한 정수는 짝수(even)입니다.");
} else {
	System.out.println("입력한 정수는 홀수(odd)입니다.");
}

 

간단 예제

int kor=70, eng=98, math=95;
double avg = (kor+eng+math)/3.0;

//평균 80이상이면 합격을 출력
System.out.println("단일 if문 실행 : ");
if(avg>=80.0) {
	System.out.println("평균 80 이상 합격");
}

//평균 80이상이면 합격, 아니면 불합격을 출력
System.out.println("if~else문 실행 : ");
if(avg>=80.0) {
	System.out.println("평균 80 이상 합격");
} else {
	System.out.println("평균 80 이하 불합격");
}

출력 결과

 

간단예제 2

//평균 60이상이거나 영어점수가 80이상이면 합격
if ((avg>=60)||eng>=80) {
	System.out.println("합격");
} else {
	System.out.println("불합격");
} //합격

// 평균 60이상이면서 모든 과목 40이상이라면 합격
if ((avg>=60)&&(eng>=40)&&(kor>=40)&&(math>=40)) {
	System.out.println("합격");
} else {
	System.out.println("불합격");
} //합격

// 평균 60이상이거나 모든 과목 50이상이라면 합격
if ((avg>=60)||((eng>=50)&&(kor>=50)&&(math>=50))) {
	System.out.println("합격");
} else {
	System.out.println("불합격");
} //합격

 

else if 문

if(a>0) {
	System.out.println("입력한 정수는 양수입니다.");
}else {
	if (a<0) {
		System.out.println("입력한 정수는 음수입니다.");
	}else {
		System.out.println("입력한 정수는 0입니다.");
	}
}

 

위와 같은 코드를 if else문으로 바꾸면 다음과 같다

//세가지 이상을 판단할 수 있는 else if 문
if(a>0) {
	System.out.println("입력한 정수는 양수입니다.");
}else if (a<0) {
	System.out.println("입력한 정수는 음수입니다.");
}else {
	System.out.println("입력한 정수는 0입니다.");
}

 

 

 중괄호 안의 명령이 한 개라면 중괄호는 생략 가능하다

if(a>0) System.out.println("입력한 정수는 양수입니다.");
else if (a<0) System.out.println("입력한 정수는 음수입니다.");
else System.out.println("입력한 정수는 0입니다.");

 

간단 예제

 

평균 점수가 80이상이면 합격, 70이상 79이하는 대기 순번, 나머지는 불합격을 출력하시

int kor=70, eng=98, math=95;
double avg = (kor+eng+math)/3.0;
//System.out.println(avg);	//평균 87.67
if(avg>=80) {
	System.out.println("합격");
}else if ((avg>=70)&&(avg<80)) {
	System.out.println("대기 순번");
}else {
	System.out.println("불합격");
    
//출력결과 : 합격

else if 문의 조건을 else if ((avg>=70)&&(avg<=79))와 같이 작성하면 

79.1~79.9 의 실수들이 불합격 처리 되므로 80미만으로 작성한다.

 

간단 예제 

 

정수가 주어질 때 90이상 A, 80~89 B, 70~79 C, 60~69 D, 60미만 F를 출력하라

Scanner sc = new Scanner(System.in);
System.out.print("점수를 입력하세요 : ");
int a = sc.nextInt();

if(a>=90) {System.out.println("A");}
else if (a>=80 && a<90) {System.out.println("B");}
else if (a>=70 && a<80) {System.out.println("B");}
else if (a>=60 && a<70) {System.out.println("B");}
else {System.out.println("B");}

 

if 문은 최초의 true가 나오면 이하 문장은 실행되지 않으므로 아래와 같이 작성도 가능하다.

if(a>=90) {System.out.println("A");}
else if (a>=80 && a<90) {System.out.println("B");}
else if (a>=70 && a<80) {System.out.println("C");}
else if (a>=60 && a<70) {System.out.println("D");}
else {System.out.println("F");}

 

잘못된 예로 아래와 같이 작성시

a=90인 경우 첫번째 else if문을 만족하므로 바로 D가 출력되고 if문이 종료된다.

if(a<60) {System.out.println("F");}
else if (a>=60) {System.out.println("D");}
else if (a>=70) {System.out.println("B");}
else if (a>=80) {System.out.println("C");}
else {System.out.println("A");}

 

바르게 작성한 예는 다음과 같다

if(a<60) {System.out.println("F");}
else if (a<70) {System.out.println("D");}
else if (a<80) {System.out.println("B");}
else if (a<90) {System.out.println("C");}
else {System.out.println("A");}

 

간단 예제2

12세 미만 어린이 , 12~18세 청소년, 19~25세 청년, 26세 이상은 성인 이라고 출력하는 if문 작성

 

import java.util.Scanner;

public class ControlOpIf05 {

	public static void main(String[] args) {
		// 12세 미만 어린이 , 12~18세 청소년, 19~25세 청년
		// 26세 이상은 성년 이라고 출력하는 if문 작성
		
		Scanner sc = new Scanner(System.in);
		System.out.print("출생년도를 입력하세요 : ");
		int year = sc.nextInt();
		int age = 2021 - year + 1;
		
		System.out.print("2021년 현재 " + age + "세 ");
		if (age<12) { System.out.println("어린이입니다."); }
		else if (age<19) { System.out.println("청소년입니다."); }
		else if (age<26) { System.out.println("청년입니다"); }
		else { System.out.println("성인입니다.");}
	
	}
}

출력 결과

 

간단 예제3

 

기본급을 입력받고 기본급이 100만원 이상이라면 기본급의 50%를 보너스로 합산,
100만원 미만이라면 기본급의 60%를 보너스로 합산한 총 지급액을 출력하세요

 

import java.util.Scanner;

public class ControlOpIf06 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a;
		double b = 0;
		System.out.print("기본급을 입력하세요 : ");
		a = sc.nextInt();

		if (a>=1000000) { 
			b = a*1.5;
		} else {
			b = a*1.6;
		}
		String fmPrice = String.format("%,d", (int) b);
		System.out.println("총 지급액은 " + fmPrice + "입니다.");
	}
}

출력 결과

import java.util.Scanner;

public class ControlOpIf06 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a;
		double b = 0;
		System.out.print("기본급을 입력하세요 : ");
		a = sc.nextInt();

		double bonus;
		if (a>=1000000) { 
			bonus = 0.5;
		} else {
			bonus = 0.6;
		}
		b = a+a*bonus;
		String fmPrice = String.format("%,d", (int) b);
		System.out.println("총 지급액은 " + fmPrice + "입니다.");
	}
}

위와 같이 작성시 변수를 더 잘 활용할 수 있다.

 

간단예제4

직급과 판매 실적 금액을 입력받고 판매 실적 금액에 과장 50%, 대리 25%, 사원 15%의 활동비를 합산하여 출력하세요

import java.util.Scanner;

public class ControlOpIf07 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("직급 입력(과장/대리/사원) : ");
		String level = sc.nextLine();
		System.out.print("판매 실적 금액 입력 : ");
		int pay = sc.nextInt();
		
		// 판매 실적 금액에 과장 50%, 대리 25%, 사원 15%의 활동비를 합산하여 출력
		
		double ratio = 0;
		double cost = 0;
		int k = 1;
		
		if (level.equals("과장")) {
			ratio = 0.5;
		} else if (level.equals("대리")) {
			ratio = 0.25;
		} else if (level.equals("사원")) {
			ratio = 0.15;
		} else {
			ratio = 0.0;
			k = 0;
			System.out.println("다시 입력해주세요.");
		}
		
		
		cost = pay + pay*ratio;
		String fmCost = String.format("%,d", (int) cost*k);
		System.out.println("지급 활동비는 " + fmCost + "원 입니다.");

	}
}

출력 결과

 

if문을 compareTo 메소드를 이용하여 다음과 같이 작성할 수도 있다.

if (level.compareTo("과장") == 0) {
	ratio = 0.5;
} else if (level.compareTo("대리") == 0) {
	ratio = 0.25;
} else if (level.compareTo("사원") == 0) {
	ratio = 0.15;
} else {
	ratio = 0.0;
	k = 0;
	System.out.println("다시 입력해주세요.");
}

 

간단 예제5 

국어, 영어, 수학 점수를 입력받고 평균 60점 이상이면서 모든 과목 40이상이면 합격, 아니라면 불합격과
해당되는 불합격 사유 (평균 미달, 국어 과락, 영어 과락, 수학 과락)을 함께 출력하세요

import java.util.Scanner;

public class ControlOpIf08 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int kor, eng, math, total;
		double avg;
		
		System.out.print("국어 점수 : ");
		kor = sc.nextInt();
		System.out.print("영어 점수 : ");
		eng = sc.nextInt();
		System.out.print("수학 점수 : ");
		math = sc.nextInt();
		
		total = kor+eng+math;
		avg = total/3.0;
		
		if(avg>=60 && kor>=40 && eng>=40 && math>=40) {
			System.out.println("합격");
		} else {
			System.out.println("불합격");
			System.out.print("불합격 사유 : ");
			if (avg<60) {System.out.print("평균미달");}  
			if (kor<40) {System.out.print(" 국어과락");} 
			if (eng<40) {System.out.print(" 영어과락");} 
			if (math<40) {System.out.print(" 수학과락");}
		}
	}
}

출력 결과

불합격 사유가 중복될 수 있도록 출력하기 위해 개별 if문으로 작성한다.

 

 

간단 예제6

가위바위보 게임 만들기 

(랜덤 기능은 다음에 학습한다)

 

답이 자신이 없다... 일단 내가 적은 답

import java.util.Scanner;

public class ControlOpIf09 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		String user;
		System.out.println("가위 바위 보 !");
		user = sc.nextLine();
		
		String com = "바위";
	
		if (user.equals(com)) {
			System.out.println("비겼습니다.");}
		
		else if (user.equals("가위")) {
			  if (com.equals("바위")) {System.out.println("졌습니다.");}
			  else {System.out.println("이겼습니다.");}
			}
		else if (user.equals("바위")) {
			  if (com.equals("보")) {System.out.println("졌습니다.");}
			  else {System.out.println("이겼습니다.");}
		}	
		else if (user.equals("보")) {
			  if (com.equals("가위")) {System.out.println("졌습니다.");}
			  else {System.out.println("이겼습니다.");}
		}
		
		sc.close();
	}
}

출력 결과

 

if문을 다음과 같이 작성시 라인 수를 더 줄일 수 있다.

if (user.equals(com)) {System.out.println("비겼습니다.");}	
else if (user.equals("가위") && com.equals("바위")) {System.out.println("졌습니다.");}
else if (user.equals("바위") && com.equals("보")) {System.out.println("졌습니다.");}	
else if (user.equals("보") && com.equals("가위")) {System.out.println("졌습니다.");}
else {System.out.println("이겼습니다.");}

 

(이런 생각을 왜 못했을까..?)

 

 

간단 예제7

 

2021년 1월 1일은 금요일입니다.

2021년에 한해서 월과 일을 입력 받고 요일을 출력하세요.

 

import java.util.Scanner;

public class ControlOpIf10 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.printf("월을 입력하세요 : ");
		int month = sc.nextInt();
		System.out.printf("일을 입력하세요 : ");
		int day = sc.nextInt();
		
		int days = day-1;
		
		if (month == 2) days += 31;
		if (month == 3) days += 31+28;
		if (month == 4) days += 31+28+31;
		if (month == 5) days += 31+28+31+30;
		if (month == 6) days += 31+28+31+30+31;
		if (month == 7) days += 31+28+31+30+31+30;
		if (month == 8) days += 31+28+31+30+31+30+31;
		if (month == 9) days += 31+28+31+30+31+30+31+31;
		if (month == 10) days += 31+28+31+30+31+30+31+31+30;
		if (month == 11) days += 31+28+31+30+31+30+31+31+30+31;
		if (month == 12) days += 31+28+31+30+31+30+31+31+30+31+30;

		
		System.out.println(days);
		
		int dayOfTheWeek = days%7;
		
		if (dayOfTheWeek==0) {System.out.println(month + "월 " + day + "일은 금요일 입니다."); }
		else if (dayOfTheWeek==1) {System.out.println(month + "월 " + day + "일은 토요일 입니다."); }
		else if (dayOfTheWeek==2) {System.out.println(month + "월 " + day + "일은 일요일 입니다."); }
		else if (dayOfTheWeek==3) {System.out.println(month + "월 " + day + "일은 월요일 입니다."); }
		else if (dayOfTheWeek==4) {System.out.println(month + "월 " + day + "일은 화요일 입니다."); }
		else if (dayOfTheWeek==5) {System.out.println(month + "월 " + day + "일은 수요일 입니다."); }
		else if (dayOfTheWeek==6) {System.out.println(month + "월 " + day + "일은 목요일 입니다."); }
	
		sc.close();
	
	}
}

출력 결과

 

 

for문을 써야겠다 생각은 했는데 배열을 쓸 생각을 못했다........ 세상에 ㅎ 

package days05;
import java.util.Scanner;

public class ControlObIf11 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int month, date, totalDays, dayOftheWeek;
		int[] monthList = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
		String[] day = { "금요일", "토요일", "일요일", "월요일", "화요일", "수요일", "목요일" };
		
		System.out.print("월을 입력하세요 : ");
		month = sc.nextInt();
		System.out.print("일을 입력하세요 : ");
		date = sc.nextInt();
		
		--date;
		totalDays = date;
		
		if (month > 1) {
			for (int i=0; i<month-1; i++) {
				totalDays += monthList[i];	
			} 
			System.out.print("1월 1일 부터 " + totalDays + "일 지난 ");
		}
		dayOftheWeek = totalDays % 7;
		System.out.println(day[dayOftheWeek] +"입니다.");
		
	}

}

출력 결과

 

배열과 for문을 사용하면 요렇게 좀 더 깔끔하게 출력할 수 있겠다...

 

 


 

if 문 들어왔더니 갑자기 난이도가 팍 올라갔다 

예습 많이 했으니 괜찮겠지 했는데 흐아암 

이제 깃 커밋/푸쉬는 잘 된다 풀이나 다른게 문제긴 하지만... 협업할 때 다시 한번 공부하면 되겠지..?

수업 시간 틈틈히 티스토리 정리 해놓으니 시간이 굉장히 많이 절약된다 (1시간정도)

언제까지 이렇게 여유가 있을지 모르겠지만 당분간은 정리하면서 해야겠다!!!!

일주일이 너무너무 빠르게 지나가부렀다 다음주도 빠샤샤.... 화이팅....