본문 바로가기
Programming Language/Java

[국비] Java 내용정리 Day03

by tpleehan 2021. 10. 28.

자바 표준 입력 클래스 Scanner

  • 자바는 Scanner라는 클래스를 사용하여 표준 입력을 간편하게 처리할 수 있다.
  • Scanner 사용 방법 
    1. Scanner클래스를 java.util 패키지로부터 import 한다.
    2. Scanner의 객체를 생성한다.
    3. Scanner의 함수를 사용해서 입력을 처리한다.
    4. Scanner의 사용이 끝나면 메모리 자원을 반납한다.
//1. Scanner api 로딩 (제공되는 Scanner 정보를 현재 클래스로 가져오기)
import java.util.Scanner;

public class ScannerExample {
	public static void main(String[] args) {
		//2. Scanner 객체 생성.
		Scanner sc = new Scanner(System.in);
        
		//3. Scanner 함수 사용
		System.out.print("이름을 입력하세요: ");
		String name = sc.nextLine();
		System.out.print("나이를 입력하세요: ");
		int age = sc.nextInt();
		
//		System.out.println("제 이름은 " + name + "이고, 나이는 " + age + "세 입니다.");
		System.out.printf("제 이름은 %s이고, 나이는 %d세 입니다.", name, age);
		
		//4. Scanner 객체 반납
		//객체를 반납 -> Scanner를 메모리에서 해제.
		sc.close();		
	}
}
Scanner 함수 종류
- next() : 공백이 없는 문자열을 입력받는다.
- nextLine() : 공백을 포함한 문자열을 입력받는다.
- next + 기본 타입 이름() : 해당 타입에 맞는 데이터를 입력받는다.

ex)
nextInt() : 정수 데이터를 입력받는다.
nextDouble() : 실수 데이터를 입력받는다.

close() 함수의 경우 중간에 사용할 경우 Scanner 함수를 사용할 수 없기 때문에 마지막에 작성해야 한다.

Scanner Quiz01

문제)
스캐너를 사용하여 이름과 나이를 입력받아서 예시와 같이 출력한다.
(출력 함수는 마음대로 사용해서 출력하고 출생 연도는 입력사항이 아니다.)

예시)
이름 : XXX
나이 : XX세
출생 연도: XXXX년
import java.util.Scanner;

public class ScannerQuiz {
	public static void main(String[] args) {		
		Scanner sc = new Scanner(System.in);
		System.out.print("이름을 입력하세요: ");
		String name = sc.nextLine();
		System.out.print("나이를 입력하세요: ");
		int age = sc.nextInt();
		int birthYear = 2021 - age;
		
		System.out.println("--------------------------");
		System.out.println("이름: " + name);
		System.out.println("나이: " + age + "세");
		System.out.println("출생년도: " + birthYear + "년" );
//		System.out.printf("이름: %s\n나이: %d세\n출생년도: %d년\n", name, age, birthYear);
		System.out.println("--------------------------");
		
		sc.close();
	}
}​

Scanner Quiz02

문제)
사용자에게 섭씨온도를 입력받아서 화씨온도로 변환하여 출력하는 로직을 작성한다.
화씨온도는 소수점 첫째 자리까지 표현한다.
섭씨온도 특수문자 표기 : ㄹ 한자 7 (℃)
화씨온도 특수문자 표기 : ㄹ 한자 다음장 4 -> (℉)

예시)
입력한 섭씨온도는 XXX ℃입니다.
변환된 화씨온도는 XX.X ℉입니다.
import java.util.Scanner;

public class CelToFahr {
	public static void main(String[] args) {	
		Scanner sc = new Scanner(System.in);
		System.out.print("섭씨 온도를 입력하세요(℃): ");

		int celsius = sc.nextInt(); // 섭씨
		double fahrenheit = celsius * 1.8 + 32; // 화씨
//		double fahrenheit = (double) celsius * 9.0 / 5 + 32; // 화씨
		
		System.out.println("섭씨 온도는 " + celsius + " ℃ 입니다.");
		System.out.println("화씨 온도는 " + fahrenheit + " ℉ 입니다.");
		System.out.printf("입력한 섭씨: %d℃\n", celsius);
		System.out.printf("변환된 화씨: %.1f℉\n", fahrenheit);
		
		sc.close();	
	}
}

 

