h-i-s-t-o-r-y

[Java] 입력, 수정, 삽입, 삭제, 출력, 검색, 종료 프로그램 본문

Java

[Java] 입력, 수정, 삽입, 삭제, 출력, 검색, 종료 프로그램

H' 2021. 7. 16. 11:51
package days13;

import java.io.IOException;
import java.util.Scanner;

public class Ex01 {
	// 모든 메서드(함수) 사용할 수 있는 전역변수
	static int [] m =  new int[3];
	
	static String [] menus = {
		"입력(add)",
		"수정(update)",
		"삽입(insert)",
		"삭제(delete)",
		"출력(disp)",
		"검색(search)",
		"종료(exit)"
	};
	
	static int num;		//메뉴 선택 후 저장할 변수
	static char con = 'Y';
	static Scanner scanner = new Scanner(System.in);
	static int idx = 3;		//채워넣고자 하는 배열의 위치값을 가지는 변수
	
	
	public static void main(String[] args) throws IOException {
		
		// Ctrl 누르고 함수 클릭하면 해당 함수 선언 부분으로 이동
		
		while (true) {			
			dispMenu();
			selectMenu();
			processMenu();
		}
		
	}//main

	private static void processMenu() throws IOException {
		switch (num) {
		case Menu.ADD:		//add
			add();
			break;
		case 2:		//update
			update();
			break;
		case 3:		//insert
			insert();
			break;
		case 4:		//delete
			delete();
			break;
		case Menu.DISP:		//disp
			disp();
			break;
		case 6:		//search
			search();
			break;
		case Menu.EXIT:		//exit
			exit();
			break;
		}//switch
	}

	private static void search() throws IOException {
		// 순차 검색 (sequence search)
		System.out.print("> 검색할 위치 입력 ? ");
		int searchNum = scanner.nextInt();
		for (int i = 0; i < idx; i++) {
			if (searchNum == m[i]) {
				System.out.printf("%d 위치에 있다.\n", i);
			}
		}
		pause();
	}

	private static void update() throws IOException {
		System.out.print("> 수정할 위치 입력 ? ");
		int updateIndex = scanner.nextInt();
		int updateNum = scanner.nextInt();
		m[updateIndex] = updateNum;
		pause();
	}

	private static void delete() {
		//배열은 기억공간 삭제가 안되기 때문에 삭제하려는 변수 뒤에 있는 값들을 모두 앞으로 옮기고 맨뒤의 값을 초기화(0)
		//**즉 삭제할 인덱스 입력받아 -> 그다음 인덱스 위치부터 앞으로 한칸씩이동
		//-> 마지막 요소는 0으로 초기화 -> idx 1 감소
		System.out.print("> 삭제할 위치 입력 ? ");
		int deleteIndex = scanner.nextInt();
		arrayLeftShift(deleteIndex);
		m[idx-1] = 0;
		idx--;
	}

	private static void arrayLeftShift(int deleteIndex) {
		for (int i = deleteIndex + 1; i < idx; i++) {
			m[i-1] = m[i];
		}
	}

	private static void insert() throws IOException {
		System.out.print("> 위치, 정수 입력 ? ");
		int insertIndex = scanner.nextInt();
		int insertNum = scanner.nextInt();
		
		arraySizeCheck();					//1
		// 삽입하기 위해 오른쪽으로 밀겠다
		arrayRightShift(insertIndex);		//2
		m[insertIndex] = insertNum;			//3
		idx++;								//4
		
		pause();	//일시정지
	}

	private static void arrayRightShift(int insertIndex) {
		for (int i = idx-1; i >= insertIndex; i--) {
			m[i+1] = m[i];
		}
	}

	private static void disp() throws IOException {
		clearScreen();
		System.out.printf("[배열 출력]\n");
		for (int i = 0; i < idx; i++) {
			System.out.printf("m[%d]=%d\t", i, m[i]);
			if (i%2==1) System.out.println();
		}
		pause();	//일시정지
	}

	private static void pause() throws IOException {
		System.out.print("\n> 계속 하려면 엔터 치세요.");
		System.in.read();
		System.in.skip(System.in.available());
	}

	private static void add() throws IOException {
		clearScreen();
		do {
			System.out.printf("> %d 인덱스에 채울 정수 입력 ? ", idx);
			int n = scanner.nextInt();
			// 배열크기 체크 -> 방이 부족하면 배열크기 증가
			arraySizeCheck();
			m[idx++] = n;
			
			System.out.print("> 계속 입력 ? ");
			con = (char) System.in.read();
			System.in.skip(System.in.available());
		} while (Character.toUpperCase(con)=='Y');
	}

	private static void arraySizeCheck() {
		if (idx == m.length) {
			arraySizeIncrease(3);
		}
	}

	private static void arraySizeIncrease(int n) {
		int [] temp = new int[m.length + n];
		System.arraycopy(m, 0, temp, 0, m.length);
		m = temp;
	}

	private static void exit() {
		clearScreen();	//화면 깨끗이
		System.out.println("\n\n 프로그램 종료 !!! ");
		System.exit(-1);
	}

	private static void clearScreen() {
		for (int i = 0; i < 10; i++) {
			System.out.println();
		}
	}

	private static void selectMenu() {
		System.out.print("> 메뉴 선택하세요 ? ");
		num = scanner.nextInt();
	}

	private static void dispMenu() {
		clearScreen();
		System.out.printf("[%s]\n", "메뉴선택");
		for (int i = 0; i < menus.length; i++) {
			System.out.printf("%d. %s\n", i+1, menus[i]);
		}
		
		
		
		
	}

	
	
}//class

// enum 열거형
class Menu{
	static final int ADD = 1;
	static final int DISP = 5;
	static final int EXIT = 7;
	
}
Comments