JAVA/JAVA 기초

JAVA 기초 - 제어문 (If / Else)

꿀표 2020. 6. 4. 00:52

A_If.java

package com.kh.chap01.condition;

import java.util.Scanner;

public class A_If {

	/*
	 * 	프로그램 진행은 기본적으로 순차적으로 진행됨
	 *  단, 이 순차적인 흐름을 바꾸고자 한다면 "제어문"이라는 걸 통해서 직접 제어가능
	 *  
	 *  선택적으로 실행하고자 한다면 => 조건문
	 * 	반복적으로 실행하고자 한다면 => 반복문
	 *  그 외의 흐름 제어 		=> 분기문 
	 * 
	 * < 조건문 >
	 * 조건식을 통해 참이냐 거짓이냐를 판단해서
	 * 해당 조건이 참일경우 그에 해당하는 실행문을 실행
	 * 
	 * --> 조건식의 결과 true/false 여야함
	 * --> 조건식에서는 비교연산자(대소, 동등),논리연산자(&&, ||), 논리부정연산자(!)
	 * 
	 * 조건문 크게 if문과 switch문으로 나뉜다.
	 * 
	 * 그 중 if문에서는 크게 3가지로 나뉨
	 * 1. 단독 if문
	 * 2. if-else문
	 * 3. if-else if문
	 * 
	 * * 단독 if문
	 * 
	 * if(조건식) {
	 * 		실행할 코드 ... ;
	 * }
	 * 
	 * --> 조건식이 true일 경우 중괄호 안의 코드 실행
	 * --> 조건식이 false일 경우 중괄호 안의 코드 무시하고 건너뜀 
	 * 
	 * if-else(
	 * 
	 */
		
	public void method1() {
		// 연산자 실습문제 1번,2번
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 : ");
		int num = sc.nextInt();

		if (num > 0) {
			System.out.println("양수다");
		}
		
		/*
		if(num <= 0) {
		System.out.println("양수가 아니다");
		}
		*/
		
		if(num == 0) {
			System.out.println("0이다.");
		}
		
		if(num < 0) {
			System.out.println("음수다.");
		}
	}
	
	public void method2() {
		// 실습문제 3번
		Scanner sc = new Scanner(System.in);
		
		System.out.println("정수 : ");
		int num = sc.nextInt();
		
		if(num % 2 == 0) {
			System.out.println("짝수다");
		}
		
		if(num % 2 == 1) {
			System.out.println("홀수다");
		}
	}
	
	public void method3() {
		// 실습문제 5번
		Scanner sc = new Scanner(System.in);
		
		System.out.print("이름 : ");
		String name = sc.nextLine();
		
		System.out.print("학년(숫자만) : ");
		int grade = sc.nextInt();
		
		System.out.print("반(숫자만) : ");
		int classgrade = sc.nextInt();
		
		System.out.print("번호(숫자만) : ");
		int classNum = sc.nextInt();
		sc.nextLine();
		
		System.out.print("성별(M/F) : ");
		char gender = sc.nextLine().charAt(0);
		
		System.out.print("성적(소수점 아래 둘째 자리까지) : ");
		double score = sc.nextDouble();
		
		String student = ""; //지역변수를 셋팅할 때 반드시 초기화하는 습관들이기  (if문들이 모두 false일수 있기 때문에)
		
		if (gender == 'M' || gender == 'm') {
			student = "남학생";
		}

		if (gender == 'F' || gender == 'f') {
			student = "여학생"; // 동일한 변수명을 사용할 수 있는 이유는 위 if문이 true면 메소드가 끝나서
		}

		if (gender != 'M' && gender != 'm' && gender != 'F' && gender != 'f') {
			System.out.println("잘못 입력하셨습니다!");
			
			return; // 해당 메소드 자체를 빠져나가는 구문 ( 즉, 이 메소드를 호출했던 곳으로 돌아감 -> a.method3();으로 돌아감)
		} 

		System.out.println(
				grade + "학년 " + classNum + "반 " + classNum + "번 " + name + " " + student + "의 성적은 " + score + "이다. ");
		
	}
	