조건문 if

  • 조건문은 프로그램에서 조건식의 참, 거짓에 따라 코드를 다르게 실행하게 하는 분기점을 만드는 제어문이다.
  • if는 조건식의 논리 결과가 참일 경우 블록 내의 코드를 실행하며 거짓일 경우 코드를 실행하지 않는다.
  • if블록 내부의 코드가 단 한 줄 일 경우 블록(중괄호)을 생략할 수 있다.
import java.util.Scanner;

public class IfExample1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("점수를 입력하세요. : ");
		int point = sc.nextInt();
		System.out.println("내 점수 : " + point + "점");
		System.out.println("--------------------------");
		
		if(point >= 70) {
			System.out.println("70점 이상입니다.");
			System.out.println("합격 하셨습니다.");
		} else {
			System.out.println("70점 미만입니다.");
			System.out.println("불합격 하셨습니다.");
		}
		System.out.println("응시한 시험 보느라 고생하셨습니다.");
		
		sc.close();
	}
}

if Quiz01

문제)
1. 사용자는 신장과 나이의 정보를 숫자로 입력할 수 있어야 한다.
2. 프로그램은 2가지 정보를 입력하고 엔터를 누르면 조건에 따라 다른 결과를 출력해야 한다.
3. 키가 140 이상이고 나이가 8세 이상인 2개의 조건을 모두 만족할 경우 "놀이기구에 탑승할 수 없습니다."를 출력해야 한다.
4. 두 개의 조건 중 하나라도 만족하지 않을 시 "놀이기구에 탑승할 수 없습니다."를 출력해야 한다.
5. 조건과 관계없이 "오늘 하루 즐거운 시간 되세요."를 출력해야 한다.
import java.util.Scanner;

public class IfQuiz01 {
	public static void main(String[] args) {	
		Scanner sc = new Scanner(System.in);
		
		System.out.print("신장을 입력하세요. : ");
		int height = sc.nextInt();
		System.out.print("나이를 입력하세요. : ");
		int age = sc.nextInt();
		
		if (height >= 140 && age >= 8) {
			System.out.println("놀이기구에 탑승할 수 있습니다.");
		} else {
			System.out.println("놀이기구에 탑승할 수 없습니다.");
		}
		System.out.println("오늘 하루 즐거운 시간 되세요.");
		
		sc.close();
	}
}​

다중 분기 조건문 if ~ else if

  • if ~ else if 문은 좀 더 많은 분기를 만들고 싶을 때 사용하는 조건문이다.
  • 다만 위에서부터 조건을 검색하면서 내려오기 때문에 범위 조건일 경우 상위 조건이 하위 조건을 포괄적으로 포함하지 않도록 주의해야 한다.
import java.util.Scanner;

public class IfExample2 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("나이를 입력하세요. : ");
		int age = sc.nextInt();
		
		if (age >= 20) {
			System.out.println("성인 입니다.");
		} else if(age >= 17) {
			System.out.println("고등학생 입니다.");
		} else if(age >= 14) {
			System.out.println("중학생 입니다.");
		} else if(age >= 8) {
			System.out.println("초등학생 입니다.");
		} else {
			System.out.println("미취학 아동입니다.");
		}
		
		sc.close();	
	}
}

if Quiz02

문제)
정수를 2개 입력받아서, 두 정수 중 어느 수가 큰 수인지 혹은 같은 수인지 판별한다.

예시)
입력받은 수 : 4, 7 -> 7이 큰 수입니다.
입력받은 수 : 10, 3 -> 10이 큰 수입니다.
입력받은 수 : 5, 5 -> 같은 수입니다.
import java.util.Scanner;

public class IfQuiz02 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫 번째 정수를 입력하세요. : ");
		int num1 = sc.nextInt();
		System.out.print("두 번째 정수를 입력하세요. : ");
		int num2 = sc.nextInt();
		
		if(num1 > num2) {
			System.out.println(num1 + "이(가) 큰 수 입니다.");
		} else if(num1 < num2) {
			System.out.println(num2 + "이(가) 큰 수 입니다.");
		} else {
			System.out.println("같은 수 입니다.");
		} 
			
		sc.close();
	}
}​

if Quiz03

문제)
스캐너를 사용하여 정수를 하나 입력받는다.
- 입력받은 값이 7의 배수라면 "7의 배수입니다." 를 출력한다.
- 입력받은 값이 7의 배수가 아니라면 "7의 배수가 아닙니다." 를 출력한다.
- 입력 받은 값이 0이라면 "0입니다."를 출력한다.
import java.util.Scanner;

