🌼 Scanner
- Scanner 클래스 : 입력장치(키보드, 파일 등)로부터 전달된 값을 반환하기 위한 기능을 제공하는 클래스
- Scanner 클래스 사용하기 위해서는 객체를 생성하여 변수에 저장
- Scanner 입력 후 [ctrrl]+[space바] → import java.util.Scanner; 생성됨
- 변수에 저장된 객체를 사용하여 메소드 호출 - 원하는 기능 구현
- Scanner scanner=new Scanner(System.in) : Scanner 객체 생성
- System.in 객체를 사용하여 키보드로부터 값을 전달받기 위한 Scanner 객체 생성
(키보드로부터 값을 전달받아 사용할수있는 스캐너 객체를 만듦)
- Scanner.nextLine()/nextInt() : 입력값을 전달받아 문자열/정수값 으로 변환하여 반환하는 메소드 (키보드로 입력된 값을 문자열/정수값 으로 반환받아 변수에 저장)
- 키보드 입력값이 없는 경우 프로그램의 흐름(스레드 - Thread)이 일시 중지
- 키보드로 값을 입력후 엔터(Enter)를 입력되면 프로그램의 흐름이 다시 실행
- 키보드로 입력된 값이 자료형과 불일치 할 경우 예외 발생
💡 참고
- system.out : 출력스트림을 사용하여 값을 화면에 출력하는 기능을 제공(메소드를 제공)하는 객체 (모니터)
- system.in : 입력스트림을 사용하여 키보드로부터 전달된 값을 입력하는 기능을 제공하는 객체
- .nextline/int : 키보드로 입력받은 값을 전달받아 문자열/정수값으로 변환하여 반환(돌려줌)하는 메소드
🐣 예제
import java.util.Scanner;
public class ScannerApp {
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+"살입니다.");
scanner.close();}}
🎀 연습문제1 - 학점 계산
- 키보드로 점수를 입력받아 학점을 계산하여 출력하는 프로그램
- 100~90 : A, 89~80 : B, 79~70 : C, 69~60 : D, 59~0 : F
- 키보드로 입력된 점수가 0~100 범위의 정수값이 아닌 경우 에러메세지 출력 후 재입력되도록 작성
public class InputCheckApp {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int score;
while(true) {
System.out.print("점수 입력[0~100] >> ");
score=scanner.nextInt();
if(score>=0 && score<=100) break;
System.out.println("[에러]점수는 0~100 범위의 정수값만 입력 가능합니다.");
}
String grade="";
switch (score/10) {
case 10:
case 9: grade="A"; break;
case 8: grade="B"; break;
case 7: grade="C"; break;
case 6: grade="D"; break;
default: grade="F"; break;
}
System.out.println("[결과]"+score+"점 >> "+grade+"학점");
scanner.close(); }}
🎀 연습문제2 - 선택 메뉴
- 키보드로 메뉴 중 하나를 입력받아 선택메뉴에 대한 기능을 제공하는 프로그램
- [프로그램 종료] 메뉴를 선택하기 전까지 원하는 기능을 계속 제공
- 선택 메뉴가 존재하지 않을 경우 에러메세지 출력 후 재입력
public class MenuApp {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("<<학생 관리 프로그램>>");
while(true) {
System.out.println("1.학생정보 삽입");
System.out.println("2.학생정보 변경");
System.out.println("3.학생정보 삭제");
System.out.println("4.학생정보 검색");
System.out.println("5.프로그램 종료");
System.out.print("메뉴 선택[1~5] >> ");
int choice=scanner.nextInt();
if(choice<0 || choice>5) {
System.out.println("[에러]선택된 메뉴가 존재하지 않습니다.\n");
continue;
}
if(choice==5) {
break;
}
switch (choice) {
case 1:
System.out.println("[결과]학생정보를 삽입 하였습니다.");
break;
case 2:
System.out.println("[결과]학생정보를 변경 하였습니다.");
break;
case 3:
System.out.println("[결과]학생정보를 삭제 하였습니다.");
break;
case 4:
System.out.println("[결과]학생정보를 검색 하였습니다.");
break;
}
System.out.println();
}
System.out.println("[메세지]학생 관리 프로그램을 종료합니다.");
scanner.close(); }}
🎀 연습문제3 - scanner
- 키보드로 정수값을 5번 입력받아 합계를 계산하여 출력하는 프로그램 작성
- ex) 1번째 정수값 입력 >> 10
···
5번째 정수값 입력 >> 50
[결과]합계 = 150
import java.util.Scanner;
public class TotalOneExample {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int tot=0;
for(int i=1;i<=5;i++) {
System.out.print(i+"번째 정수값 입력 >> ");
int num=scanner.nextInt();
tot+=num;}
System.out.println("[결과]합계 = "+tot);
scanner.close();}
🎀 연습문제4 - scanner
- 키보드로 정수값을 계속 입력받아 합계를 계산하여 출력하는 프로그램을 작성하세요.
- 단, 입력된 정수값이 0인 경우 입력을 종료하고 합계 출력
- ex) 정수값 입력[0:종료] >> 10
정수값 입력[0:종료] >> 30
정수값 입력[0:종료] >> 0
[결과]합계 = 40
import java.util.Scanner;
public class TotalTwoExample {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int tot=0;
while(true) {
System.out.print("정수값 입력[0:종료] >> ");
int num=scanner.nextInt();
if(num==0) break;
tot+=num;
}
System.out.println("[결과]합계 = "+tot);
scanner.close(); }}
🎀 연습문제5 - 난수값
- 프로그램으로부터 난수값(불규칙적으로 발생되는 숫자값)을 제공받아 출력하는 프로그램 작성
- Math 클래스 : 수학 관련 기능을 제공하는 클래스
- Math.random() : Math클래스에 랜덤이라는 메소드
→ 0.0보다 크거나 작고 1.0보다 작은 실수 난수값을 반환하는 메소드 (0.0<=난수값<1.0)
public class MathRandomApp {
public static void main(String[] args) {
for(int i=1;i<=5;i++) {
System.out.println(i+"번째 실수 난수값 = "+Math.random());}
for(int i=1;i<=5;i++) {
System.out.println(i+"번째 정수 난수값 = "+(int)(Math.random()*100));}
for(int i=1;i<=5;i++) {
System.out.println(i+"번째 정수 난수값 = "+((int)(Math.random()*45)+1));}
🎀 연습문제6 - 가위바위보 게임
- 가위바위보 게임 프로그램 작성 : 컴퓨터(난수값)와 사용자(키보드 입력값)의 가위바위보 대결
- 사용자가 이길 경우 대결을 반복 실행하며 질 결우 게임 종료
- 대결 종료 후 사용자의 승리 횟수 출력
public class RpaGameApp {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int count=0;
while(true) {
int computer=(int)(Math.random()*3)+1;
int user;
while(true) {
System.out.print("가위바위보[1:가위,2:바위,3:보] >> ");
user=scanner.nextInt();
if(user>=1 && user<=3) break;
System.out.println("[에러]가위,바위,보 중 하나를 선택하여 입력하세요.");}
System.out.print("[입력]컴퓨터 >> ");
switch (computer) {
case 1: System.out.print("가위"); break;
case 2: System.out.print("바위"); break;
case 3: System.out.print("보"); break;
}
System.out.print(", 사용자 >> ");
switch (user) {
case 1: System.out.print("가위"); break;
case 2: System.out.print("바위"); break;
case 3: System.out.print("보"); break;
}
System.out.println();
if(computer==user) {
System.out.println("[결과]컴퓨터와 사용자가 서로 비겼습니다.");
} else if(computer==1 && user==2 || computer==2 && user==3 ||
computer==3 && user==1) {
System.out.println("[결과]사용자가 컴퓨터에게 이겼습니다.");
count++;
} else {
System.out.println("[결과]사용자가 컴퓨터에게 졌습니다.");
break;
}
System.out.println();}
if (count==0) {
System.out.println("사용자가 컴퓨터에게 한번도 이기지 못했습니다.");
} else {
System.out.println("사용자가 컴퓨터에게 "+count+"번을 연속적으로 이겼습니다.");
}
scanner.close();}