Java/4. 조건문과 반복문

Day 12 : 문제 풀이 (if문 / switch문)

pancakemaker 2021. 11. 3. 09:52

문제 1

package chap04;

import java.util.Scanner;

/* 문제풀이 제어문 조건문*/

public class FlowEx03 {
	public static void main(String[] args) {
		int input;
		System.out.print("숫자를 하나 입력하세요.> ");
		
		Scanner scanner = new Scanner(System.in);
		String tmp = scanner.nextLine();
		input = Integer.parseInt(tmp); //String 타입의 tmp 변수값을 int 타입으로 변환
		//문제: 조건문(if)을 사용하여 입력값이 0이면 "입력하신 숫자는 0입니다."을 출력하고, 입력값이 0이 아니면 "입력하신 숫자는 0이 아닙니다." 출력하시오.
		
		if(input == 0) {
			System.out.println("입력하신 숫자는 0입니다.");
		} else if(input != 0) { //그냥 } else { 해도 됨
			System.out.println("입력하신 숫자는 0이 아닙니다.");
		}
		//책 page.111 참고
	}
}
숫자를 하나 입력하세요.> 1
입력하신 숫자는 0이 아닙니다.

 

문제 2

package chap04;

import java.util.Scanner;

public class FlowEx04 {
	public static void main(String[] args) {
		//점수를 저장하기 위한 변수
		int score = 0;
		//학점을 저장하기 위한 변수 - 공백으로 초기화
		char grade = ' ';
		
		System.out.print("점수를 입력하세요.> ");
		Scanner scanner = new Scanner(System.in);
		//화면(콘솔)을 통해 입력받은 내용을 tmp에 저장 
		String tmp = scanner.nextLine();
		
		score = Integer.parseInt(tmp); //String 타입의 tmp 변수값을 int 타입으로 변환
		//문제: score 변수가 90점보다 크거나 같으면 A 학점, 80점보다 크거나 같으면 B 학점, 70점보다 크거나 같으면 C 학점, 나머지는 D 학점
		
		if(score >= 90) {
			grade = 'A';
		} else if(score >= 80) {
			grade = 'B';
		} else if(score >= 70) {
			grade = 'C';
		} else {
			grade = 'D';
		}
		
		
		/*
		 *switch문의 조건에는 정수타입(byte, char, short, int, long), String, enum
		 *Wrapper class Byte, Character, Short, Integer 정수값을 산출하는 타입만 올 수 있다.
		 *int score1 = score/10; //97 = 97/10 = 9.7 = 9
		 *int score2 = score%10; //97 -> 97%10 = 7
		
		switch(score/10) { //점수/10은 10(100점), 9(90점이상), 8(80점이상), 7(70점이상) 등이 나올것이다.
			case 10:
			case 9:
				grade = 'A'; break;
			case 8:
				grade = 'B'; break;
			case 7:
				grade = 'C'; break;
			default:
				grade = 'D'; break;
		}
		*/
		
		System.out.println("당신의 학점은 "+ grade + "입니다.");
	}
}
점수를 입력하세요.> 83
당신의 학점은 B입니다.

 

문제 3

package chap04;

import java.util.Scanner;

//중첩된 if조건문
public class FlowEx05 {
	public static void main(String[] args) {
		int score = 0; 
		char grade = ' ';
		char opt = '0';
		
		System.out.print("점수를 입력하세요.> ");
		Scanner scanner = new Scanner(System.in);
		String tmp = scanner.nextLine();
		
		score = Integer.parseInt(tmp); //String 타입의 tmp 변수값을 int 타입으로 변환
		//문제: score가 90점보다 크거나 같으면 A0 학점(grade), 90점 이상 중에서 98점 이상이면 A+ 학점(opt), 94점 미만은 A- 학점
		//score가 80점보다 크거나 같으면 B0 학점(grade), 80점 이상 중에서 88점 이상이면 B+ 학점(opt), 84점 미만은 B- 학점
		//나머지는 C0 학점
		
		if(score >= 90) {
			grade = 'A';
			if(score >= 98) { //90점 이상 조건문 내 하위조건 1
				opt = '+';
			} else if(score < 94) { //90점 이상 조건문 내 하위조건 2 : 98점 이상 조건문 하위에 작성하면 안되고 별도로 작성해야한다. -> 98점 이상인 조건문에 하위 조건으로 94미만을 줄 수 없으니까..
				opt = '-';
			}
		
		} else if(score >= 80) {
			grade = 'B';
			if(score >= 88) { //80점 이상 조건문 내 하위조건 1
				opt = '+';
			} else if(score < 84) { //80점 이상 조건문 내 하위조건 2 : 88점 이상 조건문 하위에 작성하면 안되고 별도로 작성해야한다. -> 88점 이상인 조건문에 하위 조건으로 84미만을 줄 수 없으니까..
				opt = '-';
			}
				
		} else {
			grade = 'C';
		}
		
		System.out.printf("당신의 학점은 %c%c입니다", grade, opt); //printf : 서식이 있는 출력문
	}
}
점수를 입력하세요.> 83
당신의 학점은 B-입니다

 

