
package ch02_String;
public class ExString {
public static void main(String[] args) {
String stnA = "Java";
String stnB = new String("Java");
String stnC = "java";
// String 클래스에서는 Override가 되어있기 때문에
// 변수명만 출력하면 변수에 담겨있는 문자열이 출력되도록 재정의
System.out.println(stnA);
System.out.println(stnB);
System.out.println(stnC);
System.out.println();
// 문자열이 hashCode로 변환되어 있기 때문에 같은 문자열이면 같은 int 값 나옴
System.out.println(stnA.hashCode());
System.out.println(stnB.hashCode());
System.out.println(stnC.hashCode());
System.out.println();
// equals() : 같은 문자열인지 확인
// String 에서 Override가 되어 문자열이 같은지 비교함
System.out.println(stnA.equals(stnB));
System.out.println(stnA.equals(stnC));
System.out.println();
String title = "자바 program";
System.out.println("title : " + title);
System.out.println("title 문자수 : " + title.length());
System.out.println();
// 특정 문자열이 청므으로 나타는 위치
int title_pos = title.indexOf("p");
System.out.println("p 위치 : " + title_pos);
// 특정 문자열이 마지막으로 나타나는 위치
int title_lastPos = title.lastIndexOf("r");
System.out.println("r 마지막 위치 : " + title_lastPos);
System.out.println();
// 특정 문자열 변경
String new_title = title.replace("자바", "Java");
System.out.println("new_title : " + new_title);
System.out.println();
String phone = "010-1234-5678";
System.out.println("phone : " + phone);
// 문자열 자르기
// (시작위치, 마지막 위치)
String pa = phone.substring(4, 8); // 시작 index ~ (마지막 index -1)
String pb = phone.substring(9); // 시작 index ~ 끝까지
System.out.println("앞 4자리 : " + pa);
System.out.println("뒤 4자리 : " + pb);
System.out.println();
String email = "test@abc.com";
System.out.println("E-mail : " + email);
// @ 위치
int at = email.indexOf("@");
System.out.println("@ 위치 : " + at);
// ID
String id = email.substring(0, at);
System.out.println("ID : " + id);
// Domain
String domain = email.substring(at + 1);
System.out.println("Domain : " + domain);
System.out.println();
// 문자열 내 특정 문자열을 기준으로 잘라서 배열에 넣기
String[] ar = phone.split("-");
for (int i = 0; i < ar.length; i++) {
System.out.println(ar[i]);
}
}
}
주민번호를 사용해서 문제를 해결하세요
- 주민번호에서 생년월일을 추출하세요
- 뒤에 7 자리중 첫번째 자리를 사용해서 남성, 여성을 확인하세요
1 - 1900 년대 남자 2 - 1900 년대 여자
3 - 2000 년대 남자 4 - 2000 년대 여자
package ch02_String;
public class QuizString {
public static void main(String[] args) {
String num = "123456-3234567";
System.out.println("생년월일 : " + num.substring(0, 6));
System.out.println("생년 : " + num.substring(0, 2) + " 년");
System.out.println("생월 : " + num.substring(2, 4) + " 월");
System.out.println("생일 : " + num.substring(4, 6) + " 일");
String sg = "";
if (num.charAt(7) - '0' == 1) {
sg = "1900 년대 남자 i";
} else if (num.charAt(7) - '0' == 2) {
sg = "1900 년대 여자 i";
} else if (num.charAt(7) - '0' == 3) {
sg = "2000 년대 남자 i";
} else if (num.charAt(7) - '0' == 4) {
sg = "2000 년대 여자 i";
}
System.out.println("if 문 " + sg);
int select = num.charAt(7) - '0';
switch (select) {
case 1:
sg = "1900 년대 남자 s";
break;
case 2:
sg = "1900 년대 여자 s";
break;
case 3:
sg = "2000 년대 남자 s";
break;
case 4:
sg = "2000 년대 여자 s";
break;
default:
System.out.println("주민번호 이상함");
}
System.out.println("switch 문 " + sg);
아래의 파일 경로에서 데이터를 추출하세요
- 파일 경로 : "D:/photo/2023/travel/food.jpg"
파일 이름 : food
확장자 : jpg
String adr = "D:/photo/2023/travel/food.jpg";
int idxS = adr.lastIndexOf("/");
int idxD = adr.indexOf(".");
String fileName = adr.substring(idxS + 1, idxD);
System.out.println("파일 이름 : " + fileName);
String extension = adr.substring(idxD + 1);
System.out.println("확장자 명 : " + extension);
}
}
생년월일 : 123456
생년 : 12 년
생월 : 34 월
생일 : 56 일
if 문 2000 년대 남자 i
switch 문 2000 년대 남자 s
파일 이름 : food
확장자 명 : jpg
package ch02_String;
public class QuizStringT {
public static void main(String[] args) {
// #1
String passport = "990101-1123456";
String year = passport.substring(0, 2);
String month = passport.substring(2, 4);
String day = passport.substring(4, 6);
String type = passport.substring(7, 8);
if (type.equals("1")) {
year = "19" + year;
type = "남성";
} else if (type.equals("2")) {
year = "19" + year;
type = "여성";
} else if (type.equals("3")) {
year = "20" + year;
type = "남성";
} else {
year = "20" + year;
type = "여성";
}
System.out.println(year + "년 " + month + "월 " + day + "일");
System.out.println("성별 : " + type);
System.out.println();
// #2
String filePath = "D:/photo/2023/travel/food.jpg";
int slash = filePath.lastIndexOf("/");
int dot = filePath.lastIndexOf(".");
String fileName = filePath.substring(slash + 1, dot);
String fileExt = filePath.substring(dot + 1);
String path = filePath.substring(0, slash + 1);
System.out.println("파일 경로 : " + path);
System.out.println("파일 이름 : " + fileName);
System.out.println("확장자 : " + fileExt);
}
}
1999년 01월 01일
성별 : 남성
파일 경로 : D:/photo/2023/travel/
파일 이름 : food
확장자 : jpg
DecimalFormat
0 : 빈자리 0 으로 채움
# : 빈자리 0 으로 채우지 않음
package ch03_format;
import java.text.DecimalFormat;
public class ExdDecimalFormat {
public static void main(String[] args) {
double data = 123456.789;
System.out.println("data : " + data);
System.out.println();
DecimalFormat df = null; // import 해야 함
// 소숫점 자릿수를 없에는 문자열 형태로 만듬
df = new DecimalFormat("0");
String sa = df.format(data);
System.out.println(sa);
System.out.println();
// 소숫점 두 자릿수까지 표현
df = new DecimalFormat("0.00");
String sb = df.format(data);
System.out.println(sb);
System.out.println();
// 천의 단위마다 쉼표 표시(화폐단위)
df = new DecimalFormat("000,000.0");
String sc = df.format(data);
System.out.println(sc);
System.out.println();
double data2 = 123456.700;
// 0 빈자리 채우기
df = new DecimalFormat("000,000.000");
String sd = df.format(data2);
System.out.println(sd);
System.out.println();
// # 빈자리 채우지 않음
df = new DecimalFormat("###,###.##");
String se = df.format(data2);
System.out.println(se);
}
}
data : 123456.789
123457
123456.79
123,456.8
123,456.700
123,456.7
Date
SimpleDateFormat
| --- | 시간관련 |
|---|---|
| y 년도 | H 0 ~ 23 시 |
| M 월 | h 1 ~ 12 시 |
| d 일 | m 분 |
| D 1 ~ 365일 | s 초 |
| E 요일 | |
| a 오전 / 오후 |
package ch04_date;
import java.util.Date; // util, sql 중 util import 해야 함
import java.text.SimpleDateFormat;
public class Exdate {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
String currentTime = sdf.format(date);
System.out.println(currentTime);
}
}
package ch04_date;
import java.util.Calendar;
public class ExCalendar {
public static void main(String[] args) {
Calendar now = Calendar.getInstance();
System.out.println(now);
System.out.println();
int year = now.get(Calendar.YEAR);
// 월은 + 1 해야 함
int month = now.get(Calendar.MONTH)+1;
int day = now.get(Calendar.DAY_OF_MONTH);
// System.out.println(month);
int hour = now.get(Calendar.HOUR);
int min = now.get(Calendar.MINUTE);
int sec = now.get(Calendar.SECOND);
System.out.println(year +"년 "+ month +"월 "+ day + "일");
System.out.println(hour +"시 "+ min +"분 "+ sec + "초");
}
}
java.util.GregorianCalendar ......
2023년 9월 7일
10시 44분 12초
Wrapper class
| 기본타입 | Wrapper |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
boxing unboxing을 사용하는 이유
- 어떠한 메소드들은 무조건 객체만을 다루는 타입이 있음
- 기본자료형을 다루지 못하는 메소드가 있기 때문
- 이럴 때 숫자형 데이터를 넘기고 싶을 때 객체화하여 사용
package ch05_wrapper;
public class Ex01Wrapper {
public static void main(String[] args) {
// boxing
// - 기본타입의 값을 포장해서 객체화하는 과정
// Wrapper class 의 인자값으로 기본타입의 값 또는 문자열을 사용
Integer wia = new Integer(1000);
Integer wib = new Integer("2000");
// auto boxing
Integer wic = 3000;
Double wda = new Double(2.3);
Double wdb = new Double("2.3");
// ------------------------------------------
// unboxing
// - 포장된 객체를 기본타입으로 변환하는 과정
// - '기본타입+Value()' 메서드로 unboxing
int ia = wia.intValue();
double da = wda.doubleValue();
System.out.println("ia : " + ia + " - da : " + da);
// auto unboxing
int ib = wib;
int sum = wic + 2000;
System.out.println("ib : " + ib + " - sum : " + sum);
}
}
ia : 1000 - da : 2.3
ib : 2000 - sum : 5000
파싱 ( parsing )
문자열을 분석해서 해당 형태의 기본자료형으로 변환
-> parse+기본자료형() / Ex) parseInt()
문자열인데 기본자료형인 놈들을 실제 기본자료형 값으로 바꾸는 것
package ch05_wrapper;
class Data{
private String value;
public Data(String value) {
this.value = value;
}
public String gerValue() {return value;}
}
public class Ex02Parse {
public static void main(String[] args) {
String stnA = "100";
// 문자열이기 때문에 숫자를 + 하면 이어져셔 출력
System.out.println(stnA + 1);
System.out.println();
// parseInt를 사용하여 문자열을 int 값으로 변환하면 int타입이 되기 때문에
// + 를 했을 때 연산이 됨
int ia = Integer.parseInt(stnA);
System.out.println("ia : " + ia);
System.out.println(ia + 1);
System.out.println();
String stnB = "2.3";
double da = Double.parseDouble(stnB);
System.out.println("da : " + da);
System.out.println(da + 3.3);
System.out.println();
Data dataA = new Data("123");
String sa = dataA.gerValue();
int a = Integer.parseInt(sa);
System.out.println(a+1);
Data dataB = new Data("3.4");
Double b = Double.parseDouble(dataB.gerValue());
System.out.println(b + 2.1);
}
}
1001
ia : 100
101
da : 2.3
5.6
124
5.5
Wrapper class 데이터 비교
package ch05_wrapper;
public class Ex03Compare {
public static void main(String[] args) {
Integer oa = 1000;
Integer ob = 1000;
// false 이유 비교연산자 안되는 이유 127을 초과했기 때문
System.out.println(oa == ob);
// equals()를 사용
System.out.println(oa.equals(ob));
// unboxing 사용
System.out.println(oa.intValue() == ob.intValue());
}
}
false
true
true
package ch01_generic;
public class Basic {
private Object obj;
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
}
package ch01_generic;
public class Fruits {
private String name; // 과일 이름
private int ea; // 수량
public Fruits(String name, int ea) {
this.name = name;
this.ea = ea;
}
@Override
public String toString() {
return "품명 : " + name + " - 수량 : " + ea;
}
}
generic
package ch01_generic;
public class ExGeneric<T> {
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
package ch01_generic;
public class GenericTest {
public static void main(String[] args) {
Basic basicA = new Basic();
// String 형태를 Object 형태로 업캐스팅 하여 넘기기
basicA.setObj(new String("basicA"));
// 업캐스팅된 Object형태의 문자열을 다시 다운 캐스팅하여 stnA에 받기
String stnA = (String) basicA.getObj();
System.out.println(stnA);
System.out.println();
Basic basicB = new Basic();
basicB.setObj(new Fruits("충주 사과", 10));
Fruits fra = (Fruits) basicB.getObj();
// toString() 를 override 했기 때문에 객체값 출력 시 아래와 같이 나옴
System.out.println("fra : " + fra);
System.out.println();
ExGeneric<String> egA = new ExGeneric<String>();
egA.setData("안녕 나는 generic이야");
String stnB = egA.getData();
System.out.println("stnB : " + stnB);
System.out.println();
// 생성시 뒤에는 <> 안에 작성하지 않아도 됨
// 이유 : 이미 앞에서 지정 했음
ExGeneric<Fruits> egB = new ExGeneric<>();
egB.setData(new Fruits("Bananaanan", 5));
Fruits frb = egB.getData();
// toString override
System.out.println("frb : " + frb);
System.out.println();
// generic '<>' 에 지정되는 애는 기본자료형을 쓸 수 없고 클래스임
// int -> Integer
ExGeneric<Integer> egC = new ExGeneric<>();
// auto boxing 이 되기 때문에 바로 숫자를 넘겨도 됨
egC.setData(1000);
// auto unboxing
int ia = egC.getData();
System.out.println("ia : " + ia);
System.out.println();
ExGeneric<String> egD = new ExGeneric<>();
egD.setData("123");
int ib = Integer.parseInt(egD.getData());
System.out.println("ib : " + ib);
}
}
basicA
fra : 품명 : 충주 사과 - 수량 : 10
stnB : 안녕 나는 generic이야
frb : 품명 : Bananaanan - 수량 : 5
ia : 1000
ib : 123
package ch02_generic;
public class Computer {
private String name;
public Computer(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "종류 : " + name;
}
}
package ch02_generic;
// 아래와 같이 1개가 아니라 2개 이상도 가능
public class Product<K, M> {
private K kind;
private M model;
public Product() {}
public Product(K kind, M model) {
this.kind = kind;
this.model = model;
}
public K getKind(){ return kind; }
public void setKind(K kind) { this.kind = kind; }
public M getModel() { return model; }
public void setModel(M model) { this.model = model; }
public String toString() {
return kind + " - " + model;
}
}
package ch02_generic;
public class ProductTest {
public static void main(String[] args) {
Product<String, String> proA = new Product<>();
proA.setKind("음료");
proA.setModel("코카콜라");
System.out.println(proA);
System.out.println();
Product<Computer, String> proB = new Product<>(new Computer("노트북"), "LG gram");
System.out.println(proB);
}
}
음료 - 코카콜라
종류 : 노트북 - LG gram
Product class 를 정의하세요
- 제품이름, 가격의 관리가 가능합니다
package ch03_quiz;
public class Product<N, P> {
private N name;
private P price;
public Product() {
}
public Product(N name, P price) {
this.name = name;
this.price = price;
}
public N getName() {
return name;
}
public void setName(N name) {
this.name = name;
}
public P getPrice() {
return price;
}
public void setPrice(P price) {
this.price = price;
}
@Override
public String toString() {
return "제품명 : " + name + " - 가격 : " + price + " 원";
}
}
Foo class 를 정의하세요
package ch03_quiz;
public class Foo<T> {
private T value;
public Foo(T value) {
this.value = value;
}
public T getName() {
return value;
}
public void setName(T value) {
this.value = value;
}
@Override
public String toString() {
return "난 foo야 내 정보 " + value;
}
}
Foo class 에 Product class 적용한 객체를 생성
package ch03_quiz;
public class QuizTest {
public static void main(String[] args) {
Product<Foo, Integer> pf1 = new Product<>(new Foo("홍길동"),123123123);
System.out.println(pf1);
Product<Foo, Integer> pf2 = new Product<>();
pf2.setName(new Foo("김덕배"));
pf2.setPrice(3000);
System.out.println(pf2);
Foo<Product> pf3 = new Foo<>(new Product<>("이름", 1234));
System.out.println(pf3);
}
}
제품명 : 난 foo야 내 정보 홍길동 - 가격 : 123123123 원
제품명 : 난 foo야 내 정보 김덕배 - 가격 : 3000 원
난 foo야 내 정보 제품명 : 이름 - 가격 : 1234 원
package ch03_quizT;
public class Product {
private String name;
private int price;
public Product() {
super();
}
public Product(String name, int price) {
super();
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "제품명 : " + name + " - " + price + " 원";
}
}
package ch03_quizT;
public class Foo<T> {
private T value;
public Foo() {
}
public Foo(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
package ch03_quizT;
public class QuizTest {
public static void main(String[] args) {
Foo<Product> fooA = new Foo<Product>(new Product("우유", 1500));
System.out.println(fooA.getValue());
}
}
제품명 : 우유 - 1500 원
ArrayList
Iterator ( 반복자 )
- collection 에 보관하고 있는 데이터에 순차적으로 접근할 때 사용
hasNext() : 데이터 유무 확인
next() : 데이터 가져오기
remove() : 데이터 삭제
package ch01_list;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ExArrayList {
public static void main(String[] args) {
ArrayList<String> exA = new ArrayList<>();
List<String> exB = new ArrayList<>();
// add() : 데이터 추가
exA.add("문자열 1");
exA.add("문자열 2");
exA.add("문자열 3");
System.out.println(exA);
System.out.println();
// add(index, value) : index 위치에 추가
// 특정 위치에 추가하고 기존 데이터는 뒤로 밀려남
exA.add(2, "문자열 4");
System.out.println(exA);
System.out.println();
// size() : List의 요소의 수
System.out.println("데이터 수 : " + exA.size());
System.out.println();
// contains() ( Object ) : 데이터 포함여부 확인
System.out.println("문자열 3 확인 : " + exA.contains("문자열 3"));
System.out.println("문자열 5 확인 : " + exA.contains("문자열 5"));
System.out.println();
// remove( Object or index ) : 데이터 삭제
// Object 로 삭제
System.out.println("문자열 1 삭제 : " + exA.remove("문자열 1"));
System.out.println(exA);
// index 로 삭제
System.out.println("1 번 index 데이터 삭제 : " + exA.remove(1));
System.out.println(exA);
System.out.println();
// set( index, value ) : 데이터 수정
System.out.println("0 번 index 수정 : " + exA.set(0, "문자열 수정"));
System.out.println(exA);
System.out.println();
// get( index ) : 데이터 확인
System.out.println("1 번 index : " + exA.get(1));
System.out.println();
// 각 객체 확인
for (int i = 0; i < exA.size(); i++) {
System.out.println(i + "번 : " + exA.get(i));
}
System.out.println();
// foreach : 향상된 for 문
// - for ( 변수명 : collection )
for (String data : exA) {
System.out.println(data);
}
System.out.println();
// Iterator
Iterator<String> it = exA.iterator(); // 마찬가지로 import 해야 함
while (it.hasNext()) { // 데이터 유무 확인
String value = it.next();
System.out.println(value);
}
}
}
[문자열 1, 문자열 2, 문자열 3]
[문자열 1, 문자열 2, 문자열 4, 문자열 3]
데이터 수 : 4
문자열 3 확인 : true
문자열 5 확인 : false
문자열 1 삭제 : true
[문자열 2, 문자열 4, 문자열 3]
1 번 index 데이터 삭제 : 문자열 4
[문자열 2, 문자열 3]
0 번 index 수정 : 문자열 2
[문자열 수정, 문자열 3]
1 번 index : 문자열 3
0번 : 문자열 수정
1번 : 문자열 3
문자열 수정
문자열 3
문자열 수정
문자열 3
package ch01_list;
public class Member {
private String name;
private int age;
public Member(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "이름 : " + name + " - 나이 : " + age;
}
}
package ch01_list;
import java.util.ArrayList;
import java.util.Scanner;
public class MemberManager {
private Scanner sc = new Scanner(System.in);
private ArrayList<Member> list;
public MemberManager() {
list = new ArrayList<>();
}
public int inputInteger(String message) {
System.out.print(message);
int value = sc.nextInt();
return value;
}
// 프로그램 종료
public void end() {
System.out.println("- Program end -");
System.exit(0); // 현 위치에서 프로그램 강제 종료
}
// 1. 추가 메소드
public void insert() {
System.out.println("--- 회 원 추 가 ---");
System.out.print("이름 입력 > ");
String name = sc.next();
System.out.print("나이 입력 > ");
int age = sc.nextInt();
list.add(new Member(name, age));
}
// 2. 삭제 메소드
public void delete() {
System.out.println("--- 회 원 삭 제 ---");
System.out.print("삭제 이름 입력 > ");
String dname = sc.next();
Member man = findName(dname);
if (man == null) {
System.out.println("검색 실패~ ㅋ");
return;
}
list.remove(man);
System.out.println(dname + " 삭제");
}
// ## 회원 이름 검색
public Member findName(String search) {
for (Member man : list) {
if (man.getName().equals(search)) {
return man;
}
}
return null;
}
// 3. 회원 목록 메소드
public void view() {
System.out.println("--- 회 원 목 록 ---");
for (Member man : list) {
System.out.println(man);
}
System.out.println("회원수 : " + list.size());
}
// 4. 회원정보 수정 메소드
public void modify() {
System.out.println("--- 회원정보 수정 ---");
System.out.print("수정할 회원 이름 검색 > ");
String sname = sc.next();
Member man = findName(sname);
if (man == null) {
System.out.println("검색 실패~ ㅋ");
return;
}
System.out.println("찾았습니다!\n" + "1. 이름 수정 2. 나이 수정");
int select = sc.nextInt();
switch (select) {
case 1:
cname(man);
break;
case 2:
cage(man);
break;
default:
System.out.println("입력 오류");
}
}
// 4-1 이름 수정
public void cname(Member man) {
System.out.println("- 회원 이름 수정 -");
System.out.println("수정할 이름 입력 : ");
String name = sc.next();
man.setName(name);
System.out.println("이름 수정 완료!");
}
// 4-2 나이 수정
public void cage(Member man) {
System.out.println("- 회원 나이 수정 -");
System.out.println("수정할 나이 입력 : ");
int age = sc.nextInt();
man.setAge(age);
System.out.println("나이 수정 완료!");
}
// 5 회원 확인 메소드
public void confirm() {
System.out.println("--- 회원정보 확인 ---");
System.out.print("회원 이름 검색 > ");
String sname = sc.next();
Member man = findName(sname);
if (man == null) {
System.out.println("없음~ ㅋ");
return;
}
System.out.println("찾았습니다!");
System.out.println(man);
}
// 회원 관리 메뉴 method
public void menu() {
while (true) {
int select = inputInteger("1. 추가 2. 삭제 3. 목록 4. 수정 5. 확인 0. 종료 >> ");
switch (select) {
case 1: // 추가
insert();
break;
case 2: // 삭제
delete();
break;
case 3: // 목록
view();
break;
case 4: // 수정
modify();
break;
case 5: // 확인
confirm();
break;
case 0: // 종료
end();
break;
default:
System.out.println("선택 오류~ ㅋ");
}
System.out.println();
}
} // menu()
}
package ch01_list;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class MemberManagerT {
private Scanner scanner = new Scanner(System.in);
private ArrayList<Member> list;
public MemberManagerT() {
list = new ArrayList<>();
}
public int inputInteger(String message) {
System.out.print(message);
int value = scanner.nextInt();
return value;
}
// 회원 관리 메뉴
public void menu() {
while(true) {
int select = inputInteger("1.추가 2.삭제 3.목록 4.수정 5.확인 >> ");
switch(select) {
case 1: // 추가
insert(); break;
case 2: // 삭제
delete(); break;
case 3: // 목록
view(); break;
case 4: // 수정
modify(); break;
case 5: // 확인
confirm(); break;
case 0: // 종료
end();
default:
System.out.println("선택 오류~");
}
System.out.println();
}
} // menu()
// 회원 추가
public void insert() {
System.out.println("--- 회 원 추 가 ---");
System.out.print("이름 입력 > ");
String name = scanner.next();
System.out.print("나이 입력 > ");
int age = scanner.nextInt();
list.add(new Member(name, age));
}// insert()
// 회원 삭제 : 이름으로 삭제
public void delete() {
System.out.println("--- 회 원 삭 제 ---");
System.out.print("삭제 이름 입력 > ");
String dname = scanner.next();
Member man = findName(dname);
if(man == null) {
System.out.println("검색 실패~");
return;
}
list.remove(man);
System.out.println(dname + " 삭제");
} // delete()
// 회원 이름 검색
public Member findName(String search) {
for(Member man : list) {
if(man.getName().equals(search))
return man;
}
return null;
} // fineName()
// 회원 목록
public void view() {
System.out.println("--- 회 원 목 록 ---");
for(Member man : list) {
System.out.println(man);
}
System.out.println("회원수 : " + list.size());
} // view()
// 회원 정보 수정
public void modify() {
System.out.println("--- 회원정보 수정 ---");
System.out.print("이름 입력 > ");
String name = scanner.next();
Iterator<Member> it = list.iterator();
int index = 0;
while(it.hasNext()) {
Member data = it.next();
if(data.getName().equals(name)) {
System.out.print("나이 입력 > ");
int age = scanner.nextInt();
list.set(index, new Member(name, age));
return; // method 탈출
}
++index;
}
System.out.println("수정 실패~");
} // modify()
// 회원 정보 확인
public void confirm() {
System.out.println("--- 회원정보 확인 ---");
System.out.print("검색 이름 입력 > ");
String name = scanner.next();
Member man = findName(name);
if(man != null)
System.out.println(man);
else
System.out.println("없는 회원입니다~");
} // confirm()
// 프로그램 종료
public void end() {
System.out.println("- Program end -");
System.exit(0); // 현 위치에서 프로그램 강제 종료
}
}
package ch01_list;
public class MemberMain {
public static void main(String[] args) {
MemberManager manageMe = new MemberManager();
manageMe.menu();
MemberManagerT manageT = new MemberManagerT();
manageT.menu();
}
}
// 4. 회원정보 수정 메소드
public void modify() {
System.out.println("--- 회원정보 수정 ---");
System.out.print("수정할 회원 이름 검색 > ");
String sname = sc.next();
Member man = findName(sname);
if (man == null) {
System.out.println("검색 실패~ ㅋ");
return;
}
System.out.println("찾았습니다!\n" + "1. 이름 수정 2. 나이 수정");
int select = sc.nextInt();
switch (select) {
case 1:
cname(man);
break;
case 2:
cage(man);
break;
default:
System.out.println("입력 오류");
}
}
// 4-1 이름 수정
public void cname(Member man) {
System.out.println("- 회원 이름 수정 -");
System.out.println("수정할 이름 입력 : ");
String name = sc.next();
man.setName(name);
System.out.println("이름 수정 완료!");
}
// 4-2 나이 수정
public void cage(Member man) {
System.out.println("- 회원 나이 수정 -");
System.out.println("수정할 나이 입력 : ");
int age = sc.nextInt();
man.setAge(age);
System.out.println("나이 수정 완료!");
}
// 회원 정보 수정
public void modify() {
System.out.println("--- 회원정보 수정 ---");
System.out.print("이름 입력 > ");
String name = scanner.next();
Iterator<Member> it = list.iterator();
int index = 0;
while(it.hasNext()) {
Member data = it.next();
if(data.getName().equals(name)) {
System.out.print("나이 입력 > ");
int age = scanner.nextInt();
list.set(index, new Member(name, age));
return; // method 탈출
}
++index;
}
System.out.println("수정 실패~");
} // modify()
내 코드에서는 method를 만들어 switch 문 사용(1, 2)
-> 수정 항목 선택 > 수선택 항목 수정
문제점? Iterator를 사용하지 않음
강사님 코드 Iterator를 이용하여 나이 수정