Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

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";