Chillax in dev

[Java] Scanner 클래스 사용하기 본문

Java 공부/Java_Basic_Note

[Java] Scanner 클래스 사용하기

Seong Story 2020. 12. 22. 07:20
728x90

[Java] Scanner 클래스 공부해보자

- 이클립스를 통해 화면에 특정값을 키보드로 입력받는 방법은 여러 가지가 있다. args를 보내거나 스캐너 클래스를 사용하는 방법 등 다양한데 이클립스에서 제일 간단한 스캐너 클래스를 공부하고자 한다. 

 

방법은 간단하다!

먼저

Scanner scanner  = new Scanner(System.in); 

을 입력하여 Scanner 객체를 생성한다.  이때 스캐너 타입의 scanner은 자유롭게 sc나 원하는 걸로 변수명을 정해주자

자동완성 alt + space해주면 

import java.util.*;

util 패키지가 추가된다.

그리고 스케너변수.nextLine()  라는 메서드를 호출하여 입력 대기 상태에 있다가 입력을 마치고 '엔터(Enter)'를 누르면 입력한 내용이 문자열로 변환되어 사용한다!

  • String input = scanner.nextLine();  // 입력 후 enter 누른 내용을 문자열로 저장
  • int input = scanner.nextInt(); // 입력 후 enter 누른 내용을 정수로 저장
  • float input = scanner.nextFloat();  // 입력 후 enter 누른 내용을 실수로 저장

이때 데이터 타입에 맞게 값을 입력해야 하는데  int input = scanner.nextInt(); 의경우에 숫자가 아닌 문자 또는 기호를 입력하면, 입력받은 문자열을 숫자로 변환하는 과정인 Integer.parseInt()에서 에러가 발생함으로 특히 공백을 입력하지 않도록 주의해야겠다.


이제 여러 print문과함께 사용하여 적절한 예시로 연습해보자.

 

♥문제 1 : 삼각형의 넓이를 구하는 기능을 구현하세요

package days02;

import java.util.Scanner;

public class Variable_06 {

	public static void main(String[] args) {
		int n1, n2;
		double n3;
		Scanner sc = new Scanner(System.in);
		System.out.printf("밑변의 길이를 입력하세요");
		n1 = sc.nextInt();
		System.out.printf("높이를 입력하세요");
		n2 = sc.nextInt();
		n3 = n1 * n2 * 0.5; // n3 = (n1 * n2) / 2.0;
		System.out.printf("입력한 삼각형의 넓이는 %.1f 입니다", n3);
	}

}

 

♥문제 2: 반지름을 입력하여 원의 둘레와 넓이를 구하는 기능을 구현해보자

package days03;

import java.util.Scanner;

public class ControlOperator_04 {

	public static void main(String[] args) {
		int year;
		int na;
		Scanner sc = new Scanner(System.in);
		System.out.println("출생년도 입력 : ");
		year = sc.nextInt();
		na = 2020 - year + 1;
		
		if (na <= 0)
			System.out.println("잘못된 출생년도입니다");
		else if (na < 12)
			System.out.println("어린이 입니다");
		else if (na >= 12 && na <= 18)
			System.out.println("청소년 입니다");
		else if (na >= 19 && na <= 25)
			System.out.println("청년 입니다");
		else
			System.out.println("성년 입니다");
	}
}

♥문제 3: 12세 미만 어린이, 12~18세 청소년, 19~25세 청년, 26세 이상(나머지) 성년으로 구분하는 출생 연도를 통해 확인하도록 기능을 구현해보자 

힌트: 나이=현재년 - 출생년 +1

package days03;

import java.util.Scanner;

public class ControlOperator_04 {

	public static void main(String[] args) {
		int year;
		int na;
		Scanner sc = new Scanner(System.in);
		System.out.println("출생년도 입력 : ");
		year = sc.nextInt();
		na = 2020 - year + 1;
		// 12세 미만 어린이, 12~18세 청소년, 19~25세 청년, 26세 이상(나머지) 성년 입니다.
		if (na <= 0)
			System.out.println("잘못된 출생년도입니다");
		else if (na < 12)
			System.out.println("어린이 입니다");
		else if (na >= 12 && na <= 18)
			System.out.println("청소년 입니다");
		else if (na >= 19 && na <= 25)
			System.out.println("청년 입니다");
		else
			System.out.println("성년 입니다");
	}
}

