CLASS/JAVA
#6-3 / 2차 class 배열
hingu
2024. 5. 8. 16:20
⚡ 2차 원시배열 => class 배열로 변경
package oop; import java.util.ArrayList; import java.util.Arrays; //2차 원시배열 => class 배열로 변경 public class array14 { public static void main(String[] args) { ay14_box ay = new ay14_box(); ay.abc(); } } class ay14_box { public void abc() { Integer a[][] = { {10,20,30}, {100,200,300} }; //1차 변경방식과 다름!! //이게 2차 class배열 ^^.. ArrayList<ArrayList<Integer>> al2 = new ArrayList<ArrayList<Integer>>(); /* 책대루 */ int w=0; while(w<a.length) { //2:그룹 수만큼 //1차 빈배열(반복문이 하번 실행할 때마다 새롭게 1차 빈배열이 생성됨) //반복문 돌때마다 리셋 후 작은 array를 그룹 수만큼 만듬 ArrayList<Integer> al = new ArrayList<Integer>(); int ww=0; while(ww<a[0].length) { //3:그룹 내 데이터 수만큼 al.add(a[w][ww]); //1차 배열에 값을 반복 삽입 ww++; } al2.add(al); //1차 클래스 배열의 전체값을 2차 빈배열에 삽입 w++; }; System.out.println(al2); //[[10, 20, 30], [100, 200, 300]] //300 : get을 이용해서 그룹,데이터 배열번호로 출력 System.out.println(al2.get(1).get(2)); } }
🔽 응용문제//맞는지 아닌지 모름 검사 x package oop; import java.util.ArrayList; import java.util.Arrays; /* String member[][] = { {"홍길동","SKT","45","hong@nate.com","01012234556"}, {"이순신","LGT","55","lee@gmail.com","01022309544"}, {"강감찬","KT","25","kang@gmail.com","01036601688"} }; [결과] [ ["홍길동","이순신","강감찬"], ["SKT","LGT","55"], ["45","55","25"], ["hong@nate.com","lee@gmail.com","kang@gmail.com"], ["01012234556","01022309544","01036601688"] ] */ public class array15test { public static void main(String[] args) { ar15test ar15t = new ar15test(); ar15t.getMember(); } } class ar15test { String member[][] = null; ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>(); public void getMember() { String member[][] = { {"홍길동","SKT","45","hong@nate.com","01012234556"}, {"이순신","LGT","55","lee@gmail.com","01022309544"}, {"강감찬","KT","25","kang@gmail.com","01036601688"} }; int gp = member.length; int ea = member[0].length; int f,ff; for(f=0; f<ea; f++) { ArrayList<String> mm = new ArrayList<String>(); for(ff=0; ff<gp; ff++) { mm.add(member[ff][f]); } result.add(mm); } System.out.println(result); } //이렇게 하고싶은데... // public ArrayList<ArrayList<String>> abc(String data[]){ // ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>(); // // return result; // } }
⚡ ⚡ method를 활용한 2차 클래스 배열 데이터 만들기
넘어렵..
1.원시배열은 자료형 클래스를 이용해야함
2.외부클래스에서 메소드로 1차 클래스 배열을 생성
3.반복문을 이용해서 return결과를 2차 클래스에 데이터 삽입
4.출력
package oop; import java.util.ArrayList; import java.util.Arrays; public class array15 { public static void main(String[] args) { /* 1.원시배열은 자료형 클래스를 이용해야함 2.외부클래스에서 메소드로 1차 클래스 배열을 생성 3.반복문을 이용해서 return결과를 2차 클래스에 데이터 삽입 4.출력 */ Integer a[][] = { {5,10,15,20}, {6,12,18,24}, {7,14,21,28} }; ay15 ay = new ay15(); //2차 빈배열 생성 ArrayList<ArrayList<Integer>> al = new ArrayList<ArrayList<Integer>>(); int w=0; while(w<a.length) { //3 : 그룹 갯수만큼 al.add(ay.abc(a[w])); //return된 1차배열값을 2차 배열로 이관 w++; } System.out.println(al); //2차배열 출력 //[[5, 10, 15, 20], [6, 12, 18, 24], [7, 14, 21, 28]] 출력 } } class ay15{ //1차 빈배열 메소드(1차배열을 던지는 method) public ArrayList<Integer> abc(Integer data[]){ //여기도 자료형으로 받아야함(Integer) //1차 배열을 생성하여 원시배열값을 class배열로 변환 ArrayList<Integer> all = new ArrayList<Integer>(Arrays.asList(data)); return all; //변환된 값 return } }
🔽 외부의 원시 배열을 외부 class 를 통해 class타입 배열로 변경하기 (넘어렵)
- 외부에서 가져온 원시 배열은
main안에 넣으면 메모리에 할당되기 때문에 그때그때 주의해서 써야한다!
//즉시실행 메소드 : class명과 method명을 일치시키면 해당 method는 바로 실행된다
->외부 데이터를 바로 로드할때 사용
<내꺼>package oop; import java.util.ArrayList; import java.util.Arrays; public class notice { public static void main(String[] args) { datalist dt = new datalist(); String[][] noticeData = dt.notice(); noti_list nList = new noti_list(); ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>(); int a; for(a=0; a<noticeData.length; a++) { result.add(nList.abc(noticeData[a])); } System.out.println(result); } } class noti_list{ public ArrayList<String> abc(String data[]){ ArrayList<String> notiCdata = new ArrayList<String>(Arrays.asList(data)); return notiCdata; } }
<선생님꺼> + sort
- Collections.sort() : 1차배열에서만 가능package oop; //공지사항 부분 - datalist.java와 연결(원시배열 + ArrayList(클래스)) import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; public class notice { public static void main(String[] args) { noti_list nList = new noti_list(); //즉시실행 메소드 호출됨 nList.product_list(); //sort메소드 호출됨 } } class noti_list{ datalist dt = null; //datalist.java 호출 String[][] noticeData = null; //datalist.java의 메소드 호출 //빈 2차 class배열 생성 ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>(); public noti_list() { //즉시실행 메소드 : class명과 method명을 일치시키면 해당 method는 바로 실행된다 this.dt = new datalist(); this.noticeData = dt.notice(); int ea = this.noticeData.length; int w=0; do { //반환받은 1차class배열을 2차class배열(result)에 add(); result.add(this.abc(this.noticeData[w])); w++; }while(w<ea); } //원시 -> 1차배열로 return하는 메소드 public ArrayList<String> abc(String data[]){ //1차 원시배열로 받아서 1차 class배열로 반환 ArrayList<String> notiCdata = new ArrayList<String>(Arrays.asList(data)); return notiCdata; } //sort메소드 사용(Collections.sort : 1차배열에서만 가능) public void product_list() { //해당 배열은 별도로 sort를 사용하기 힘듬 Collections.sort(this.result.get(1)); //해당 그룹(두번째) 정렬 System.out.println(this.result); } }
- 로드 파일(datalist.java)public String[][] notice() { String notice[][] = { {"“가장 널리 사용하는 LTS 버전은 자바 17”","InfoWorld","2024-05-08","146"}, {"“입문자부터 숙련자까지” 주의해야 할 러스트 프로그래밍 실수 6가지”","데크플레이션","2024-05-07","56"}, {"ASCII 3D 렌더러 만들기","IT 뉴스","2024-05-05","98"}, {"깃허브 '코파일럿': 인공지능이 개발자를 대체할 수 있을까?","BBC News 코리아","2024-05-03","41"}, {"‘펜데믹이 끝이 아니었다’··· IT가 직면한 11가지 이슈"," CIO Korea","2024-05-03","33"}, {"IT 개발자 몸값 더 오를 수밖에 없다","ZD Net코리아","2024-05-01","269"} }; return notice; }