문제 4

package chap04;

import java.util.Scanner;

public class FlowEx06 {
	public static void main(String[] args) {
		int month = 0;
		
		System.out.print("현재 월을 입력하세요.> ");
		Scanner scanner = new Scanner(System.in);
		
		String tmp = scanner.nextLine();
		month = Integer.parseInt(tmp);
		
		//문제: Switch(month) { case 11: } 문을 사용해서 "현재의 계절은 봄(3,4,5월), 여름(6,7,8월), 가을(9,10,11월), 겨울(12,1,2월) 입니다. " 출력하세요.
		
		switch(month) {
			case 3 : case 4 : case 5 :
				System.out.println("현재의 계절은 봄입니다.");
				break;
			case 6 : case 7 : case 8 :
				System.out.println("현재의 계절은 여름입니다.");
				break;
			case 9 : case 10 : case 11 :
				System.out.println("현재의 계절은 가을입니다.");
				break;
			case 12 : case 1 : case 2 : //default: 도 가능
				System.out.println("현재의 계절은 겨울입니다.");
				break;
		}
		
		/* if문 사용한 경우
		 * 
		if(month == 3 || month == 4 || month == 5) {
			System.out.println("현재의 계절은 봄입니다.");
		} else if(month == 6 || month == 7 || month == 8) {
			System.out.println("현재의 계절은 여름입니다.");
		} else if(month == 10 || month == 11 || month == 12) {
			System.out.println("현재의 계절은 가을입니다."); 
		} else {
			System.out.println("현재의 계절은 겨울입니다.");
		}
		*/		
	}
}
현재 월을 입력하세요.> 11
현재의 계절은 가을입니다.

 

문제 5

package chap04;

import java.util.Scanner;

public class FlowEx07 {
	public static void main(String[] args) {
		int user;
		
		System.out.print("가위(1), 바위(2), 보(3) 숫자를 입력하세요.> ");
		
		Scanner scanner = new Scanner(System.in);
		String tmp = scanner.nextLine();
		
		user = Integer.parseInt(tmp);
	
		//user = (int)(Math.random() * 3) + 1; //범위 : 1이상 4미만 = 1, 2, 3
				
		
		//문제: switch(user) { case: 문을 사용해서 "당신은 가위 / 바위 / 보를 내셨습니다." 를 출력하세요.
		
		switch(user) {
			case 1 :
				System.out.println("당신은 가위를 내셨습니다.");
				break;
			case 2 :
				System.out.println("당신은 바위를 내셨습니다.");
				break;
			default :
				System.out.println("당신은 보를 내셨습니다.");
		}		
	}		
}
가위(1), 바위(2), 보(3) 숫자를 입력하세요.> 2
당신은 바위를 내셨습니다.

 

문제 6

package chap04;

import java.util.Scanner;

public class FlowEx08 {
	public static void main(String[] args) {
		char gender;
		String regNo = "";
		System.out.print("당신의 주민번호를 입력하세요(011231-1111222).> ");
		Scanner scanner = new Scanner(System.in);
		regNo = scanner.nextLine();
		
		gender = regNo.charAt(7); //regNo.charAt(7) -> String 타입의 regNo 변수에서 index:7 (즉, 8번째) 자리의 값을 가져오는 메소드
		
		//문제: switch(gender) { case:  이용하여 gender 1 또는 3일 경우 - 당신은 남자입니다., 2 또는 4일 경우 - 당신은 여자입니다., 그 외 - 유효하지 않은 번호입니다. 
		
		switch(gender) {
			case '1': case '3': //gender가 char 타입이므로 ' ' 붙여줘야 한다.
				System.out.println("당신은 남자입니다.");
				break;
			case '2': case '4':
				System.out.println("당신은 여자입니다.");
				break;
			default: 
				System.out.println("유효하지 않은 번호입니다.");
		}		
	}
}
당신의 주민번호를 입력하세요(011231-1111222).> 012345-1234567
당신은 남자입니다.