	public void method4() {
		// 실습문제 6
		// 어린이(13세 이하)인지, 청소년(13세 초과 ~ 19세 이하)인지, 성인(19세 초과)
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("나이 : ");
		int age = sc.nextInt();
		
		if(age <= 13) {
			System.out.println("어린이");
		}
		
		if(age > 13 && age <= 19) {
			System.out.println("청소년");
		}
		
		if(age > 19) {
			System.out.println("성인");
		}
	}
	
	public void method5() {
		// 새로운 예시
		// 이름 입력 받은 후 본인이 맞는지 확인하는 메소드
		
		Scanner sc = new Scanner(System.in);
		String name = sc.nextLine();
		
		System.out.print("이름 : ");
		
		
		/*
		String name = sc.nextLine();
			
		// name에 담긴값이 "한승표"와 일치할 경우 => "본인입니다."
		if(name == "한승표") {
			System.out.println("본인입니다.");
		}
		// name에 담긴값이 "한승표"와 일치하지 않을 경우 => "본인이 아닙니다."
		if(name != "한승표") {
			System.out.println("본인입니다.");
		}
		*/
		/*
		 * 위의 내용들 제대로 실행 X
		 * 기본 자료형들끼리 비교시에 ==, != 과 같은 동등비교 사용 가능
		 * 
		 * 단, String 기본자료형이 아닌 참조자료형
		 * 
		 * 그래서 String 문자열간에 비교에 있어서는 .equals(비교할 값) 메소드 활용
		 * 
		 */
		
		// name == "한승표"
		if(name.equals("한승표")) {
			System.out.println("본인입니다.");
		}
		
		// name != "한승표"
		if(!name.equals("강보람")) {
			System.out.println("본인이 아닙니다.");
		}
	}
	
}

Point 

if(조건식) -> 조건식 안에 String이 들어갈 경우 동등비교를 '==' 가 아닌 'equals'로 해준다.

 

B_Else.java

package com.kh.chap01.condition;

import java.util.Scanner;

public class B_Else {

	/*
	 * if-else 문
	 * 
	 * if(조건식) {
	 * 		.. 실행코드 1 ..;
	 * } else {
	 * 		.. 실행코드 2 ..;
	 * }
	 * 
	 * --> 조건식의 결과가 true일 경우 실행코드1 수행 후 if-else문 빠져 나감.
	 * 		단, 결과가 false일 경우 무조건 실행코드2 수행됨
	 * 
	 * if - else if문
	 * 
	 * if(조건식1) {
	 * 		.. 실행코드 1 ..;
	 * } else if(조건식2) {
	 * 		.. 실행코드 2 ..;
	 * } else if(조건식3) {
	 * 		.. 실행코드 3 ..;
	 * } else { -> 위의 조건들이 다 false일 경우 반드시 실행할 코드 ..; else문은 생략가능
	 *  
	 * }
	 * 
	 * 조건식 1의 결과가 true일 경우 실행코드1 수행하고 빠져나감
	 * 단, 조건식1의 결과 false일 경유 조건식2 실행
	 * 조건식2의 결과 true일 경우 실행코드2 수행하고 빠져나감
	 * 단, 조건식 2의 결과 false일 경우 그 뒤의 조건...
	 * 
	 * 단, else문이 제시되어있을 경우 모든 조건들이 다 false일 경우는 최종적으로 else 구문 실행
	 * 
	 */
	
	public void method1() {
		// A_IF 클래스의 method2() (짝수인지 홀수인지)
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 : ");
		int num = sc.nextInt();
		
		if(num % 2 == 0) {
			System.out.println("짝수다");
		}else {
			System.out.println("홀수다");
		}
	}
	
	public void method2() {
		// A_If 클래스의 method1() (양수, 0, 음수)
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 : ");
		int num = sc.nextInt();
		
		if(num > 0) {
			System.out.println("양수다");
		}else if(num == 0) {
			System.out.println("0이다");
		}else //if(num < 0 -> 조건 검사 필요없음 사실상 음수기 때문에
			{
			System.out.println("음수다");
		}
		
	}
	
