빅데이터 서비스 교육/Java

Java Arraylist

Manly 2022. 5. 6. 08:39
반응형

 

 

 

                                               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("잘못된 숫자를 입력하셨습니다.");
         }
      }

   }

}
반응형

'빅데이터 서비스 교육 > Java' 카테고리의 다른 글

Java JDBC  (0) 2022.05.06
Java 상속  (0) 2022.05.06
Java OOP  (0) 2022.05.06
Java 메소드  (0) 2022.05.03
Java 배열  (0) 2022.05.03