반응형




List



ArrayList기초 예제
package ArrayList기초;
import java.util.ArrayList;
import 객체배열.Person;
public class ex02PersonMain {
public static void main(String[] args) {
//다른 패키지에 있는 Person 클래스를 활용 -> import 필요
//1. Person 자료형을 보관할 수 있는 pList라는 ArrayList생성
ArrayList<Person> pList = new ArrayList<Person>();
//2. 데이터 추가 ( 이름, 나이)
//Person a = new Person("한규창",99);
//pList.add(a);
pList.add(new Person("한규창",99));
//Person 자료형에 바로 string 이름, int 나이 를 넣을 수 없다
//3. 이름출력
System.out.println(pList.get(0).getName());
//pList.get(0) -> 리턴타입: Person (객체)
//본질적으로 어떤 자료형인지 확인할것
//4. 팀원들 데이터 전부추가하기
pList.add(new Person("이상희",99));
pList.add(new Person("주미리",99));
pList.add(new Person("정회수",99));
pList.add(new Person("김유림",99));
//5. 팀원 이름 전부 출력하기
for (int i = 0; i < pList.size(); i++) {
System.out.println(pList.get(i).getName());
}
// System.out.println(pList.get(0).getName());
// System.out.println(pList.get(1).getName());
// System.out.println(pList.get(2).getName());
// System.out.println(pList.get(3).getName());
// System.out.println(pList.get(4).getName());
// for-each문 (배열과 함께쓰는 for문)
// 배열안에 있는 요소를 하나씩 뽑아서 좌측에 있는 공간에 담아준다
// 배열의 크기만큼 반복하는 구조
for(Person p:pList) {
System.out.println(p.getName());
}
int[] arr = new int[3];
for(int i:arr) {
System.out.println(i);
}
}
}
package ArrayList기초;
import java.util.ArrayList;
public class ex01Main {
public static void main(String[] args) {
//각각의 객체를 따로 네이밍해서 하기 힘들어서 객체배열로 관리하는데
//배열은 크기가 고정적이라 불편한 것을 해결하기위해 ArrayList
//ArrayList: 크기가 가변적인 배열과 같은 형태를 가진 클래스 (배열이 아니라 '클래스')
// Collection: 특정 자료구조를 클래스화 시킨 것
// ex) ArrayList, HashMap 등등
// 1. ArrayList 생성: 크기가 가변적, 동일한 자료형만 보관가능,
// "레퍼런스 형태의 데이터만" 보관가능 (ex. String,Person, Pokemon...)
ArrayList<String> list = new ArrayList<String>();
// 매개변수 없는 기본생성자 (=메소드)
// <> : 제네릭기법
// : 객체를 생성하는 순간에 자료형이 결정되는 기법
//int 정수형을 객체로 만들어낸 클래스형태: Int 앞을 대문자로 ctrl+space로 -> Integer
// 2. 데이터 추가하기
// 끝에서부터 차례대로 (0번인덱스 -> 1번인덱스 이런 순으로)
list.add("바나나");
list.add("주스");
list.add("뿌요소다");
// 3. 데이터를 특정위치에 추가하기
list.add(0, "카페라떼");
//원래 0번에 있던 바나나는 뒤로 밀린다 (1번으로) 전부 한칸씩 밀린다.
// 4. 데이터 가져오기
System.out.println(list.get(1));
// 5. 데이터 삭제
list.remove(1);
//인덱스 1번방이 사라지고 2,3번이 각 1,2번방으로 바뀐다.
System.out.println(list.get(1));
// 6. 데이터 크기 알아보기
System.out.println(list.size());
// .length뒤에는 ()를 붙히면 안된다.
// 7. 데이터 전체 삭제하기
list.clear();
System.out.println(list.size());
}
}
MusicPlayer 예제
Controller
package MusicPlayer;
import java.util.ArrayList;
import javazoom.jl.player.MP3Player;
public class controller {
private MP3Player mp3 = new MP3Player();
private ArrayList<Music> musicList = new ArrayList<Music>();
private int i = 0; // 몇번째 곡인지를 의미하는 변수
public controller() {
String comPath = "C:\\Users\\GITCT\\Desktop\\JavaStudy\\0404ArrayList\\player\\";
Music m1 = new Music(comPath + "Blossom.mp3", "버스커버스커", "벚꽃엔딩");
musicList.add(m1);
musicList.add(new Music(comPath + "Rollin.mp3", "브레이브걸스", "롤린"));
musicList.add(new Music(comPath + "Butterfly.mp3", "전영호", "Butterfly"));
musicList.add(new Music(comPath + "Peaches.mp3", "저스틴비버", "Peaches"));
}
public Music play() {
stop();
mp3.play(musicList.get(i).getPath());
return musicList.get(i);
}
public boolean stop() {
if (mp3.isPlaying()) {
mp3.stop();
return true;
} else {
return false;
}
}
public Music prev() {
stop();
i--;
if(i >= 0) {
return play();
}else {
i = 0;
return null;
}
}
/**
* 다음곡재생메소드
* @return {@link Music}
*
*/
public Music next() {
stop();
i++;
if(i < musicList.size()) {
return play();
}else {
i = musicList.size()-1;
return null;
}
}
}
사용법
package MusicPlayer;
import javazoom.jl.player.MP3Player;
public class ex01사용법 {
public static void main(String[] args) {
//jar -> java project를 압축해놓은 확장자
// 다른 사람이 개발해놓은 class 파일들이 모아져있는 형태
// -> 일종의 라이브러리
// jar파일 추가하는 법
// 프로젝트 선택 -> 마우스 우클릭 -> build path -> configure build path
// -> libraries 탭으로 이동 -> class path 선택 -> 우측에 add jars 클릭
// -> 원하는 jar 파일 추가 후 -> apply and close
MP3Player mp3 = new MP3Player();
// 노래재생 가능한 도구 생성
mp3.play("C:\\Users\\GITCT\\Desktop\\JavaStudy\\0404ArrayList\\player\\Peaches.mp3");
//2. 노래 멈추기
mp3.stop();
//3. 노래 재생여부 판단하기
System.out.println(mp3.isPlaying());
}
}
Music Class
package MusicPlayer;
public class Music {
// 뮤직플레이어 안에서 사용할 음악 자료형
// 1. 해당하는 노래 데이터의 위치(주소값, 경로)
private String path;
// 2. 가수이름
private String singer;
// 3. 노래제목
private String song;
// ==메소드==
// 모든 필드 값 채우는 생성자
public Music(String path, String singer, String song) {
this.path = path;
this.singer = singer;
this.song = song;
}
//모든 필드의 getter 메소드 만들기
public String getPath() {
return path;
}
public String getSinger() {
return singer;
}
public String getSong() {
return song;
}
}
Music Main
package MusicPlayer;
import java.util.ArrayList;
import java.util.Scanner;
import javazoom.jl.player.MP3Player;
public class MusicMain {
public static void main(String[] args) {
// 1. 재생도구 생성
MP3Player mp3 = new MP3Player();
Scanner sc = new Scanner(System.in);
// 2. 노래 데이터 생성하기 (우리가 설계한 Music 자료형 사용하기)
ArrayList<Music> musicList = new ArrayList<Music>();
String comPath = "C:\\Users\\GITCT\\Desktop\\JavaStudy\\0404ArrayList\\player\\";
// 경로에서 중복되는 문자열을 변수로 지정해서 좀 더 짧게 쓸수 있게.
musicList.add(new Music(comPath + "Blossom.mp3", "버스커버스커", "벚꽃엔딩"));
musicList.add(new Music(comPath + "Rollin.mp3", "브레이브걸스", "Roilln"));
musicList.add(new Music(comPath + "Butterfly.mp3", "전영호", "Butterfly"));
musicList.add(new Music(comPath + "Peaches.mp3", "저스틴비버", "Peaches"));
int i = 0; // 몇번째 곡인지를 의미하는 변수
while (true) {
System.out.print("[1]재생 [2]정지 [3]이전곡 [4]다음곡 [5]종료 >>");
int input = sc.nextInt();
if (input == 1) {
System.out.println("====재생====");
// 1. 노래가 재생중인지 여부 판단
if (mp3.isPlaying()) {
// 2. 재생중이라면 노래 멈추기
mp3.stop();
}
// 3. 뮤직 플레이리스트 0번방에 있는 노래를 재생
// 노래를 재생하기위해 필요한데이터는? 이 데이터를 뮤직플리 0번방에서 가져올 수있는방법?
mp3.play(musicList.get(i).getPath());
// 4. 가수 - 노래제목이 재생중입니다. 출력해주기
// ex) 버스커버스커 - 벚꽃엔딩이 재생중입니다.
System.out.println(musicList.get(i).getSinger() + "-" + musicList.get(i).getSong());
} else if (input == 2) {
System.out.println("====정지====");
// 1. 노래가 재생중인지 여부를 판단
// 2. 재생중이라면 노래를 멈추고 노래재생을 정지합니다 출력
if (mp3.isPlaying() == true) {
// mp3.isPlaying()만 써도 재생중이면 if문으로 아니면 else문으로 -> ==true로 비교연산 안해도된다.
mp3.stop();
System.out.println("노래재생을 정지합니다.");
// 3. 재생중이 아니라면 재생중인 노래가 없습니다. 출력!
} else {
System.out.println("재생중인 노래가 없습니다.");
}
} else if (input == 3) {
System.out.println("====이전곡====");
// 1. 노래 재생중인지 여부를 판단
if (mp3.isPlaying()) {
// 2. 재생중이라면 노래를 정지
mp3.stop();
}
// 3. 뮤직플레이리스트의 다음곡 노래를 재생
// ex) i=0 --> 1 / 1 --> 2
i--;
if (i < 0) {
System.out.println("이전곡이 없습니다.");
i++;
} else {
mp3.play(musicList.get(i).getPath());
// 4. 가수 - 노래제목이 재생중입니다.
System.out.println(musicList.get(i).getSinger() + "-" + musicList.get(i).getSong());
System.out.println("이 재생중입니다.");
// 5. 단, 다음곡이 없으면 다음곡이 없습니다 출력 -> 다시 재생을 선택하면 뮤직플레이리스트의 마지막곡이
// 재생되게 만들기
}
} else if (input == 4) {
System.out.println("====다음곡====");
// 1. 노래 재생중인지 여부를 판단
if (mp3.isPlaying()) {
// 2. 재생중이라면 노래를 정지
mp3.stop();
}
// 3. 뮤직플레이리스트의 다음곡 노래를 재생
// ex) i=0 --> 1 / 1 --> 2
i++;
if (i == musicList.size()) {
System.out.println("다음곡이 없습니다.");
i--;
} else {
mp3.play(musicList.get(i).getPath());
// 4. 가수 - 노래제목이 재생중입니다.
System.out.println(musicList.get(i).getSinger() + "-" + musicList.get(i).getSong());
System.out.println("이 재생중입니다.");
// 5. 단, 다음곡이 없으면 다음곡이 없습니다 출력 -> 다시 재생을 선택하면 뮤직플레이리스트의 마지막곡이
// 재생되게 만들기
}
} else if (input == 5) {
System.out.println("====종료====");
if(mp3.isPlaying()) {
mp3.stop();
}
break;
} else {
System.out.println("잘못된 숫자를 입력하셨습니다.");
}
}
}
}
Music Player를 MVC(model, view, controller)로 나눠보자
Controller
package MVC패턴;
import java.util.ArrayList;
import javazoom.jl.player.MP3Player;
public class MusicController {
// Controller --> 기능들을 가지고 있는 도구
//노래 재생 기능들
// 1. 필드(데이터)
private MP3Player mp3 = new MP3Player();
//사용자마다 다른값을 받을게 아니기때문에 MP3Player mp3;로 안쓰고 new MP3Player(); 도 쓴다
//MusicController를 벗어나서 사용하지 않을거기 때문에 private
private ArrayList<Music> musicList = new ArrayList<Music>();
private int i = 0; // 몇번째 곡인지를 의미하는 변수
// 2. 기본생성자 *생성자 (객체를 생성하는 순간에 실행되는 메소드 -> new를 이용)
public MusicController() {
// 뮤직플레이리스트의 음악을 추가하는 작업~
String comPath = "C:\\Users\\GITCT\\Desktop\\JavaStudy\\0404ArrayList\\player\\";
Music m1 = new Music(comPath + "Blossom.mp3", "버스커버스커", "벚꽃엔딩");
musicList.add(m1);
musicList.add(new Music(comPath + "Rollin.mp3", "브레이브걸스", "롤린"));
musicList.add(new Music(comPath + "Butterfly.mp3", "전영호", "Butterfly"));
musicList.add(new Music(comPath + "Peaches.mp3", "저스틴비버", "Peaches"));
}
// 3. 재생하는 메소드
public Music play() {
stop(); //하단에 있는 stop메소드! this.stop();도 가능
mp3.play(musicList.get(i).getPath());
//musicList는 arrayList고 Music데이터를 가지고 있다
return musicList.get(i);
}
// 4. 정지하는 메소드
public boolean stop() {
boolean result = false;
if (mp3.isPlaying()) {
mp3.stop();
result = true;
}
return result;
}
// 5. 이전곡 재생
public Music prev() {
stop();
i--;
if(i >= 0) {
return play();
//아래 두줄을 위에 한줄로 고칠 수 있다.
//mp3.play(musicList.get(i).getPath());
//return musicList.get(i); //재생하는 노래 정보 돌려주기
}else {
i = 0;
return null; //이전곡이 없는 경우 null 돌려주기
}
}
// 6. 다음곡 재생
// DocString @는 anotation
/**
* 해당하는 메소드는 노래리스트에서 다음곡을 재생하는 메소드입니다.
* 매개변수는 없고, 리턴타입으로 Music으로 노래정보를 돌려줘요
* @return {@link Music}
* @author 김운비
* @since 2022.04.06
* @param 매개변수 없음
*/
// /**찍고 엔터치고
// 설명들을 쓰고 @return 옆에 Music ctrl+space로 링크를 건다.
public Music next() {
stop();
i++;
if(i < musicList.size()) {
return play();
}else {
i = musicList.size()-1;
return null;
}
}
}
Model
package MVC패턴;
public class Music {
// Model --> 데이터 관리
// 뮤직플레이어 안에서 사용할 음악 자료형
// 1. 해당하는 노래 데이터의 위치(주소값, 경로)
private String path;
// 2. 가수이름
private String singer;
// 3. 노래제목
private String song;
// ==메소드==
// 모든 필드 값 채우는 생성자
public Music(String path, String singer, String song) {
this.path = path;
this.singer = singer;
this.song = song;
}
//모든 필드의 getter 메소드 만들기
public String getPath() {
return path;
}
public String getSinger() {
return singer;
}
public String getSong() {
return song;
}
}
View
package MVC패턴;
import java.util.ArrayList;
import java.util.Scanner;
import javazoom.jl.player.MP3Player;
public class MusicMain2 {
// View --> 사용자 화면
//노래정보를 출력해주는 메소드생성 --> main method 안에서 사용예정
private static void showInfo(Music m) {
System.out.print(m.getSinger() + "-");
System.out.println(m.getSong());
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//노래 재생을 담당하는 Controller 생성하기
MusicController con = new MusicController();
while (true) {
System.out.print("[1]재생 [2]정지 [3]이전곡 [4]다음곡 [5]종료 >> ");
int input = sc.nextInt();
if (input == 1) {
System.out.println("=========재생==========");
Music m = con.play();
// 서로 다른 클래스 간 값을 주고 받기 위해서는
// 메소드의 매개변수와 리턴타입을 통해서 가능하다.
// 1. MusicMain --> MusicController로 값을 주려면 메소드의 매개변수 활용
// 2. MusicController --> MusicMain로 값을 돌려주려면 메소드의 리턴타입 활용
showInfo(m);
} else if (input == 2) {
System.out.println("=========정지==========");
// 1. 노래가 재생중인지 여부를 판단
if (con.stop()) {
System.out.println("노래재생을 정지합니다.");
} else {
System.out.println("재생중인 노래가 없습니다.");
}
} else if (input == 3) {
System.out.println("=========이전곡==========");
Music m = con.prev();
if(m != null) {
showInfo(m);
}else {
System.out.println("이전곡이 없습니다.");
}
} else if (input == 4) {
System.out.println("=========다음곡==========");
Music m = con.next();
if(m != null) {
showInfo(m);
}else {
System.out.println("다음곡이 없습니다.");
}
} else if (input == 5) {
System.out.println("=========종료==========");
con.stop();
break;
} else {
System.out.println("잘못된 숫자를 입력하셨습니다.");
}
}
}
}
반응형