JAVA 입문 _ 김영한의 자바 입문 강의 - Day 12[Scanner 훈련]
1. Scanner
1)기본원리 이해를 위한 예제
package scanner;
import java.util.Scanner;
public class Scanner1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); //Scanner 기능을 사용하기 위해 new를 사용해 scanner를 만듦.
//System.in을 사용해 사용자의 입력을 편리하게 받는다.
//scanner 변수를 선언해 scanner를 사용할 수 있다.
System.out.print("문자열을 입력하세요.");
String str = scanner.nextLine(); //입력을 String으로 가져온다.
System.out.println("입력한 문자열 : " + str);
System.out.print("정수를 입력하세요.");
int intValue = scanner.nextInt(); //입력을 int로 가져옵니다.
System.out.println("입력한 정수 : " + intValue);
System.out.print("실수를 입력하세요.");
double doubleValue = scanner.nextDouble(); //입력을 double로 가져옵니다.
System.out.println("입력한 실수 : " + doubleValue);
}
}
// 실행결과
입력한 문자열 : hello java
정수를 입력하세요.10
입력한 정수 : 10
실수를 입력하세요.1.5
입력한 실수 : 1.5
2) 연산에서 활용해보기
package scanner;
import java.util.Scanner;
public class Scanner2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 숫자를 입력하세요 : ");
int num1 = scanner.nextInt();
System.out.print("두 번째 숫자를 입력하세요 : ");
int num2 = scanner.nextInt();
int sum = num1 + num2;
System.out.println("두 숫자의 합 = " + sum);
}
}
//실행 결과
첫 번째 숫자를 입력하세요 : 10
두 번째 숫자를 입력하세요 : 20
두 숫자의 합 = 30
3) 조건문 활용하기
- 사용자로부터 두 개의 정수를 입력받고, 더 큰 수를 출력하는 프로그램을 작성하세요. 두 숫자가 같다면 같다고 출력하세요.
package scanner;
import java.util.Scanner;
public class Scanner3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 숫자 : ");
int num1 = scanner.nextInt();
System.out.print("두 번째 숫자 : ");
int num2 = scanner.nextInt();
if (num1 > num2) {
System.out.println("더 큰 숫자 : " + num1);
} else if (num2 > num1) {
System.out.println("더 큰 숫자 : " + num2);
} else {
System.out.println("두 숫자는 같다.");
}
}
}
// 실행 결과
첫 번째 숫자 : 15
두 번째 숫자 : 48
더 큰 숫자 : 48
첫 번째 숫자 : 15
두 번째 숫자 : 15
두 숫자는 같다.
3) 반복문 활용하기
package scanner;
import java.util.Scanner;
public class ScannerWhile1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) { //무한 반복되는 while문
System.out.print("문자열을 입력하세요(exit.종료):");
String str = scanner.nextLine();
if (str.equals("exit")) {
System.out.println("프로그램을 종료합니다.");
break; // 조건을 만족할 때 빠져나가기
}
System.out.println("입력한 문자열 : " + str);
}
}
}
// 실행 결과
문자열을 입력하세요(exit.종료): 안녕하세요
입력한 문자열 : 안녕하세요
문자열을 입력하세요(exit.종료):exit
프로그램을 종료합니다.
- 사용자의 입력을 받아들이다가 특정 명령어 exit를 입력하면 프로그램을 종료하는 프로그램을 입력해봤다.
- 여기서 문자열을 입력하는 타입인 String이 사용되었기 때문에 if문에서 .equals 를 사용했다.
[ 반복문 예제 1. ]
첫 번째 숫자와 두 번째 숫자를 더해 출력하는 프로그램을 작성하려고 할 때, 첫 번째 숫자와 두 번째 숫자 모두 0을 입력하면 프로그램을 종료하는 프로그램을 작성하세요.
package scanner;
import java.util.Scanner;
public class ScannerWhile2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("첫 번째 숫자와 두 번째 숫자 모두 0을 입력하면 프로그램을 종료합니다.");
while (true) {
System.out.print("첫 번째 숫자 : ");
int num1 = scanner.nextInt();
System.out.print("두 번째 숫자 : ");
int num2 = scanner.nextInt();
if (num1 == 0 && num2 == 0) {
System.out.println("프로그램 종료");
break;
}
int sum = num1 + num2;
System.out.println("두 숫자의 합 : " + sum);
}
}
}
//실행 결과
첫 번째 숫자와 두 번째 숫자 모두 0을 입력하면 프로그램을 종료합니다.
첫 번째 숫자 : 20
두 번째 숫자 : 50
두 숫자의 합 : 70
첫 번째 숫자 : 0
두 번째 숫자 : 0
프로그램 종료
- 비교연산자를 사용, 입력받은 num1,num2가 (true && true) 모두 참이어야 if문의 코드 블럭이 실행되도록 프로그램을 작성했다.
[ 반복문 예제 2. ]
사용자 입력을 받아 합계를 계산하는 프로그램을 작성하세요. 사용자는 한 번에 한 개의 정수를 입력할 수 있으며, 사용자가 0을 입력하면 프로그램은 종료됩니다. 이 때, 프로그램이 종료될 때까지 사용자가 입력한 모든 정수의 합을 출력하세요.
package scanner;
import java.util.Scanner;
public class ScannerWhile3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int sum = 0; // 사용자가 입력한 값을 누적할 그릇
while (true) {
System.out.print("정수를 입력하세요.(0을 입력하면 종료) : ");
int number = input.nextInt();
if (number == 0) {
break;
}
sum += number; // 사용자가 입력한 number 값을 sum에 누적해서 합산, sum = sum + number
}
System.out.println("입력한 모든 정수의 합 : " + sum);
}
}
// 실행 결과
정수를 입력하세요.(0을 입력하면 종료) : 15
정수를 입력하세요.(0을 입력하면 종료) : 45
정수를 입력하세요.(0을 입력하면 종료) : 21
정수를 입력하세요.(0을 입력하면 종료) : 0
입력한 모든 정수의 합 : 81
[ Scanner 연습문제 1 - 이름 나이 입력받고 출력하기]
사용자로부터 입력받은 이름과 나이를 출력하세요. 출력 형태는 "당신의 이름은 (이름)이고, 나이는 (나이) 살입니다." 이어야 합니다.
package scanner;
import java.util.Scanner;
public class ScannerEx1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("이름을 입력하세요 : ");
String name = input.nextLine();
System.out.print("나이를 입력하세요 : ");
int age = input.nextInt();
System.out.println("당신의 이름은 " + name + "이고, " + "당신의 나이는 " + age + "살입니다.");
}
}
//실행 결과
이름을 입력하세요 : amy
나이를 입력하세요 : 17
당신의 이름은 amy이고, 나이는 17살입니다.
[ Scanner 연습문제 2 - 홀수 짝수 ]
사용자로붙터 하나의 정수를 입력받고, 이 정수가 홀수인지 짝수인지 판단하는 프로그램을 작성하세요.
package scanner;
import java.util.Scanner;
public class ScannerEx2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("하나의 정수를 입력하세요 : ");
int num1 =input.nextInt();
if ( num1 % 2 == 0) {
System.out.println("짝수입니다.");
} else {
System.out.println("홀수입니다.");
}
}
}
//실행 결과
하나의 정수를 입력하세요 : 12
짝수입니다.
[ Scanner 연습문제 3 - 음식점 주문 ]
사용자로부터 음식의 이름(foodName), 가격(foodPrice), 수량(foodQuantity)을 입력받아 주문한 음식의 총 가격을 계산하고 출력하는 프로그램을 작성하세요. 총 가격은 음식의 가격과 수량을 곱한 값이며, 이를 totalPrice라는 이름의 변수에 저장하세요.
주문 정보와 총 가격을 출력하세요. 출력 형태는 "(음식이름) (수량)개를 주문하셨습니다. 총 가격은 (총가격)원 입니다." 이어야 합니다.
package scanner;
import java.util.Scanner;
public class ScannerEx3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("주문할 음식을 입력하세요 : ");
String foodName = input.nextLine();
System.out.print("가격을 입력하세요 : ");
int foodPrice = input.nextInt();
System.out.print("수량을 입력하세요 : ");
int foodQuantity = input.nextInt();
int totalPrice = foodPrice * foodQuantity;
System.out.println(foodName + foodQuantity + "개 주문하셨습니다. 총 가격은 " + totalPrice + "원 입니다." );
}
}
//실행 결과
주문할 음식을 입력하세요 : 햄버거
가격을 입력하세요 : 7000
수량을 입력하세요 : 2
햄버거2개 주문하셨습니다. 총 가격은 14000원 입니다.
- 문제 자체가 길어서 풀기 전부터 뭐부터 해야할 지 어렵다고만 생각했는데 막상 출력 형태를 보고 하나씩 차근차근 입력하니 그냥 문자열과 숫자를 순서대로 입력해 출력해내기만 하면 되는 쉬운 문제였다.. 해보기 전에 고민부터 하지 말고 일단 입력하면서 고민하는 연습을 해야겠다!
[ Scanner 연습문제 4 - 구구단 출력기본원리 이해를 위한 예제
사용자로부터 하나의 정수 n을 입력받고, 입력받은 정수 n의 구구단을 출력하는 프로그램을 작성하세요.
package scanner;
import java.util.Scanner;
public class ScannerEx4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("단수를 입력하세요 : ");
int n = input.nextInt();
System.out.println(n + "단의 구구단 : ");
for (int a = 1; a <= 9; a++) {
System.out.println(n + " * " + a + " = " + n * a);
}
}
}
//실행 결과
단수를 입력하세요 : 8
8단의 구구단 :
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
- 예전에 for문을 배울 때 구구단을 출력하는 문제가 있었는데, 그 때는 어렵게 느껴졌던 것이 다시 해보니까 쉽게 생각이 나서 문제를 풀 수 있었다!
Opinion
확실히 처음에 개념을 배우고 나서 바로 풀 때는 해설을 보지 않으면 오류가 나서 실행도 못하거나 기억이 안나서 배웠던 것을 다시 보고왔어야 했는데, 활용하는 문제를 몇 번 풀다보니 기억이 새록새록 나서 문제 푸는 것이 어렵지 않고 재밌다!
자전거를 한 번 배우고 나면 10년이 지나 다시 타도 몸이 기억해서 탈 수 있듯이 코딩도 비슷하게 몸으로, 눈으로, 손으로 익숙하게 만드는 게 중요하다고 생각이 든다.