자바 표준 입력 클래스 Scanner
- 자바는 Scanner라는 클래스를 사용하여 표준 입력을 간편하게 처리할 수 있다.
- Scanner 사용 방법
- Scanner클래스를 java.util 패키지로부터 import 한다.
- Scanner의 객체를 생성한다.
- Scanner의 함수를 사용해서 입력을 처리한다.
- 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인 경우 분기를 나눈 방식이다.
- else if문이 첫 번째 조건식이 false인 경우 분기를 나눴다면
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(); } }
'Programming Language > Java' 카테고리의 다른 글
[국비] Java 내용정리 Day05 (0) | 2021.10.29 |
---|---|
[국비] Java 내용정리 Day04 (0) | 2021.10.29 |
[국비] Java 내용정리 Day02 (0) | 2021.10.26 |
[국비] Java 내용정리 Day01 (0) | 2021.10.25 |
[국비] 웹 개발 프로그래밍 시작 (0) | 2021.10.22 |
댓글