♥문제 4: 년도를 입력받아 윤년인지 평년인지 계산하는 기능을 구현해보자

힌트: 윤년의 조건 : 4의 배수 이면서 100의 배수가 아니거나 400의 배수인 해

package days03;

import java.util.Scanner;

public class ControlOperator_06 {
	public static void main(String[] args) {
		// 실습 예제
		// 년도를 입력받아서 입력한 년도가 윤년인지 평년인지를 출력하는 코드를 작성하세요
		// 윤년의 조건 : 4의 배수 이면서 100의 배수가 아니거나 400의 배수인 해
		int year, a, b, c;
		Scanner sc = new Scanner(System.in);
		System.out.printf("년도를 입력하세요");
		year = sc.nextInt();
		a = year % 4;
		b = year % 100;
		c = year % 400;

		
		if (((a == 0) && (b != 0)) || (c == 0))
			System.out.println("윤년입니다");
		else
			System.out.println("평년입니다");
	}

}

♥문제 5: 2020년이라는 가정하에 년과 요일을 입력하면 요일이 나오는 기능을 구현해보자

package days03;

import java.util.Scanner;

public class ControlOperator_07 {
	public static void main(String[] args) {
		// 2020년 1월 1일 -> 수요일
		// 2020년에 한해서 월과 일을 입력 받아 요일을 출력
		// 스캐너와 변수 선언
		Scanner sc = new Scanner(System.in);
		int m, d, days = 0, t; // m:월, d:일, days = 0 : 합산날짜수, t:7로 나눈 나머지
		// 월과 일을 입력받습니다.
		System.out.printf("월 입력 : ");
		m = sc.nextInt();
		System.out.printf("일 입력 : ");
		d = sc.nextInt();

		System.out.println("입력한 날짜 : " + m + "월 " + d + "일");
		// 입력된 월의 전달까지의 날짜를 합산
		if (m == 1)
			days = 0;
		else if (m == 2)
			days = 31;
		else if (m == 3)
			days = 31 + 29;
		else if (m == 4)
			days = 31 + 29 + 31;
		else if (m == 5)
			days = 31 + 29 + 31 + 30;
		else if (m == 6)
			days = 31 + 29 + 31 + 30 + 31;
		else if (m == 7)
			days = 31 + 29 + 31 + 30 + 31 + 30;
		else if (m == 8)
			days = 31 + 29 + 31 + 30 + 31 + 30 + 31;
		else if (m == 9)
			days = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31;
		else if (m == 10)
			days = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
		else if (m == 11)
			days = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
		else if (m == 12)
			days = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;

		// 입력된 일을 합산
		days = days + d;
		// 합산된 총날짜를 7로 나눈 나머지를 계산
		t = days % 7;
		// 요일을 출력합니다
		if (t == 1)
			System.out.println("수요일입니다");
		else if (t == 2)
			System.out.println("목요일입니다");
		else if (t == 3)
			System.out.println("금요일입니다");
		else if (t == 4)
			System.out.println("토일입니다");
		else if (t == 5)
			System.out.println("일요일입니다");
		else if (t == 6)
			System.out.println("월요일입니다");
		else if (t == 0)
			System.out.println("화요일입니다");
	}
}

♥문제 6: 팩토 리얼 기능을 구현해보자 3!= 3x2x1

package days04;

import java.util.Scanner;

