본문 바로가기

Java/Learn_Java

4. 조건문과 반복문_활용문제

- if-else if-else문 및 활용

//	점수를 입력 후 점수값에 따라 등급을 나눠 다르게 출력
//	2자리 이상 또는 1자리의 문자열이 들어갈 시,
// 	올바른 값을 입력하라고 출력

import java.util.Scanner;

public class IfElseIfElseExample2 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		char tmp;
		boolean output = true;
		System.out.print("점수를 입력하세요>");
		String input = sc.nextLine();
		int cnt = 0;
		int cntNum = 0;

		// while에 비해 for문이 목적을 분명히 알려주므로 더 좋음
		for (int i = 0; i < input.length(); i++) {
			tmp = input.charAt(i);

//	*  방법 1 설명 (break 없이도 print 한 번만 할 수 있는 방법?)
//	for문에서 정수가 아니면 output = false로 저장 후,
//	아래의 if문으로 돌린다.
//	아래에선 output가 true가 아니면 else문으로 바로 가므로
//	올바른 점수 입력 출력하고 끝남.
//	but. break;로 끝내는 것보다 명확하진 않으므로 비추.
//			 */

//			방법 1
			if (!(tmp >= '0' && tmp <= '9')) {
				output = false;
				cnt++;
			} else {
				cntNum++;
			}
		}

		if (output == true) {
			int score = Integer.parseInt(input);
//			
			if (score >= 90) {
				System.out.println("점수가 90~100입니다.");
				System.out.println("등급은 A 입니다.");
			} else if (score >= 80) {
				System.out.println("점수가 80~89입니다.");
				System.out.println("등급은 B 입니다.");
			} else if (score >= 70) {
				System.out.println("점수가 70~79입니다.");
				System.out.println("등급은 C 입니다.");
			} else {
				System.out.println("점수가 70 미만입니다.");
				System.out.println("등급은 D 입니다.");
			}
		}

		else {
			System.out.println("올바른 점수를 입력하세요.");

//	문자열이 몇 개 들어갔는지 출력하는 것은? but 문자 개수만 알고 싶어!
//	숫자 개수도 따로 알고 싶어!
//	야매. input.length()- cnt

			System.out.println("입력한 것 중 숫자가 아닌 문자는 " 
			+ cnt + "개입니다.");
			System.out.println("숫자는 " + cntNum + "개입니다.");

		}
	}
}

 

break;를 이용한 더 깔끔한 방법

//	점수를 입력 후 점수값에 따라 등급을 나눠 다르게 출력
//	2자리 이상 또는 1자리의 문자열이 들어갈 시,
// 	올바른 값을 입력하라고 출력

import java.util.Scanner;

public class IfElseIfElseExample {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		char tmp;
		boolean output = true;
		System.out.print("점수를 입력하세요>");
		String input = sc.nextLine();

		// while에 비해 for문이 목적을 분명히 알려주므로 더 좋음
		for (int i = 0; i < input.length(); i++) {
			tmp = input.charAt(i);

			if (!(tmp >='0' && tmp <= '9')) {
				output = false;
				System.out.println("올바른 점수를 입력하세요.");
				break;
//	ddd등 많은 문자열을 입력 시 break에서 미리 멈춰 쓸데없는 동작을 차단함.
			}

//	이걸 넣으면 오류.
//	else {
//	output = true;
//		}

//	 오류 설명
//	 else를 넣을 경우 만약 "d9"이란 값을 입력했으며,
//	 if문에 break;가 없다고 가정해보자.
//	 그럼 for문에서 input.length();=2만큼 2번(컴퓨터는 0, 1번) 실행될 것이고
//	 0번째 실행 시 output 값이 false가 되며 다시 9에 대한 if문을 실행해 true값을 저장해
//	 parseInt method를 돌려 d9을 score에 저장한다.
//	 근데 d9은 integer 타입이 아니므로 error.
//	

			if (output == true) {
				int score = Integer.parseInt(input);
				if (score >= 90) {
					System.out.println("점수가 90~100입니다.");
					System.out.println("등급은 A 입니다.");
				} else if (score >= 80) {
					System.out.println("점수가 80~89입니다.");
					System.out.println("등급은 B 입니다.");
				} else if (score >= 70) {
					System.out.println("점수가 70~79입니다.");
					System.out.println("등급은 C 입니다.");
				} else {
					System.out.println("점수가 70 미만입니다.");
					System.out.println("등급은 D 입니다.");
				}
			}
		}
	}
}

'Java > Learn_Java' 카테고리의 다른 글

5. 참조 타입_연습문제  (0) 2020.04.05
5. 참조 타입  (0) 2020.03.29
3. 연산자_연습문제  (0) 2020.03.29
3. 연산자  (0) 2020.03.28
2. 변수와 타입_3. 타입 변환  (0) 2020.03.28