일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 이클립스
- github
- 코드 정리
- CMD
- 이클립스 서버연동
- 오라클 초기 셋팅
- oracle datatype
- Oracle
- 자바
- PLSQL 설치
- DDL
- 실행파일만들기
- 톰캣 9.0 설치
- [Eclipse] 이클립스 마켓플레이스 (Marketplace) 사용방법
- id 체크
- 웹에 데이터를 전송하는 방법
- ER 마스터 사용법
- 코드이그나이터
- 코드 처리 시간
- 자바스크립트
- 기초 HTML
- php
- 개발 일기
- Nexacro
- scanner 연습문제
- php 날자 함수
- js
- 이클립스 프로젝트 변경
- 자동 배포
- strtotime()
- Today
- Total
Chillax in dev
[Java] Scanner 클래스 사용하기 본문
[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 클래스의 개념은 매우 쉽다
- 이를 적절한 분기와 반복으로 우리가 원하는 수많은 문제를 해결하는데 활용할 수 있다.
- 위 문제들을 직접 구현하여 연습해보자!
감사합니다 : )
'Java 공부 > Java_Basic_Note' 카테고리의 다른 글
[Java] 오버로딩? 오버라이딩? (0) | 2020.12.27 |
---|