수업
+12 메소드 호출, 응용
hs_developer
2022. 5. 18. 15:01
a=92, b=73
최대 값: 92
최소 값: 73
최대 값과 최소 값 차이: 19
// 1. 정수 2개 전송 (매개변수에 값 채운다) → 결과 값은 최대 값
static int max(int a, int b)
{
return a>b?a:b;
}
static int min(int a, int b)
{
return a<b?a:b;
}
static void process()
{
// 출력
int a = (int)(Math.random()*100)+1;
int b = (int)(Math.random()*100)+1;
System.out.println("a=" + a +", b=" + b);
System.out.println("최대 값: " + max(a, b));
System.out.println("최소 값: " + min(a, b));
// 최대 값과 최소 값 차이 출력
int max = max(a, b); // 결과 값을 받아 놓아야 함
int min = min(a, b);
System.out.println("최대 값과 최소 값 차이: " + (max-min));
}
public static void main(String[] args) {
process();
}
메소드 호출
// static → 메모리에 자동 저장
int add(int a, int b, int c)
{
return a+b+c;
}
public static void main(String[] args) {
add(10, 20, 30);
// static이 없어 저장이 안 된 상태
// static 없이 호출할 경우 new 사용
}
static int add(int a, int b, int c)
{
return a+b+c;
}
public static void main(String[] args) {
int sum = add(10, 20, 30);
double avg = sum/3.0;
System.out.printf("%.2f", avg);
}
메소드 응용
노래 사이트 크롤링
===== 메뉴 =====
1. Music Top 50
2. 가요
3. POP
4. OST
5. 트로트
6. JAZZ
7. CLASSIC
9. 종료
===============
import java.util.*;
import org.jsoup.Jsoup;
import org.jsoup.select.Elements;
public class 음악사이트 {
static int menu()
{
System.out.println("===== 메뉴 =====");
System.out.println("1. Music Top 50");
System.out.println("2. 가요");
System.out.println("3. POP");
System.out.println("4. OST");
System.out.println("5. 트로트");
System.out.println("6. JAZZ");
System.out.println("7. CLASSIC");
System.out.println("9. 종료");
System.out.println("===============");
Scanner sc = new Scanner(System.in);
System.out.println("메뉴 선택: ");
int m = sc.nextInt();
return m;
}
// 음악 사이트 크롤링 메소드
static void musicData(int type)
{
String[] site = {
"https://www.genie.co.kr/chart/top200",
"https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220516&genrecode=M0100",
"https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220516&genrecode=M0200",
"https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220516&genrecode=M0300",
"https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220516&genrecode=M0107",
"https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220516&genrecode=M0500",
"https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220516&genrecode=M0600"
};
try
{
// Runtime.getRuntime().exec("\\C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe " + site[type-1]);
org.jsoup.nodes.Document doc = Jsoup.connect(site[type-1]).get();
// 노래 제목 불러오기
Elements title = doc.select("table.list-wrap td.info a.title");
// System.out.println(title.toString());
// 번호 입력 시 노래 제목 리스트 불러오기
for(int i=0; i<title.size(); i++)
{
System.out.println((i+1)+"."+title.get(i).text());
}
} catch(Exception ex) {}
}
static void process()
{
while(true)
{
int m = menu();
if(m==9)
{
System.out.println("프로그램 종료");
break;
}
else
{
musicData(m);
}
}
}
public static void main(String[] args) {
process();
}
}
다른 클래스에서 재사용
public class 재사용 {
public static void main(String[] args) {
음악사이트.process(); // 디른 클래스에서 재사용
}
}
영화 사이트 크롤링
===== 메뉴 =====
1. reservation
2. boxoffice
3. OTT
4. Netflix
5. Watcha
6. Kakaopage
7. Search
9. End
===============
import java.util.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class 영화사이트 {
// 메뉴
static int menu()
{
System.out.println("===== 메뉴 =====");
System.out.println("1. reservation");
System.out.println("2. boxoffice");
System.out.println("3. OTT");
System.out.println("4. Netflix");
System.out.println("5. Watcha");
System.out.println("6. Kakaopage");
System.out.println("7. Search");
System.out.println("9. End");
System.out.println("===============");
Scanner sc = new Scanner(System.in);
System.out.println("메뉴 선택: ");
int m = sc.nextInt();
return m;
}
// 목록
static void movieData(int type)
{
String[] site = {
"https://movie.daum.net/ranking/reservation",
"https://movie.daum.net/ranking/boxoffice/weekly",
"https://movie.daum.net/ranking/ott",
"https://movie.daum.net/premovie/netflix",
"https://movie.daum.net/premovie/watcha",
"https://movie.daum.net/premovie/kakaopage"
};
try {
Document doc = Jsoup.connect(site[type-1]).get();
Elements title = doc.select("strong.tit_item a.link_txt");
// a 태그 포함돼 출력
// System.out.println(title.toString());
// a 태그 제거
for(int i=0; i<title.size(); i++)
{
System.out.println((i+1) + "." + title.get(i).text());
}
} catch (Exception e) {}
}
// 찾기
static void searchData(String ss)
{
try {
Document doc = Jsoup.connect("https://movie.daum.net/ranking/reservation").get();
Elements title = doc.select("strong.tit_item a.link_txt");
// a 태그 제거
for(int i=0; i<title.size(); i++)
{
if(title.get(i).text().contains(ss))
{
System.out.println((i+1) + "." + title.get(i).text());
}
}
} catch (Exception e) {}
}
// 조립 → process()
static void process()
{
while(true)
{
int m = menu();
if(m==9)
{
System.out.println("프로그램 종료!!");
break;
}
else if(m==7) // 검색 기능
{
Scanner sc = new Scanner(System.in);
System.out.println("검색어 입력: ");
String ss = sc.next();
searchData(ss); // 찾기 메소드
}
else
{
movieData(m);
}
}
}
public static void main(String[] args) {
process();
}
}
전역 변수
음악
1. 목록 → 페이지 나누기
2. 상세 보기
3. 노래 찾기
4. 가수명 입력해서 → 노래 제목 찾기
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 메소드 제작
→ 메뉴
===== 메뉴 =====
1. 음악 목록
2. 상세 보기
3. 노래 찾기
4. 가수 명으로 노래 찾기
9. 종료
===============
메뉴 선택:
import java.util.Scanner;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class 전역변수 {
// 선언
static String[] title = new String[200]; // 노래 200개
static String[] singer = new String[200]; // 가수 200명
static // 1번만 실행 됨
{
try
{
int k=0;
for(int i=1; i<=4; i++)
{
Document doc = Jsoup.connect("https://www.genie.co.kr/chart/top200?ditc=D&ymd=20220518&hh=15&rtm=Y&pg="+i).get();
// 제목
Elements mt = doc.select("table.list-wrap td.info a.title");
// 가수명
Elements ms = doc.select("table.list-wrap td.info a.artist");
for(int j=0; j<mt.size(); j++)
{
try
{
title[k] = mt.get(j).text();
singer[k] = ms.get(j).text();
} catch(Exception ex){}
k++;
}
}
} catch(Exception ex) {}
}
static int menu()
{
System.out.println("===== 메뉴 =====");
System.out.println("1. 음악 목록");
System.out.println("2. 상세 보기");
System.out.println("3. 노래 찾기");
System.out.println("4. 가수 명으로 노래 찾기");
System.out.println("9. 종료");
System.out.println("===============");
Scanner sc = new Scanner(System.in);
System.out.println("메뉴 선택: ");
int m = sc.nextInt();
return m;
}
// 음악 목록
static void musicList()
{
// 전체 목록 출력
for(int i=0; i<title.length; i++)
{
System.out.println((i+1) + "." + title[i]);
}
}
// 상세 보기
static void musicDetail()
{
Scanner sc = new Scanner(System.in);
System.out.println("1-200 사이의 노래 번호 입력: ");
int no = sc.nextInt();
System.out.println("===== 상세 보기 =====");
System.out.println("노래 제목: " + title[no-1]);
System.out.println("가수명: " + singer[no-1]); // 배열에서 찾으므로 -1
System.out.println("===================");
}
// 노래 찾기
static void musicFind()
{
Scanner sc = new Scanner(System.in);
System.out.println("검색어 입력: ");
String ss = sc.next();
for(String t:title)
{
if(t.contains(ss))
{
System.out.println(t);
}
}
}
// 가수명으로 노래 찾기
static void singerFind()
{
// 1. 가수명 입력
// 2. singer[] → 전체(singer, title → 인덱스 번호 매치됨)
// 3. 인덱스 번호
Scanner sc = new Scanner(System.in);
System.out.println("가수명 입력: ");
String s = sc.next();
for(int i=0; i<singer.length; i++)
{
// if(s.equals(singer[i]))
if(singer[i].contains(s)) // startsWith
{
System.out.println(title[i]); // singer[i]번째와 title[i]번째 순서가 같은지
}
}
}
// 조립 → 메소드 전부 모으는 역할
static void process()
{
while(true)
{
int m = menu();
if(m==9)
{
System.out.println("프로그램 종료!!");
break;
}
else if(m==1)
{
musicList();
}
else if(m==2)
{
musicDetail();
}
else if(m==3)
{
musicFind();
}
else if(m==4)
{
singerFind();
}
}
}
public static void main(String[] args) {
process();
}
}