일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- php
- 정보처리기사실기요약
- 이안의평일코딩
- 정보처리기사정리
- 리액트
- VUE
- 정보처리기사요약
- typescript
- 국비IT
- 정보처리기사실기
- spring
- 자바의정석
- 자스코테
- 정보처리기사실기정리
- Java의정석
- 정보처리기사
- 스프링
- Oracle
- ReactNative
- 자바스크립트 코딩테스트
- react
- 코딩테스트
- 국비코딩
- 자바스크립트
- CSS
- 평일코딩
- 타입스크립트
- 오라클
- javascript
- 리액트네이티브
- Today
- Total
이안의 평일코딩
JAVA의 정석 17일차 - 메소드 응용 본문
2020.07.07(화)
1. 메소드 응용
메소드 : 한가지 기능만 수행 => 다음에 다시 사용할 수 있게 만든다
목적
=> 재사용
=> 반복 제거
형식)
반환형이 없는 경우 : void
매개변수가 없는 경우 (매개변수 => 주로 사용자가 요청한 값)
반환형이 존재 => 사용자가 요청한 내용의 결과값 => 반드시 한개만 존재
여러개일 경우 : 배열, 클래스 이용
매개변수가 존재 => 아이디 중복체크 (=> id), 우편번호 검색(동, 길)
로그인 (id, password)
반환형(리턴형) 메소드명(매개변수, 매개변수..) {
종료 => return =>
}
void process() {
if(key==ENTER) {
return; // 강제로 종료
System.out.println(); ==> 오류
}
동작
System.out.println("aaaa");
return; => return 문장 밑에는 소스 코딩을 할 수 없다 //제어break; continue; return;
}
int add(int a, int b) {
return a+b;
}
호출
int a = add(10,20)
void add(int a, int b)
add(10,20)
호출할 때마다 => 메소드 처음부터 return까지 수행 => 다시 호출한 위치로 돌아온다
메소드 용도
(1) 기능, 입력, 출력
(2) 조립
(3) 시작점 => main()
2. 연습문제
1) 사용자가 년도를 입력하면 윤년 여부 확인
// 다음에 다시 사용할 수 있게. => modify 수정이 가능(오버라이딩), new 추가가 가능(오버로딩)
(사이트 => 로그인 회원가입 게시판 공지사항)
import java.util.*;
public class 자바메소드 {
// 사용자 입력 => 년도
// 윤년여부를 확인하는 기능 => 재사용
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("년도 입력>");
int year = scan.nextInt();
if((year%4==0 && year%100!=0) || (year%400==0)) {
System.out.println(year+"년도는 윤년입니다");
}
else {
System.out.println(year+"년도는 윤년이 아닙니다");
}
}
}
import java.util.*;
public class 자바메소드 {
// 사용자 입력 => 년도
static int userInput() {
Scanner scan = new Scanner(System.in);
System.out.print("년도 입력>");
int year = scan.nextInt();
return year;
}
// 윤년여부를 확인하는 기능
static boolean isYear(int year) {
boolean bCheck=false;
if((year%4==0 && year%100!=0) || (year%400==0)) {
bCheck=true;
}
else {
bCheck=false;
}
return bCheck;
}
public static void main(String[] args) {
int year=userInput();
boolean bCheck=isYear(year);
if(bCheck==true)
System.out.println(year+"년도는 윤년입니다");
else
System.out.println(year+"년도는 윤년이 아닙니다");
}
}
2) 국어 영어 수학 => 총점,평균,학점
import java.util.*;
public class 자바메소드2 {
// 입력
static int userInput(String subject) {
Scanner scan = new Scanner(System.in);
System.out.print(subject+" 점수입력:");
int score=scan.nextInt();
return score;
}
static int total(int kor, int eng, int math) {
return kor+eng+math;
}
//평균
static void avg(int total) { //메소드안에서 출력하려면 void 받아서 출력하려면 데이터형
System.out.printf("평균:%,2f\n",total/3.0);
}
static char hakjum(int total) {
char hakjum = 'A';
switch(total/30) {
case 10:
case 9:
hakjum = 'A';
break;
case 8:
hakjum = 'B';
break;
case 7:
hakjum = 'C';
break;
case 6:
hakjum = 'D';
break;
default:
hakjum = 'F';
break;
}
return hakjum;
}
public static void main(String[] args) {
int kor=userInput("국어");
int eng=userInput("영어");
int math=userInput("수학");
int total=total(kor, eng, math); // 변수명, 메소드
char hakjum=hakjum(total);
// 출력
System.out.println("국어점수:"+kor);
System.out.println("영어점수:"+eng);
System.out.println("수학점수:"+math);
System.out.println("총점:"+total);
avg(total);
System.out.println("학점:"+hakjum);
}
}
3) 사용자 정수입력 => 짝수, 홀수
메소드 => 결과값 => 리턴값
메소드 자체에서 출력 => 리턴값(X) void
1) => 입력
2) => 입력 처리
3) => 결과 출력
import java.util.*;
public class 자바메소드3 {
static int userInput() {
Scanner scan = new Scanner(System.in);
System.out.print("정수입력>");
int num = scan.nextInt();
return num;
}
// 연산자+제어문=메소드
// 클래스 : 변수+메소드
static void process(int num) {
if(num%2==0)
System.out.println(num+"는(은) 짝수입니다");
else
System.out.println(num+"는(은) 홀수입니다");
}
public static void main(String[] args) {
// 사용자 입력값을 받는다
int num = userInput();
process(num);
}
}
4) 영화를 선택
=> 현재상영영화
개봉예정영화
박스오피스(주간)
박스오피스(월간)
박스오피스(연간)
//<div class="wrap_movie">
//<div class="info_tit">
//<em class="ico_movie ico_15rating">15세이상관람가</em>
//<a href="/moviedb/main?movieId=134684" class="name_movie"
// data-tiara-layer="moviename"
// data-tiara-ordnum="1" data-tiara-id="134684" data-tiara-type="movie">#살아있다</a>
//</div>
//
//<span class="info_grade">
//<a href="/moviedb/grade?movieId=134684&type=netizen" class="link_grade"
// data-tiara-layer="point" data-tiara-ordnum="1">
//<span class="txt_grade">네티즌</span>
//<span class="wrap_grade grade_netizen">
//<span class="ico_star ico_14star">등급</span>
//<span class="num_grade num_05">05</span>
//<span class="num_grade grade_dot">.</span>
//<span class="num_grade num_00">00</span>
//</span>
//</a>
//</span>
//<span class="info_state">
//20.06.24 개봉
//<span class="txt_dot"></span>
//예매율 57.07%
//</span>
import java.util.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class 자바메소드4 {
static int menuSelect() {
Scanner scan = new Scanner(System.in);
System.out.print("메뉴를 선택하세요(1~5):");
int no=scan.nextInt();
return no;
}
static void menu() {
System.out.println("===== Menu =====");
System.out.println("1.현재상영영화");
System.out.println("2.개봉예정영화");
System.out.println("3.박스오피스(주간)");
System.out.println("4.박스오피스(월간)");
System.out.println("5.박스오피스(연간)");
System.out.println("6.종료");
System.out.println("================");
}
static void movieData(int no) throws Exception {
String[] site = {
"https://movie.daum.net/premovie/released",
"https://movie.daum.net/premovie/scheduled",
"https://movie.daum.net/boxoffice/weekly",
"https://movie.daum.net/boxoffice/monthly",
"https://movie.daum.net/boxoffice/yearly"
};
String[] subject = {
"현재상영영화",
"개봉예정영화",
"박스오피스(주간)",
"박스오피스(월간)",
"박스오피스(연간)"
};
//출력
System.out.println("★★★★★ "+subject[no-1]+" ★★★★★");
Document doc=Jsoup.connect(site[no-1]).get();
Elements title=doc.select("div.info_tit a.name_movie");
for(int i=0; i<title.size(); i++) {
System.out.println((i+1)+"."+title.get(i).text());
}
}
public static void main(String[] args) throws Exception{
while(true) {
menu();
int no = menuSelect();
if(no==6) {
System.out.println("프로그램 종료");
break;
}
movieData(no);
}
}
}
5) 글 읽어오기
import java.io.FileReader;
public class 자바메소드5 {
public static void main(String[] args) throws Exception{
FileReader fr = new FileReader("C:\\javaDev\\news.txt");
//String news="";
StringBuffer sb = new StringBuffer(); //String Buffer가 더 빠르다
int i=0;
while((i=fr.read())!=-1) { //문장의 끝이 아닐 때 까지 읽어옴
sb.append(String.valueOf((char)i));
//news+=String.valueOf((char)i);
}
fr.close();
System.out.println(sb);
}
}
6) 글자 갯수 가장 긴 것 찾기
public class 자바메소드5 {
static String[] title = { //전역변수 : Class 블록안에 선언 vs 지역변수 : Method 안
"#살아있다",
"결백",
"온워드:단 하루의 기적",
"소리꾼",
"인베이전 2020",
"다크 나이트",
"위대한 쇼맨",
"트로이 디렉터스 컷",
"야구소녀",
"아무튼, 아담"
};
static void titleMax() {
int max=0;
for(int i=0; i<title.length; i++) {
if(max<title[i].length())
max=title[i].length();
}
for(int i=0; i<title.length; i++) {
if(max==title[i].length())
System.out.println(title[i]);
}
}
static void titleMin() {
int min=100;
for(int i=0; i<title.length; i++) {
if(min>title[i].length())
min=title[i].length();
}
for(int i=0; i<title.length; i++) {
if(min==title[i].length())
System.out.println(title[i]);
}
}
static void process() {
System.out.println("가장 긴 영화명:");
titleMax();
System.out.println("가장 짧은 영화명:");
titleMin();
}
public static void main(String[] args) throws Exception{
process();
}
}
7) 달력만들기_절차적언어
순차적인 코딩 => 구조화 코딩(메소드)
========= 기능별로 묶어서 사용이 가능 (재사용, 코드의 중복을 제거)
===== 수정, 추가 편리하게 만드는 프로그램
(1) 사용자로부터 년도, 월을 받는다
(2) 요일을 구한다 ==> 세분화
(3) 해당요일부터 달력을 출력한다
import java.util.*;
public class 달력만들기_절차적언어 {
//static void process(int year, int month) { //매개변수 이용해서 지역변수 사용
//System.out.println(year+"년도 "+month+"월");
//}
public static void main(String[] args) {
//1. 사용자 입력값 받기
Scanner scan = new Scanner(System.in);
System.out.print("년도 입력:");
// 입력된 데이터를 메모리에 저장
int year = scan.nextInt();
System.out.print("월 입력:");
int month = scan.nextInt();
//저장된 year, month => main이 끝날때까지 사용이 가능
//지역변수를 다른 메소드에서 사용할때는 => 매개변수를 이용해서 전송
//2.요일 구하기
// 1) 전년도까지의 총날 수 (year-1) 2020 => 1.1.1~2019.12.31
int total = (year-1)*365 + (year-1)/4 - (year-1)/100 + (year-1)/400;
// 2) 전달까지의 총 날수
// 3월 => total+31+28
// 4월 => total+31+28+31
int[] lastDay = {31,28,31,30,31,30,31,31,30,31,30,31};
if ((year%4==0 && year%100!=0) || (year%400==0))
lastDay[1] = 29;
else
lastDay[1] = 28;
for(int i=0; i<month-1; i++) {
total+=lastDay[i];
}
// 요청한 달의 1일자의 요일 구하기
total++; //1일자부터 요일 확인
// 요일 구하기
int week = total%7;
// 1년도 1월 1일 => 월
// 출력(달력)
System.out.println(year+"년도 "+month+"월");
String[] strWeek = {"일", "월", "화", "수", "목", "금", "토"};
for(int i=0; i<7; i++) {
System.out.print(strWeek[i]+"\t");
}
System.out.println();
// 달력 출력
for(int i=1; i<=lastDay[month-1]; i++) {
//공백
if(i==1) {
for(int j=0; j<week; j++) {
System.out.print("\t");
}
}
// 1부터 출력
System.out.printf("%2d\t",i);
// 요일 증가
week++;
if(week>6) {
week=0;
System.out.println();
}
}
}
}
7-2)메소드 사용
import java.util.*;
public class 달력만들기_메소드사용 {
static int userInput(String msg) {
Scanner scan = new Scanner(System.in);
System.out.print(msg+" 입력:");
int num = scan.nextInt();
return num;
}
// 요일 구하기
static int getWeek(int year, int month) { //매개변수로 가져오기
int total = (year-1)*365 + (year-1)/4 - (year-1)/100 + (year-1)/400;
int[] lastDay = {31,28,31,30,31,30,31,31,30,31,30,31};
if ((year%4==0 && year%100!=0) || (year%400==0))
lastDay[1] = 29;
else
lastDay[1] = 28;
for(int i=0; i<month-1; i++) {
total+=lastDay[i];
}
total++;
int week = total%7;
return week;
}
// 달력 출력
static void dataPrint(int year, int month, int week) { //매개변수로 가져오기
int[] lastDay = {31,28,31,30,31,30,31,31,30,31,30,31};
if ((year%4==0 && year%100!=0) || (year%400==0))
lastDay[1] = 29;
else
lastDay[1] = 28;
System.out.println(year+"년도 "+month+"월");
String[] strWeek = {"일", "월", "화", "수", "목", "금", "토"};
for(int i=0; i<7; i++) {
System.out.print(strWeek[i]+"\t");
}
System.out.println();
for(int i=1; i<=lastDay[month-1]; i++) {
if(i==1) {
for(int j=0; j<week; j++) {
System.out.print("\t");
}
}
System.out.printf("%2d\t",i);
week++;
if(week>6) {
week=0;
System.out.println();
}
}
}
// 메소드 여러개 조립하는 메소드
static void process() {
int year=userInput("년도");
int month=userInput("월");
// 요일
int week=getWeek(year, month);
// 출력
dataPrint(year, month, week);
}
public static void main(String[] args) {
process();
}
}
7-3)메소드 정리
import java.util.*;
public class 달력만들기_메소드사용 {
static int userInput(String msg)
{
Scanner scan=new Scanner(System.in);
System.out.print(msg+" 입력:");
int num=scan.nextInt();
return num;
}
// 2. 요일 구하기
static int getWeek(int year,int month)
{
// 1) 전년도까지의 총날 수 (year-1) 2020 => 1.1.1~2019.12.31
int total=(year-1)*365
+(year-1)/4
-(year-1)/100
+(year-1)/400;
// 2) 전달까지의 총 날수
// 3 ==> total+31+28
// 4 ==> total+31+28+31
for(int i=1;i<=month-1;i++)
{
total+=lastDay(year, i);
}
// 요청한 달의 1일자의 요일 구하기
total++;
// 요일 구하기
int week=total%7;
return week;
}
// 각달의 마지막날짜 알려주는 기능
static int lastDay(int year,int month)
{
int[] lastDay={
31,28,31,30,31,30,
31,31,30,31,30,31
};
if(isYear(year))
lastDay[1]=29;
else
lastDay[1]=28;
return lastDay[month-1];
}
// 반복(X) => 재사용성
static boolean isYear(int year)
{
boolean bCheck=false;
if((year%4==0 && year%100!=0)||(year%400==0))
bCheck=true;
return bCheck;
}
// 달력 출력
static void datePrint(int year,int month,int week)
{
int last=lastDay(year, month);
String[] strWeek= {"일","월","화","수","목","금","토"};
for(int i=0;i<7;i++)
{
System.out.print(strWeek[i]+"\t");
}
System.out.println();
for(int i=1;i<=last;i++)
{
// 공백
if(i==1)
{
for(int j=0;j<week;j++)
{
System.out.print("\t");
}
}
// 1부터 출력
System.out.printf("%2d\t",i);
// 요일 증가
week++;
if(week>6)
{
week=0;
System.out.println();
}
}
}
// 메소드 여러개 조립하는 메소드
static void process()
{
int year=userInput("년도");
int month=userInput("월");
// 요일
int week=getWeek(year, month);
// 출력
datePrint(year, month, week);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
process();
}
}
7-4)메소드 재사용
import java.util.*;
public class 메소드_재사용 {
public static void main(String[] args) {
// 달력만들기_메소드사용.process();
int year = 달력만들기_메소드사용.userInput("년도");
boolean bCheck = 달력만들기_메소드사용.isYear(year);
if(bCheck==true)
System.out.println("윤년이다");
else
System.out.println("윤년이 아니다");
}
}
8) 야구게임_절차적언어
1. 3의 정수를 난수발생 (중복없이) => 1~9사이
2. 사용자 입력
3. 비교
4. 힌트
5. 정답일때 종료
============ 조립 process() 메인에서 출력
import java.util.*;
public class 야구게임_절차적언어 {
public static void main(String[] args) {
//1. 중복없는 난수 ==> 3개
int[] com = new int[3];
// 1~9 => 111
int su=0; // 난수를 저장하는 변수
boolean bCheck=false; // 중복여부 확인 (중복 : true, 중복(X) : false)
for(int i=0; i<3; i++) {
bCheck=true;
while(bCheck) {
// 난수 발생
su = (int)(Math.random()*9+1); //1~9
bCheck = false;
// while 종료 조건
// 체크
for(int j=0; j<i; j++) {
if(com[j]==su) {
bCheck=true;
break;
} //else를 bCheck=false를 걸면 안됨. 기본값 false로주고 해야됨.
}
}
com[i]=su;
//System.out.print(com[i]+"\t");
}
//System.out.println();
// 2. 사용자 입력
int[] user = new int[3];
// 입력
Scanner scan = new Scanner(System.in);
while(true) {
System.out.print("세자리 정수를 입력:");
int input = scan.nextInt();
// 첫번째 오류 처리 => 세자리 정수가 입력이 안됐다면
if(input<100 || input>999) {
System.out.println("잘못된 입력입니다");
// 처음으로 이동
continue;
}
// 자르기 예)369
user[0]=input/100; // 369/100 => 3
user[1]=(input%100)/10; // 369%100 => 69/10 => 6
user[2]=input%10; // => 369%10 => 9
// 두번째 오류
if(user[0]==user[1]||user[1]==user[2]||user[0]==user[2]) {
System.out.println("중복된 정수는 사용 할 수 없습니다");
continue;
}
// 세번째 오류
if(user[0]==0 || user[1]==0 || user[2]== 0) {
System.out.println("0은 사용할 수 없습니다");
continue;
}
// 비교
int s=0, b=0;
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(com[i]==user[j]) {
if(i==j)
s++;
else
b++;
}
}
}
// 힌트
System.out.printf("Input Number:%d, Result:%dS-%dB\n",input,s,b);
// 종료여부
if(s==3) {
System.out.println("Game Over!!");
break;
}
}
}
}
8-2) 메소드사용
/*
1. 3의 정수를 난수발생 (중복없이) => 1~9사이
2. 사용자 입력
3. 비교
4. 힌트
5. 정답일때 종료
*/
import java.util.*;
public class 야구게임_메소드사용2 {
// 3의 정수 난수발생
static int[] getRand() {
int[] com = new int[3];
int su=0;
boolean bCheck=false;
for(int i=0; i<3; i++) {
bCheck=true;
while(bCheck) {
su = (int)(Math.random()*9+1);
bCheck = false;
for(int j=0; j<i; j++) {
if(com[j]==su) {
bCheck=true;
break;
}
}
}
com[i]=su;
}
return com;
}
// 사용자 입력
static int[] userInput() {
int[] user = new int[3];
Scanner scan = new Scanner(System.in);
while(true) {
System.out.print("세자리 정수를 입력:");
int input = scan.nextInt();
if(input<100 || input>999) {
System.out.println("잘못된 입력입니다");
continue;
}
user[0]=input/100;
user[1]=(input%100)/10;
user[2]=input%10;
if(user[0]==user[1]||user[1]==user[2]||user[0]==user[2]) {
System.out.println("중복된 정수는 사용 할 수 없습니다");
continue;
}
if(user[0]==0 || user[1]==0 || user[2]== 0) {
System.out.println("0은 사용할 수 없습니다");
continue;
}
break; // 써줘야함.
}
return user;
}
//힌트
static void hint(int[] com, int[] user) {
int s=0, b=0;
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(com[i]==user[j]) {
if(i==j)
s++;
else
b++;
}
}
}
//배열 input값에서 배열 0~2 순서대로 받기 때문에 %d%d%d로
System.out.printf("Input Number:%d%d%d, Result:%dS-%dB\n",user[0],user[1],user[2],s,b);
if(isEnd(s)) {
System.out.println("Game Over!!");
System.exit(0); //프로그램 종류. while문이 아니기 때문에 break;쓰면 오류남
}
}
static boolean isEnd(int s) {
if(s==3) {
return true;
}
else
return false;
}
//출력
static void process() {
int[] com=getRand();
while(true) {
int[] user=userInput();
hint(com, user);
}
}
public static void main(String[] args) {
process();
}
}
'Back-end > Java' 카테고리의 다른 글
JAVA의 정석 20일차 - 클래스 생성 (0) | 2020.07.10 |
---|---|
JAVA의 정석 18일차 - 멤버변수와 공유변수 (0) | 2020.07.08 |
JAVA의 정석 16일차 - 메소드 (0) | 2020.07.06 |
JAVA의 정석 15일차 - 변수, 연산자, 제어문, 배열, 문자열 복습 (0) | 2020.07.03 |
JAVA의 정석 14일차 - 배열용도2 (0) | 2020.07.02 |