public class IfQuiz03 {
	public static void main(String[] args) {		

        Scanner sc = new Scanner(System.in);
		
		System.out.print("정수를 입력하세요. : ");
		int num = sc.nextInt();
        
		/*
		if (num % 7 == 0 && num != 0)  {
			System.out.println("7의 배수입니다.");
		} else if (num % 7 != 0) {
			System.out.println("7의 배수가 아닙니다.");
		} else {
			System.out.println("0입니다.");
		}
		 */

		if (num == 0) {
			System.out.println("0입니다.");
		} else if (num % 7 == 0) {
			System.out.println("7의 배수입니다.");
		} else {
			System.out.println("7의 배수가 아닙니다.");
		}		
	}
}
import java.util.Scanner;

public class IfExample3 {
	public static void main(String[] args) {				
		Scanner sc = new Scanner(System.in);
		
		System.out.print("키를 입력하세요. : ");
		int height = sc.nextInt();

		if (height >= 140) {
			System.out.print("나이를 입력하세요. : ");
			int age = sc.nextInt();
		
			if(age >= 8) {
				System.out.println("놀이기구 탑승이 가능합니다.");
			} else if(age >= 6) {
				System.out.println("보호자 동반 시 탑승이 가능합니다.");
			} else {
				System.out.println("나이가 6세 미만입니다.");
				System.out.println("놀이기구 탑승이 불가합니다.");
			}
		
		} else {
			System.out.println("키가 140 미만입니다.");
			System.out.println("놀이기구 탑승이 불가합니다.");
		}
		
		sc.close();
	}
}
  • if의 중첩문 (중첩 if문)
    • else if문이 첫 번째 조건식이 false인 경우 분기를 나눴다면
      if의 중첩문은 첫 번째 조건식이 true인 경우 분기를 나눈 방식이다.

if Quiz04

문제)
- 정수 3개를 입력받는다.
- 가장 큰 값, 가장 작은 값, 중간 값을 구해서 출력한다.

Hint) max, mid, min이라는 변수를 미리 선언하여 판별이 될 때마다 각각의 변수에 값을 넣고 마지막에 한번에 출력하면 된다.
import java.util.Scanner;

public class IfQuiz04 {
	public static void main(String[] args) {
		
        Scanner sc = new Scanner(System.in);
		
		System.out.print("첫 번째 정수를 입력하세요. : ");
		int num1 = sc.nextInt();
		System.out.print("두 번째 정수를 입력하세요. : ");
		int num2 = sc.nextInt();
		System.out.print("세 번째 정수를 입력하세요. : ");
		int num3 = sc.nextInt();
		
		int max, mid, min;
		
		if (num1 > num2 && num1 > num3) { //num1이 제일 큰 값
			max = num1;
			if (num2 > num3) {
				mid = num2;
				min = num3;
			} else {
				mid = num3;
				min = num2;
			}
		} else if (num2 > num1 && num2 > num3) { //num2가 제일 큰 값
			max = num2;
			if (num1 > num3) {
				mid = num1;
				min = num3;
			} else {
				mid = num3;
				min = num1;
			}
			
		} else { //num3가 제일 큰 값
			max = num3;
			if (num1 > num2) {
				mid = num1;
				min = num2;
			} else {
				mid = num2;
				min = num1;
			}
		}
		
		System.out.println("최대값 : " + max + " 입니다.");
		System.out.println("중간값 : " + mid + " 입니다.");
		System.out.println("최소값 : " + min + " 입니다.");
		
		sc.close();
	}
}​

if Quiz05

문제)
국어, 영어, 수학 점수를 각각 입력받아서 평균을 구한다. (평균은 소수점 첫째 자리까지 출력)
평균이 90점이 넘는다면, 다시 한번 조건을 검사해서
95 ~ 100 -> A+
94 ~ 90 -> A0
80점대는 B, 70점대는 C, 60점대는 D, 나머지는
모두 F 처리하면 된다. (100점이 만점)

예시)
평균 점수: 95.5
당신의 학점은 A+이다.
import java.util.Scanner;

