Scanner 학습
Scanner
System.out 을 통해서 출력을 했듯이, System.in 을 통해서 사용자의 입력을 받을 수 있다. 그런데 자바가 제공하는 System.in 을 통해서 사용자 입력을 받으려면 여러 과정을 거쳐야해서 복잡하고 어렵다.
자바는 이런 문제를 해결하기 위해 Scanner 라는 클래스를 제공한다. 이 클래스를 사용하면 사용자 입력을 매우 편리하게 받을 수 있다.
Scanner1
package scanner;
import java.util.Scanner;
public class Scanner1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("문자열을 입력하세요:");
String str = scanner.nextLine(); // 입력 string 타입
System.out.println("입력한 문자열: " + str);
System.out.print("정수를 입력하세요:");
int intValue = scanner.nextInt();
System.out.println("입력한 정수: " + intValue);
System.out.print("실수를 입력하세요:");
double doubleValue = scanner.nextDouble();
System.out.println("입력한 실수: " + doubleValue);
}
}
- Scanner scanner = new Scanner(System.in);
- 이 코드는 객체와 클래스를 배워야 정확히 이해할 수 있다. 지금은 Scanner의 기능을 사용하기 위해 new를 사용해서 Scanner를 만든다 정도로 이해하면 됨. Scanner는 System.in을 사용해서 사용자의 입력을 편리하게 받도록 도와준다.
- Scanner scanner 코드는 scanner 변수를 선언하는 것이다. scanner 변수를 통해서 scanner를 사용할 수 있다.
- Scanner.nextLine()
- 엔터(\n)을 입력할 때까지 문자를 가져온다.
- scanner.nextInt()
- 입력을 int 형으로 가져온다. 정수 입력에 사용한다.
- scanner.nextDouble()
- 입력을 double 형으로 가져온다. 실수 입력에 사용한다.
주의! - 다른 타입 입력 시 오류
타입이 다르면 오류가 발생한다.
Scanner2
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);
}
}
Scanner3
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 (num1 < num2) {
System.out.println("더 큰 수는: " + num2);
} else {
System.out.println("두 숫자는 같습니다.");
}
}
}
Scanner While1
package scanner;
import java.util.Scanner;
public class ScannerWhile1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("문자열을 입력하세요(exit: 종료) :");
String str = scanner.nextLine();
if (str.equals("exit")) {
System.out.println("프로그램을 종료합니다.");
break;
}
System.out.println("입력한 문자열: " + str);
}
}
}
- while문을 사용한 반복해서 동작하는 프로그램, exit라는 문자가 입력되면 while문을 빠져나오며 프로그램이 종료된다.
Scanner While2
package scanner;
import java.util.Scanner;
public class ScannerWhille2 {
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);
}
}
}
- if문과 and 연산을 사용해서 입력받은 두 숫자가 모두 0일 경우 반복하는 프로그램이 종료된다.
Scanner While3
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;
}
System.out.println("입력한 모든 정수의 합: " + sum);
}
}
- sum += number를 통해 사용자가 입력한 값을 누적해서 더한다.
문제 풀이
ex1) 이름과 나이를 입력하면 출력하는 프로그램
출력 형식 : 당신의 이름은 (이름)이고, 나이는 (나이)살 입니다.
package scanner.ex;
import java.util.Scanner;
public class ScannerEx1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("당신의 이름을 입력하세요 : ");
String name = scanner.nextLine();
System.out.print("당신의 나이를 입력하세요 : ");
int age = scanner.nextInt();
System.out.println("당신의 이름은 " + name + "이고, 나이는 " + age + "살입니다.");
}
}
ex2) 홀수 짝수
사용자로부터 하나의 정수를 입력받고, 이 정수가 홀수인지 짝수인지 판별하는 프로그램을 작성
package scanner.ex;
import java.util.Scanner;
public class ScannerEx2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("하나의 정수를 입력하세요: ");
int number = scanner.nextInt();
if (number % 2 == 0) {
System.out.println("입력한 정수 " + number + "는 짝수입니다.");
} else {
System.out.println("입력한 정수 " + number + "는 홀수입니다.");
}
}
}
ex3) 음식점 주문
- 사용자로부터 음식의 이름( foodName ), 가격( foodPrice ), 그리고 수량( foodQuantity )을 입력받아, 주문
한 음식의 총 가격을 계산하고 출력하는 프로그램을 작성하세요. - 음식의 총 가격을 계산하세요. 총 가격은 각 음식의 가격( foodPrice )과 수량( foodQuantity )을 곱한 값이
며, 이를 totalPrice 라는 이름의 변수에 저장하세요. - 주문 정보와 총 가격을 출력하세요. 출력 형태는 "[음식 이름] [수량]개를 주문하셨습니다. 총 가격은 [총 가격]원
입니다." 이어야 합니다
package scanner.ex;
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 + "원입니다.");
}
}
ex4) 구구단 출력
사용자로부터 하나의 정수 n을 입력받고, 입력받은 정수 n의 구구단을 출력하는 프로그램을 작성.
package scanner.ex;
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 i = 1; i <= 9; i++) {
System.out.println(n + " x " + i + " = " + n * i);
}
}
}
ex5) 변수 값 교환
변수 a와 b의 값을 교환하는 코드 작성
package scanner.ex;
public class ChangeVarEx {
public static void main(String[] args) {
int a = 10;
int b = 20;
int temp;
temp = a;
a = b;
b = temp;
System.out.println(" a = " + a);
System.out.println(" b = " + b);
}
}
- a와 b를 한 번에 서로 교환하는 것은 불가능함 (a = b라고 하면 원래 a의 값 10은 20이 되기 때문에 b에 a의 값인 10을 줄 수 없음)
- 임시 변수 temp를 설정하고 temp에 a의 값을 저장하고 a에 b의 값을 저장하고 b에 temp의 값을 저장하는 것으로 변수 a와 b의 값을 서로 교환할 수 있다.
ex6) 사이 숫자
사용자로부터 두 개의 정수를 입력받고, 이 두 정수 사이의 모든 정수를 출력하는 프로그램을 작성하세요.
- 사용자에게 첫 번째 숫자를 입력받으세요. 변수의 이름은 num1 이어야 합니다.
- 사용자에게 두 번째 숫자를 입력받으세요. 변수의 이름은 num2 이어야 합니다.
- 만약 첫 번째 숫자 num1 이 두 번째 숫자 num2 보다 크다면, 두 숫자를 교환하세요.
- 참고: 교환을 위해 임시 변수 사용을 고려하세요.
- num1 부터 num2 까지의 각 숫자를 출력하세요.
- 출력 결과에 유의하세요. 다음 예시와 같이 2,3,4,5 처럼 , 로 구분해서 출력해야 합니다.
package scanner.ex;
import java.util.Scanner;
public class ScannerEx5 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("첫 번째 숫자를 입력하세요: ");
int num1 = input.nextInt();
System.out.print("두 번째 숫자를 입력하세요: ");
int num2 = input.nextInt();
if (num1 > num2) {
int temp = num1;
num1 = num2;
num2 = temp;
}
System.out.println("두 숫자 사이의 모든 정수: ");
for (int i = num1; i <= num2; i++) {
System.out.print(i);
if (i != num2) {
System.out.print(",");
}
}
}
}
ex7) 이름과 나이 반복
- 사용자로부터 이름과 나이를 반복해서 입력받고, 입력받은 이름과 나이를 출력하는 프로그램 작성, 사용자가 "종료"를 입력하면 프로그램이 종료됨
package scanner.ex;
import java.util.Scanner;
public class ScannerWhileEx1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (true) {
System.out.print("이름을 입력하세요 (종료를 입력하면 종료) : ");
String name = input.nextLine();
if (name.equals("종료")) {
System.out.println("프로그램을 종료합니다.");
break;
}
System.out.print("나이를 입력하세요 : ");
int age = input.nextInt();
input.nextLine(); // 숫자 입력 후의 줄바꿈 처리
System.out.println("입력한 이름: " + name + ", 나이: " + age);
}
}
}
ex8) 상품 가격 계산
- 사용자로부터 상품의 가격( price )과 수량( quantity )을 입력받고, 총 비용을 출력하는 프로그램을 작성하세
요. - 가격과 수량을 입력받은 후에는 이들의 곱을 출력하세요. 출력 형태는 "총 비용: [곱한 결과]"이어야 합니다.
- -1을 입력하여 가격 입력을 종료합니다.
package scanner.ex;
import java.util.Scanner;
public class ScannerWhileEx2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (true) {
System.out.print("상품의 가격을 입력하세요 (-1을 입력하면 종료): ");
int price = input.nextInt();
if (price == -1) {
System.out.println("프로그램을 종료합니다.");
break;
}
System.out.print("구매하려는 수량을 입력하세요: ");
int quantity = input.nextInt();
System.out.println("총 비용: " + price*quantity);
}
}
}
ex9) 입력한 숫자의 합계와 평균
- 사용자로부터 여러 개의 숫자를 입력 받고, 그 숫자들의 합계와 평균을 계산하는 프로그램을 작성하세요. 사용자
는 숫자를 입력하고, 마지막에는 -1을 입력하여 숫자 입력을 종료한다고 가정합니다. - 모든 숫자의 입력이 끝난 후에는, 숫자들의 합계 `sum` 과 평균 `average` 를 출력하세요. 평균은 소수점 아래까지
계산해야 합니다.
package scanner.ex;
import java.util.Scanner;
public class ScannerWhileEx3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int sum = 0;
int count = 0;
int num = 0;
System.out.println("숫자를 입력하세요. 입력을 중단하려면 -1을 입력하세요: ");
while (true) {
num = input.nextInt();
if (num == -1) {
break;
}
sum += num;
count++;
}
// while ((num = input.nextInt()) != -1) {
// sum += num;
// count++;
// }
double average = (double) sum / count;
System.out.println("입력한 숫자들의 합계: " + sum);
System.out.println("입력한 숫자들의 평균: " + average);
}
}
- while문을 주석처리 부분처럼 간략화 할 수 있음
ex10) 상품 구매
- 사용자로부터 상품 정보(상품명, 가격, 수량)를 입력받고, 이들의 총 가격을 출력하는 프로그램을 작성하세요. 사
용자는 여러 상품을 추가하고 결제할 수 있으며, 프로그램을 언제든지 종료할 수 있습니다. - 사용자에게 다음 세 가지 옵션을 제공해야 합니다: 1: 상품 입력, 2: 결제, 3: 프로그램 종료. 옵션은 정수로 입력받
으며, 옵션을 저장하는 변수의 이름은 `option` 이어야 합니다. - 상품 입력 옵션을 선택하면, 사용자에게 상품명과 가격, 수량을 입력받으세요.
- 결제 옵션을 선택하면, 총 비용을 출력하고 총 비용을 `0` 으로 초기화하세요. (사용자가 총 비용을 확인하고, 결제
를 완료했다고 가정합니다. 따라서 다음 사용자를 위해 총 비용을 다시 `0` 으로 초기화 해야합니다.) - 프로그램 종료 옵션을 선택하면, "프로그램을 종료합니다."라는 메시지를 출력하고 프로그램을 종료하세요.
- 위의 세 가지 옵션 외에 다른 값을 입력하면, "올바른 옵션을 선택해주세요."라는 메시지를 출력하세요.
package scanner.ex;
import java.util.Scanner;
public class ScannerWhileEx4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int totalCost = 0;
while (true) {
System.out.println("1: 상품 입력, 2: 결제, 3: 프로그램 종료");
int option = input.nextInt();
input.nextLine();
if (option == 1) {
System.out.print("상품명을 입력하세요: ");
String name = input.nextLine();
System.out.print("상품의 가격을 입력하세요: ");
int price = input.nextInt();
System.out.print("구매 수량을 입력하세요: ");
int quantity = input.nextInt();
input.nextLine();
totalCost += price * quantity;
System.out.println("상품명:" + name + " 가격:" + price + " 수량:" + quantity + " 합계:" + totalCost);
} else if (option == 2) {
System.out.println("총 비용: " + totalCost);
totalCost = 0;
} else if (option == 3) {
System.out.println("프로그램을 종료합니다.");
break;
} else {
System.out.println("올바른 옵션을 선택해 주세요.");
continue;
}
}
}
}
- 위 코드는 switch문으로 작성 가능
정리
'항해 99 > Java' 카테고리의 다른 글
Java 기초 6 - 메서드 (1) | 2024.01.23 |
---|---|
Java 기초 5 - 배열 (0) | 2024.01.22 |
Java 문법 기초 테스트-3 (1) | 2024.01.22 |
Java 문법 기초 테스트-2 (0) | 2024.01.20 |
Java 문법 기초 테스트-1 (0) | 2024.01.20 |