19.JAVA 예제 정리 [메소드 응용2]
import java.io.FileReader;
import java.util.Scanner;
public class 메소드_1 {
// 화면에 출력 => 결과값이 없다. ==> void
static String movieData = "";
static // 실행시에 자동 인식
{ /*
* 예외처리 => 에외 복구 try~catch(복구) => 예외 회피 => 컴파일러에 예외 => 알려주는 역할
*/
try {
// 정상 수행
FileReader fr = new FileReader("c:\\javaDev\\movie.txt");
int i = 0; // 단점 => char X , int
StringBuffer sb = new StringBuffer();
while ((i = fr.read()) != -1) {
sb.append((char) i);
}
movieData = sb.toString();
fr.close();
} catch (Exception ex) {
// 에러발생 => 복구
} // 예외처리
}
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("==================");
}
static void movieList(int page) {
String[] movie = movieData.split("\n");
int i = 0; // for 횟수
int j = 0; // 20개씩
final int ROWSIZE = 20; // 시작점
int pagecnt = (page * ROWSIZE) - ROWSIZE;
// 1page => 0
// 2page => 20 배열이 0번부터 시작
// 3page => 40
for (String s : movie) {
// System.out.println(s);
if (j < 20 && i >= pagecnt) {
String[] md = s.split("\\|");
System.out.println(md[0] + "." + md[1]);
j++;
}
i++;
}
}
// 상세보기 => 데이터
static void movieDetail(int movieNo) {
String[] movie = movieData.split("\n");
for (String s : movie) {
// 영화 한개 => 정보 - !
String[] info = s.split("\\|");
if (info[0].equals(String.valueOf(movieNo))) {
System.out.println("영화명:" + info[1]);
System.out.println("장르:" + info[2]);
System.out.println("출연:" + info[4]);
System.out.println("개봉일:" + info[5]);
System.out.println("등급:" + info[6]);
System.out.println("감독:" + info[7]);
break;
}
}
}
// 영화명으로 찾기
static void titleFind(String mn) {
String[] movie = movieData.split("\n");
for (String s : movie) {
// 영화 한개 => 정보 - !
String[] info = s.split("\\|");
if(info[1].contains(mn)) {
System.out.println(info[1]+"("+info[4]+")");
}
}
}
// 출연진으로 찾기
static void actorFind(String actor) {
String[] movie = movieData.split("\n");
for (String s : movie) {
// 영화 한개 => 정보 - !
String[] info = s.split("\\|");
if(info[4].contains(actor)) {
System.out.println(info[1]+"("+info[4]+")");
}
}
}
// 조립 ==> 다른 클래스에서 연결해서 사용이 가능
// 다른 클래스 연결해서 사용 / 재사용
static void process() {
// System.out.println(movieData);
Scanner scan = new Scanner(System.in);
while (true) {
menu();
System.out.print("메뉴 선택 : ");
int m = scan.nextInt();
scan.nextLine();
if (m == 5) {
System.out.println("프로그램 종료");
break;
} else if (m == 1) {
System.out.print("페이지 입력 : (1~");
int page = scan.nextInt();
movieList(page);
} else if (m == 2) {
System.out.print("영화 선택(1~1938):");
int no = scan.nextInt();
movieDetail(no);
} else if (m==3) {
System.out.print("영화명 입력:");
String mn=scan.next();
titleFind(mn);
}else if (m==4) {
System.out.print("출연진 입력:");
String actor=scan.nextLine();
actorFind(actor);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
process(); // 가급적 main에서 소스 코딩을 사용하지 않는다
}
}
package com.sist;
import java.util.*;
import javax.net.ssl.SSLContext;
import java.io.*; // 파일 , 네트워크 전송 : 읽기/쓰기
// Input / Output => io => 반드시 예외처리
public class 메소드_2 {
static String seoulData; // 자동 초기화 => null
// 초기화 (자동) => 초기화 블럭
static {
try {
FileReader fr = new FileReader("c:\\javaDev\\seoul_location.txt");
int i = 0;
StringBuffer sb = new StringBuffer();
while ((i = fr.read()) != -1) {
sb.append((char) i);
}
seoulData = sb.toString();
fr.close();
} catch (Exception ex) {
}
}
static void menu() {
System.out.println("===========메뉴==========");
System.out.println("1. 명소 목록"); // 페이징
System.out.println("2. 명소 상세보기");
System.out.println("3. 명소 검색(명소명)");
System.out.println("4. 명소 검색(주소)");
System.out.println("5. 종료");
System.out.println("========================");
}
static void seoulList(int page) {
String[] seoul = seoulData.split("\n");
int i = 0;
int j = 0;
final int ROWSIZE = 20;
int seoulNo = (page * ROWSIZE) - ROWSIZE;
for (String s : seoul) {
if (j < 20 && i >= seoulNo) {
String[] md = s.split("\\|");
System.out.println(md[0] + "." + md[1]);
j++;
}
i++;
}
}
// 상세보기 => 데이터
static void seoulDetail(int seoulNo) {
String[] movie = seoulData.split("\n");
// 영화 정보 전체 => \n
for (String s : movie) {
// 영화 한개 => 정보 => |
String[] info = s.split("\\|");
// info[0] => String
/*
* String int | |===> valueOf int String ---- parseInt()
*/
if (info[0].equals(String.valueOf(seoulNo))) {
System.out.println("명소:" + info[1]);
System.out.println("소개:" + info[2]);
System.out.println("주소:" + info[3]);
break;
}
}
}
static String[] find(int type, String findData) {
// 확인 => 검색된 갯수?
String[] datas = seoulData.split("\n");
int count = 0;
for (String seoul : datas) {
String[] sd = seoul.split("\\|");
String ss = "";
if (type == 1) {
ss = sd[1];
} else {
ss = sd[3];
}
if (ss.contains(findData)) {
// System.out.println(sd[1]+"--"+sd[3]);
count++;
}
}
String[] data = new String[count]; // 동적으로 처리된다.
int i = 0;
for (String seoul : datas) {
String[] sd = seoul.split("\\|");
String ss = "";
if (type == 1) {
ss = sd[1];
} else {
ss = sd[3];
}
if (ss.contains(findData)) {
// System.out.println(sd[1]+"--"+sd[3]);
data[i] = sd[1] + "--" + sd[3];
i++;
}
}
return data;
}
// 조립
static void process() {
Scanner scan = new Scanner(System.in);
while (true) {
menu();
System.out.print("메뉴 선택:");
int m = scan.nextInt();
switch (m) {
case 5:
System.out.println("프로그램 종료!!");
System.exit(0);// 0=> 정상 종료 -1:비정상 종료
case 1:
// 고민 => 데이터를 받아서 출력, 메소드 안에서 출력
System.out.println("페이지 입력 : ");
int page = scan.nextInt();
seoulList(page);
break;
case 2:
System.out.print("명소 선택(1~273):");
int no = scan.nextInt();
seoulDetail(no);
break;
case 3:
case 4:
System.out.print("명소(1),주소(2):");
int type = scan.nextInt();
System.out.print("검색어 입력:");
String fd = scan.next();
String[] ss = find(type, fd);
for (String s : ss) {
if (s != null)
System.out.println(s);
}
break;
}
}
}
// 시작 => 자동 호출 메소드 => 전체 프로젝트에 한개 이상 main
public static void main(String[] args) {
// TODO Auto-generated method stub
process();
}
}
*
int m = scan.nextInt(); => 줄바꿈을 남겨두는데 nextLine()이 줄바꿈을 공백으로 인식하기 때문
scan.nextLine(); => 이후 문자열 사용시 한칸을 비워줘야 정상적으로 사용 가능