public class ControlOp_For_06 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int fact = 1, i, k;
		System.out.printf("출력할 팩터리얼을 입력하세요 : ");
		k = sc.nextInt();
		// 6! = 1x2x3x4x5x6 = 720
		// 6! =
		// 1x2x3x4x5x6
		// = 720
		System.out.printf("%d!=", k);
		/*
		 * for(i=1; i<k; i++) { fact = fact * i; System.out.printf("%dx", i); }
		 * System.out.printf("%d = %d", k, fact*k);
		 */
		for (i = k; i > 1; i--) {
			fact = fact * i;
			System.out.printf("%dx", i);
		}
		System.out.printf("%d = %d", i, fact * i);
	}
}

♥문제 7: 팩토 리얼 기능을 구현해보자 (더 짧은 방법)

package days05;

import java.util.Scanner;

public class ControlOp_While_02 {

	public static void main(String[] args) {
	
		int n, fact = 1;
		Scanner sc = new Scanner(System.in);
		System.out.print("\n팩터리얼을 계산할 정수 입력 : ");
		n = sc.nextInt();
		System.out.printf("%d! = ", n);
		while (n > 1) {
			System.out.printf("%dx", n);
			fact = fact * n;
			n--;
		}
		System.out.println("1 =" + fact);
	}

}

실행 화면

♥문제 8: 직접 달력을 만들어보자(최종 보스 문제)

package days06;

import java.util.Scanner;

public class ControlOp_04 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int m, d, days = 0, t, y, i;
		System.out.printf("년 입력 : ");
		y = sc.nextInt();
		System.out.printf("월 입력 : ");
		m = sc.nextInt();

		// while 문의 시작
		while (true) {
			days = 365 * (y - 1);
			for (i = 1; i <= y - 1; i++)
				if ((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0))
					days++;
			switch (m) {
			case 12:
				days = days + 30;
			case 11:
				days = days + 31;
			case 10:
				days = days + 30;
			case 9:
				days = days + 31;
			case 8:
				days = days + 31;
			case 7:
				days = days + 30;
			case 6:
				days = days + 31;
			case 5:
				days = days + 30;
			case 4:
				days = days + 31;
			case 3:
				if ((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0))
					days = days + 29;
				else
					days = days + 28;
			case 2:
				days = days + 31;
			case 1:
				days = days + 0;
			}
			days = days + 1;
			t = days % 7;
			System.out.println();
			System.out.println(y + "년  " + m + "월");
			System.out.println("---------------------------------------------------");
			System.out.println("일\t월\t화\t수\t목\t금\t토");
			System.out.println("---------------------------------------------------");
			int start = 0, cnt = 0;
			switch (t) {
			case 1:
				start = 0;
				break;
			case 2:
				start = -1;
				break;
			case 3:
				start = -2;
				break;
			case 4:
				start = -3;
				break;
			case 5:
				start = -4;
				break;
			case 6:
				start = -5;
				break;
			case 0:
				start = 1;
				break;
			}
			int last = 0;
			switch (m) {
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				last = 31;
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				last = 30;
				break;
			case 2:
				if ((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0))
					last = 29;
				else
					last = 28;
				break;
			}
			for (i = start; i <= last; i++) {
				cnt++;
				if (i <= 0)
					System.out.printf("\t");
				else
					System.out.printf("%2d\t", i);
				if (cnt % 7 == 0)
					System.out.println();
			}
			System.out.printf("\n메뉴선택(이전달:1, 다음달:2, 종료:3) :");
			int input = sc.nextInt();
			if (input == 1) {
				if (m == 1) {
					y--;
					m = 12;
				} else {
					m--;
				}
			} else if (input == 2) {
				if (m == 12) {
					y++;
					m = 1;
				} else {
					m++;
				}
			} else
				break;
		} // while 문의 끝
		System.out.println("프로그램이 종료되었습니다");
	}
}

 

 

정리 

- scanner 클래스의 개념은 매우 쉽다

- 이를 적절한 분기와 반복으로 우리가 원하는 수많은 문제를 해결하는데 활용할 수 있다.

- 위 문제들을 직접 구현하여 연습해보자!

 

감사합니다 : )

 

728x90
LIST

'Java 공부 > Java_Basic_Note' 카테고리의 다른 글

[Java] 오버로딩? 오버라이딩?  (0) 2020.12.27
Comments