public class IfQuiz05 {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.print("국어 점수를 입력하세요. : ");
		int kor = sc.nextInt();
		System.out.print("영어 점수를 입력하세요. : ");
		int eng = sc.nextInt();
		System.out.print("수학 점수를 입력하세요. : ");
		int math = sc.nextInt();
		
		double avg = (kor + eng + math) / 3.0;
		System.out.printf("평균 점수: %.1f점\n", avg);
		
		if (avg >= 90) {
			if (avg > 100) {
				System.out.println("잘 못된 점수 입니다.");
			} else if (avg >= 95) {
				System.out.println("당신의 학점은 A+ 입니다.");
			} else {
				System.out.println("당신의 학점은 A 입니다.");
			}
				
		} else if (avg >= 80) {
			System.out.println("당신의 학점은 B 입니다.");

		} else if (avg >= 70) {
			System.out.println("당신의 학점은 C 입니다.");
			
		} else if (avg >= 60) {
			System.out.println("당신의 학점은 D 입니다.");
			
		} else {
			System.out.println("당신의 학점은 F 입니다.");
		}
		
		sc.close();		
	}
}​

다중 분기 조건문 switch ~ case

  • 다중 분기 구현은 if ~ else if문으로도 구현이 가능하지만 분기의 개수가 많아질수록 프로그램의 효율이 감소하는 단점이 있다.
  • 이러한 단점을 극복하기 위해 사용하는 조건 분기문이 switch문이다.
  • switch문은 if ~ else if문보다 코드가 간결하며 효율적이다.
  • default는 else와 같은 효과를 가진다.
import java.util.Scanner;

public class SwitchExample1 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("성별을 입력하세요.(M/F)");
		System.out.print("> ");
		String gender = sc.next();
		
		switch (gender) {
		
		case "ㅡ":
		case "m" :
		case "M" :
			System.out.println("남성 입니다.");
			break;
			
		case "ㄹ" :
		case "f" :
		case "F" :
			System.out.println("여성 입니다.");
			break;
			
		default :
			System.out.println("잘못된 입력입니다.");
		}		
		
		sc.close();
		
	}
}
  • switch 키워드 뒤에 나오는 괄호는 boolean형 조건식이 아닌 변수나, 변수의 연산식을 적어야 하며, 타입은 정수, 문자열만 가능하다.
  • break; (해당 case만 실행하고 switch문을 탈출하는 키워드)
  • case를 설정하지 않는 값들은 모두 default로 온다.
import java.util.Scanner;

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

		System.out.print("점수를 입력하세요. : ");
		int point = sc.nextInt();
		
		switch (point / 10) {
		
		case 10 :
			if(point > 100) {
				System.out.println("잘못된 점수입니다.");
				break;
			}
		case 9 :
			System.out.println("당신의 학점은 A 입니다.");
			break;
		case 8:
			System.out.println("당신의 학점은 B 입니다.");
			break;
		case 7 :
			System.out.println("당신의 학점은 C 입니다.");
			break;
		case 6 :
			System.out.println("당신의 학점은 D 입니다.");
			break;
		default :
			if (point > 100 || point < 0) {
				System.out.println("잘못된 점수입니다.");
			} else {
				System.out.println("당신의 학점은 F 입니다.");
			}
		}		
		
		sc.close();
		
	}
}

Scanner Quiz

문제)
정수를 하나 입력받고, 연산자를 하나 입력받는다.
다시 정수를 입력받아서, 사용자가 선택한 연산자를 기준으로 연산 결과를 출력한다. (switch문 사용)
import java.util.Scanner;

public class SwitchQuiz {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수1 : ");
		int num1 = sc.nextInt();
		
		System.out.print("연산을 선택하세요 [+,-,*,/] : ");
		String operator = sc.next();
		
		System.out.print("정수2 : ");
		int num2 = sc.nextInt();
			
		switch (operator) {
			
		case "+" :
			System.out.println("두 수의 덧셈은: " + (num1 + num2));
			break;
		
		case "-" :
			System.out.println("두 수의 뺄셈은: " + (num1 - num2));
			break;
		
		case "*" :
			System.out.println("두 수의 곱셈은: " + (num1 * num2));
			break;
		
		case "/" :
			System.out.println("두 수의 나눗셈은: " + (num1 / num2));
			break;	
		
		default :
			System.out.println("사칙연산 기호를 입력해주세요.");
			System.out.println("[+,-,*,/]");
		}
		
		sc.close();
	}
}​

댓글