Notice
Recent Posts
Recent Comments
Link
Everything has an expiration date
163 - Java 컬렉션(Collection) : 요소 추가, 요소 출력, 요소 검색, 요소 삭제, 요소 변경 중 하나를 골라서 사용자가 종료할 때까지 벡터의 요소를 변경하는 프로그램 본문
[Java]/Program source (java)
163 - Java 컬렉션(Collection) : 요소 추가, 요소 출력, 요소 검색, 요소 삭제, 요소 변경 중 하나를 골라서 사용자가 종료할 때까지 벡터의 요소를 변경하는 프로그램
Jelly-fish 2023. 9. 21. 23:45
[ 처음 구성한 Source ] - 요소 추가 부분이 잘못된 상태
『Mistake』 ①
→ ① 사용자가 입력한 " n "이 초기화되지 않아
요소 추가를 한번 진행한 후에, 다음 번에 다시 실행하려고 하면 동작하지 않음.
『Mistake』 ②
→ ② "%d번째 요소 입력" 부분에서, 요소 추가를 한번 실행한 후 재실행했을 때
cnt는 1로 초기화되므로 실제로 1번째 요소가 아닌데도, 다시 1번째부터 요소 입력을 받겠다고 출력함.
/* ====================================
■■■ 컬렉션 (Collection) ■■■
======================================*/
// Test163 클래스를 완성하여 다음 기능을 가진 프로그램을 구현한다.
/*
실행 예)
[ 메뉴 선택 ]==============
1. 요소 추가
2. 요소 출력
3. 요소 검색
4. 요소 삭제
5. 요소 변경
6. 종료
===========================
>> 메뉴 선택 (1~6) : 1
1번째 요소 입력 : 최혜인
1번째 요소 입력 성공~!!!
요소 입력 계속(Y/N)? : y
2번째 요소 입력 : 채다선
1번째 요소 입력 성공~!!!
요소 입력 계속(Y/N)? : n
[ 메뉴 선택 ]==============
1. 요소 추가
2. 요소 출력
3. 요소 검색
4. 요소 삭제
5. 요소 변경
6. 종료
===========================
>> 메뉴 선택 (1~6) : 2
[벡터 전체 출력]
최혜인
채다선
벡터 전체 출력 완료~!!!
[ 메뉴 선택 ]==============
1. 요소 추가
2. 요소 출력
3. 요소 검색
4. 요소 삭제
5. 요소 변경
6. 종료
===========================
>> 메뉴 선택 (1~6) : 3
검색할 요소 입력 : 채다선
[검색 결과 출력]
항목이 존재합니다.
[ 메뉴 선택 ]==============
1. 요소 추가
2. 요소 출력
3. 요소 검색
4. 요소 삭제
5. 요소 변경
6. 종료
===========================
>> 메뉴 선택 (1~6) : 3
검색할 요소 입력 : 정현욱
[검색 결과 출력]
항목이 존재하지 않습니다.
[ 메뉴 선택 ]==============
1. 요소 추가
2. 요소 출력
3. 요소 검색
4. 요소 삭제
5. 요소 변경
6. 종료
===========================
>> 메뉴 선택 (1~6) : 4
삭제할 요소를 입력 : 정한울
[삭제 결과 출력]
항목이 존재하지 않아 삭제할 수 없습니다.
[ 메뉴 선택 ]==============
1. 요소 추가
2. 요소 출력
3. 요소 검색
4. 요소 삭제
5. 요소 변경
6. 종료
===========================
>> 메뉴 선택 (1~6) : 4
삭제할 요소 입력 : 최혜인
[삭제 결과 출력]
최혜인 항목이 삭제되었습니다.
[ 메뉴 선택 ]==============
1. 요소 추가
2. 요소 출력
3. 요소 검색
4. 요소 삭제
5. 요소 변경
6. 종료
===========================
>> 메뉴 선택 (1~6) : 5
변경할 요소 입력 : 임하성
[변경 결과 출력]
변경할 대상이 존재하지 않습니다.
[ 메뉴 선택 ]==============
1. 요소 추가
2. 요소 출력
3. 요소 검색
4. 요소 삭제
5. 요소 변경
6. 종료
===========================
>> 메뉴 선택 (1~6) : 5
변경할 요소 입력 : 채다선
수정할 내용 입력 : 이주형
[변경 결과 출력]
변경이 완료되었습니다.
[ 메뉴 선택 ]==============
1. 요소 추가
2. 요소 출력
3. 요소 검색
4. 요소 삭제
5. 요소 변경
6. 종료
===========================
>> 메뉴 선택 (1~6) : 2
[벡터 전체 출력]
이주형
벡터 전체 출력 완료~!!!
[ 메뉴 선택 ]==============
1. 요소 추가
2. 요소 출력
3. 요소 검색
4. 요소 삭제
5. 요소 변경
6. 종료
===========================
>> 메뉴 선택 (1~6) : 6
프로그램 종료~!!!
계속하려면 아무 키나 누르세요...
*/
import java.util.Collections;
import java.util.Iterator;
import java.util.Vector;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
class Menus // → 완성
{
public static final int E_ADD = 1; //-- 요소추가
public static final int E_DISP = 2; //-- 요소출력
public static final int E_FIND = 3; //-- 요소 검색
public static final int E_DEL = 4; //-- 요소 삭제
public static final int E_CHA = 5; //-- 요소 변경
public static final int E_EXIT = 6; //-- 종료
}
public class Test163
{
// 주요 속성 구성 → 완료
private static final Vector<Object> vt; //-- 자료구조
private static BufferedReader br; //-- 입력 시 활용
private static Integer sel; //-- 선택 값
private static String con; //-- 계속 진행 여부
// static 초기화 블럭 → 완성
static
{
// Vector 자료구조 생성
vt = new Vector<Object>();
// BufferedReader 객체 생성
br = new BufferedReader(new InputStreamReader(System.in));
// 사용자 입력 값 초기화
sel = 1;
con = "Y";
}
// 메뉴 출력 메소드
public static void menuDisp()
{
System.out.println("\n\n[ 메뉴 선택 ]==============");
System.out.print("1. 요소 추가 \n2. 요소 출력\n3. 요소 검색\n");
System.out.print("4. 요소 삭제 \n5. 요소 변경 \n6. 종료\n");
System.out.print("===========================\n");
System.out.print(">> 메뉴 선택 (1~6) :");
}
// 메뉴 선택 메소드
public static void menuSelect() throws IOException, NumberFormatException
{
// 2. 사용자에게 숫자를 입력 받는다 (sel의 값.)
sel = Integer.parseInt(br.readLine());
}
// 선택된 메뉴 실행에 따른 기능 호출 메소드
public static void menuRun() throws IOException
{
switch (sel)
{
case Menus.E_ADD : addElement(); break;
case Menus.E_DISP : dispElement(); break;
case Menus.E_FIND : findElement(); break;
case Menus.E_DEL : delElement(); break;
case Menus.E_CHA : chaElement(); break;
case Menus.E_EXIT : exit(); break;
}
}
// 자료구조에 요소 추가(입력) 메소드
public static void addElement() throws IOException
{
/*
1번째 요소 입력 : 최혜인
1번째 요소 입력 성공~!!!
요소 입력 계속(Y/N)? : y
2번째 요소 입력 : 채다선
1번째 요소 입력 성공~!!!
요소 입력 계속(Y/N)? : n
*/
int cnt = 1;
while (con.equals("y") || con.equals("Y"))
{
System.out.printf("\n%d번째 요소 입력 : ", cnt);
vt.add(br.readLine());
System.out.printf("%d번째 요소 입력 성공~!!!", cnt);
System.out.print("\n요소 입력 계속(Y/N)? : ");
con = br.readLine();
if (con.equals("y") || con.equals("Y"))
{
cnt++;
}
}
}
// 자료구조 전체 요소 출력 메소드
public static void dispElement()
{
/*
[벡터 전체 출력]
최혜인
채다선
벡터 전체 출력 완료~!!!
*/
Iterator<Object> it = vt.iterator();
String str;
System.out.println("\n\n[벡터 전체 출력]");
while (it.hasNext())
{
str = (String)it.next();
System.out.println(str);
}
}
// 자료구조 내 요소 검색 메소드
public static void findElement() throws IOException
{
/*
검색할 요소 입력 : 채다선
[검색 결과 출력]
항목이 존재합니다.
검색할 요소 입력 : 정현욱
[검색 결과 출력]
항목이 존재하지 않습니다.
*/
String searchStr;
System.out.print("\n검색할 요소 입력 : ");
searchStr = br.readLine();
//Collections.sort(vt);
//int isExist = Collections.binarySearch(vt, searchStr);
int isExist = vt.indexOf(searchStr);
System.out.println("\n[검색 결과 출력]");
if (isExist < 0)
{
System.out.println("항목이 존재하지 않습니다.");
}
else
{
System.out.println("항목이 존재합니다.");
}
}
// 자료구조 내 요소 삭제 메소드
public static void delElement() throws IOException
{
/*
삭제할 요소를 입력 : 정한울
[삭제 결과 출력]
항목이 존재하지 않아 삭제할 수 없습니다.
삭제할 요소 입력 : 최혜인
[삭제 결과 출력]
최혜인 항목이 삭제되었습니다.
*/
System.out.print("삭제할 요소를 입력 : ");
String delStr = br.readLine();
int isExist = vt.indexOf(delStr);
System.out.println("\n[삭제 결과 출력]");
if (isExist < 0)
{
System.out.println("항목이 존재하지 않아 삭제할 수 없습니다.\n");
}
else
{
vt.remove(delStr);
System.out.printf("%s 항목이 삭제되었습니다.", delStr);
}
}
// 자료구조 내 요소 수정(변경) 메소드
public static void chaElement() throws IOException
{
/*
변경할 요소 입력 : 임하성
[변경 결과 출력]
변경할 대상이 존재하지 않습니다.
변경할 요소 입력 : 채다선
수정할 내용 입력 : 이주형
[변경 결과 출력]
변경이 완료되었습니다.
*/
System.out.print("변경할 요소 입력 : ");
String changeStr = br.readLine();
String modifyStr;
int changeIdx;
int isExist = vt.indexOf(changeStr);
System.out.println("\n[변경 결과 출력]");
if (isExist < 0)
{
System.out.println("변경할 대상이 존재하지 않습니다.");
}
else
{
System.out.print("수정할 내용 입력 : ");
modifyStr = br.readLine();
// 변경해야 할 대상의 인덱스 위치 알아내기.
changeIdx = vt.indexOf(changeStr);
// 변경해야 할 대상의 인덱스 위치에, 변경할 문자열 덮어쓰기.
vt.set(changeIdx, modifyStr);
System.out.println("변경이 완료되었습니다.");
}
}
// 프로그램 종료 메소드
public static void exit()
{
System.out.println("\n프로그램 종료~!!!");
System.exit(-1);
}
// main() 메소드 → 완성
public static void main(String[] args) throws IOException, NumberFormatException
{
do
{
menuDisp();
menuSelect();
menuRun();
}
while (true);
}
}
[ 다시 수정한 Source ] - 요소 추가 부분의 오류를 모두 해결함
『Mistake』 ①
→ [ 요소 추가를 한번 진행하고 " n "으로 빠져나간 후, 다시 요소 추가를 실행하려 하면 동작하지 않음. ]
『Solve』 ①
→ [ 사용자가 "N" 혹은 다른 문자열을 입력해서 while 문을 벗어나게 되면, 다시 con = "Y"로 초기화 함. ]
『Mistake』 ②
→ [요소 추가를 한번 실행한 후 재실행하면, 1번째 요소가 아닌데도, 다시 1번째부터 요소 입력을 받겠다고 출력. ]
『Solve』 ②
→ [ cnt를 Vector<Object> vt의 size() + 1로 지정. (맨 처음 시작에서 vt.size() == 0 이므로...) ]
int cnt = vt.size() + 1;
while (con.equals("y") || con.equals("Y"))
{
System.out.printf("\n%d번째 요소 입력 : ", cnt);
vt.add(br.readLine());
System.out.printf("%d번째 요소 입력 성공~!!!", cnt);
System.out.print("\n요소 입력 계속(Y/N)? : ");
con = br.readLine();
if (con.equals("y") || con.equals("Y"))
{
cnt++;
}
}
con = "Y";