	public void method3 () {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("학년 : ");
		int grade = sc.nextInt();
		
		System.out.print("반 : ");
		int classNum = sc.nextInt();
		
		System.out.print("번호 : ");
		int num = sc.nextInt();
		sc.nextLine();
		
		System.out.print("이름 : ");
		String name = sc.nextLine();
		
		System.out.print("성적 : ");
		double score = sc.nextDouble();
		
		System.out.print("성별(M/F) : ");
		char gender = sc.nextLine().charAt(0);
		
		String student = "";
		
		
		
		if(gender == 'M' || gender == 'm') {
			student = "남학생";
		}else if(gender == 'F' || gender == 'f') {
			student = "여학생";
		}else {
			System.out.println("잘못 입력하셨습니다.");
			return;
		}
		System.out.printf("%학년 %반 %d번 %s %s의 성적은 %.2f이다.",
							grade, classNum, num, name, student, score);
	}
	
	public void method4() {
		// A_If 클래스의 method4() (어린이, 청소년, 성인)
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("나이 : ");
		int age = sc.nextInt();
		
		if(age <= 13) { 
			System.out.println("어린이");
			
		}else if(age > 13 && age <= 19) { // (age <= 19) 이렇게 쓰는 게 더 효율적 앞선 조건식에서 age는 13이하는 아니라고 했기 때문에 
			System.out.println("청소년");
			
		}else {
			System.out.println("성인");
		}
	}
	
	public void method5() {
		// 새로운 예시
		// 사용자에게 점수를 입력받아
		// 90점 이상 => A등급
		// 90점 미만 80점 이상 => B등급
		// 80점 미만 70점 이상 => C등급
		// 70점 미만 60점 이상 => D등급
		// 60점 미만              => F등급
		
		// "당신의 점수는 xx점이고, 등급은 x등급입니다.
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("점수 : ");
		int score = sc.nextInt();
		
		String grade; // 값이 없는데 빨간줄이 안뜨는 이유는 아래 else 가 있기 때문에 else가 있으면 무조건 실행될 경우가 있다는 뜻
		
		if(score >= 90) {
			grade = "A";
		}else if(score >= 80) {
			grade = "B";
		}else if(score >= 70) {
			grade = "C";
		}else if(score >= 60) {
			grade = "D";
		}else { 
			grade = "F";
		}
		
		//System.out.println("당신의 점수는 " + score + "점이고, 등급은 " + grade + "등급입니다.");
		System.out.printf("당신의 점수는 %d점이고, 등급은 %s입니다.", score, grade);
	}
		public void method6() {
			// 위의 문제에서 각 등급별 중간 점수 이상일 경우 등급에 "+"라는 문자를 추가해서 출력
			
			// 예) 95점이상 A+ / 85점이상 B+
			
			Scanner sc = new Scanner(System.in);
			
			System.out.print("점수 : ");
			int score = sc.nextInt();
			
			String grade;
			
			if(score >= 90) {
				grade = "A";
				
				if(score >= 95) {
					//grade = grade + "+"; // grade = "A" + "+" ;
					grade += "+";
				}
				
			}else if(score >= 80) {
				grade = "B";
				if(score >= 85) {
					grade += "+";
				}
			}else if(score >= 70) {
				grade = "C";
				if(score >=75) {
					grade += "+";
				}
			}else if(score >= 60) {
				grade = "D";
				if(score >= 65) {
					grade += "+";
				}
			}else { 
				grade = "F";
			}
			
			System.out.println("당신의 점수는 " + score + "점이고, 등급은 " + grade + "등급입니다.");
			
		}
		
 public void method7() {
	 Scanner sc = new Scanner(System.in);
	 
	 System.out.print("이름 : ");
	 String name =  sc.nextLine();
	 
	 if(name.equals("강보람")) {
		 // 문자열 비교는 위와 같이 실행해야한다. == 으로 비교시 false가 무조건 나온다. 문자 그대로가 아니라 주소값으로 비교하기 때문에.
		 System.out.println("본인입니다.");
	 }else {
		 System.out.println("본인이 아닙니다");
	 }
 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
}