-
※문제. 다음과 같이 회원정보를 하나의 문자열로 담았다. 각회원별 정보의 순서는 회원번호,이름,키,몸무게,생일(yyyyMMdd)이다. 각각의 회원정보를 분리해서, 회원객체에 담고, 회원객체배열에 추가한다. 출력메소드를 통해 회원정보를 출력한다.
"1,김연아,165,47,19900905|2,양세형,167,60,19850818|3,김래원,182,80,19810319"
- 회원 Member
- memberNo : int
- memberName : String
- height : int
- weight : int
- birth : Calendar
+ information() : String
- 실행클래스 RunCalendar클래스 어떻게 이용하는지 제대로 이해를 못했는데 이 문제 풀고 다시 이해했다.
복잡복잡... 아직도 객체 배열은 어렵다.
더보기123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081public class Member {private int memberNo;private String memberName;private int height;private int weight;private Calendar birth;public Member() {super();}public Member(int memberNo, String memberName, int height, int weight, Calendar birth) {super();this.memberNo = memberNo;this.memberName = memberName;this.height = height;this.weight = weight;this.birth = birth;}public int getMemberNo() {return memberNo;}public void setMemberNo(int memberNo) {this.memberNo = memberNo;}public String getMemberName() {return memberName;}public void setMemberName(String memberName) {this.memberName = memberName;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}public Calendar getBirth() {return birth;}public void setBirth(Calendar birth) {this.birth = birth;}public String information() {int year = birth.get(Calendar.YEAR);int month = birth.get(Calendar.MONTH);int date = birth.get(Calendar.DATE);return "회원번호:" + memberNo + " " +"이름:" + memberName + " " +"키:" + height + " " +"몸무게:" + weight + " " +"생일:" + year + "/" + make2digit(month) + "/" + make2digit(date);}public String make2digit(int n) {return (n < 10? "0" : "") + n;}}cs 멤버 클래스랑,
12345678910111213141516171819202122232425262728293031323334353637public class Run {public static void main(String[] args) {String csv = "1,김연아,165,47,19900905|2,양세형,167,60,19850818|3,김래원,182,80,19810319";String[] splitCsv = csv.split("[| ]");for(int i = 0; i < splitCsv.length; i++) {String[] member = splitCsv[i].split(",");Member m = new Member();for(int j = 0; j < member.length; j++) {switch(j) {case 0 :m.setMemberNo(Integer.parseInt(member[j])); break;case 1 :m.setMemberName(member[j]); break;case 2 :m.setHeight(Integer.parseInt(member[j])); break;case 3 :m.setWeight(Integer.parseInt(member[j])); break;case 4 :Calendar cal = Calendar.getInstance();cal.set(Integer.parseInt(member[j].substring(0, 4)),Integer.parseInt(member[j].substring(4, 6)),Integer.parseInt(member[j].substring(6)));m.setBirth(cal);break;}}System.out.println(m.information());}}}cs 실행클래스.
Member[]에 정보들을 넣어야 할 것 같긴 한데 Calendar에서 엄청 헤매고 배열에 Member객체를 어느 라인에 넣어야 할지도 모르겠어서 결국 반복문 안에 information메소드 실행하고 마무리했다.
이렇게 하면 출력은 원하는 대로 나오는데 나중에 회원 정보를 불러올 수가 없다. 반복문 돌 때마다 Member m이 초기화되기 때문에...
그리고 첫 split메소드에서 csv.split("|")라고 하면 자꾸 |를 걸러주질 않아서 정말 고민했다. 결과적으로 정규표현식을 쓰니까 걸러지긴 했는데 이때 escaping처리를 잊고 있었다...
어영부영 Calendar도 돌아가긴 했는데 Month는 0부터 시작한다는 것도 잊지 않고 기억해야 한다. 이번에 입력시 넣을 -1과 출력시 넣을 +1이 무효로 맞아 떨어져서 잘못된 값이 안 나왔는데 유의하고 풀기.
더보기123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081public class Member {private int memberNo;private String memberName;private int height;private int weight;private Calendar birth;public Member() {super();}public Member(int memberNo, String memberName, int height, int weight, Calendar birth) {super();this.memberNo = memberNo;this.memberName = memberName;this.height = height;this.weight = weight;this.birth = birth;}public int getMemberNo() {return memberNo;}public void setMemberNo(int memberNo) {this.memberNo = memberNo;}public String getMemberName() {return memberName;}public void setMemberName(String memberName) {this.memberName = memberName;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}public Calendar getBirth() {return birth;}public void setBirth(Calendar birth) {this.birth = birth;}public String information() {int year = birth.get(Calendar.YEAR);int month = birth.get(Calendar.MONTH);int date = birth.get(Calendar.DATE);return "회원번호:" + memberNo + " " +"이름:" + memberName + " " +"키:" + height + " " +"몸무게:" + weight + " " +"생일:" + year + "/" + make2digit(month + 1) + "/" + make2digit(date);}public String make2digit(int n) {return (n < 10? "0" : "") + n;}}cs 1234567891011121314151617181920212223242526272829303132333435363738public class Run {public static void main(String[] args) {String csv = "1,김연아,165,47,19900905|2,양세형,167,60,19850818|3,김래원,182,80,19810319";String[] splitCsv = csv.split("\\|");Member[] memberArr = new Member[splitCsv.length];for(int i = 0; i < splitCsv.length; i++) {String[] member = splitCsv[i].split(",");Member m = new Member();for(int j = 0; j < member.length; j++) {switch(j) {case 0 :m.setMemberNo(Integer.parseInt(member[j])); break;case 1 :m.setMemberName(member[j]); break;case 2 :m.setHeight(Integer.parseInt(member[j])); break;case 3 :m.setWeight(Integer.parseInt(member[j])); break;case 4 :Calendar cal = Calendar.getInstance();cal.set(Integer.parseInt(member[j].substring(0, 4)),Integer.parseInt(member[j].substring(4, 6)) - 1,Integer.parseInt(member[j].substring(6)));m.setBirth(cal);break;}}memberArr[i] = m;System.out.println(m.information());}}}cs 고친다면 이렇게.
그래도 switch문 이용해서 풀어본 거 재밌었다!
12345678m.setMemberNo(Integer.parseInt(mStr[0]));m.setMemberName(mStr[1]);m.setHeight(Integer.parseInt(mStr[2]));m.setWeight(Integer.parseInt(mStr[3]));int yyyy = Integer.parseInt(mStr[4].substring(0,4));int mm = Integer.parseInt(mStr[4].substring(4,6));int dd = Integer.parseInt(mStr[4].substring(6));m.setBirth(new GregorianCalendar(yyyy,mm-1,dd));cs 선생님처럼 간단히 풀 수도 있지만, 반복문 써보고 싶어서 해봤다.
'혼자 있는 방 > Java' 카테고리의 다른 글
Homework(12) (0) 2021.07.13 실기_Test(2) (0) 2021.07.06 필기_Test(2) (0) 2021.07.05 Homework(10) (0) 2021.07.02 Homework(9) (0) 2021.07.01 댓글