Stack & Queue 예외처리
- Overflow & Underflow 방지
- 자료구조는 동적할당을 전제로 해야하지만 아래에 작성된 스택&큐는 예외처리만을 하기위해 정적으로 했다.
- Try catch 문 사용
// 값을 담을 배열
package dynamic;
public abstract class Memory {
protected int[] arr;
protected int cnt;
public Memory() {
arr = new int[5];
cnt = 0;
}
public void push(int a) {
arr[cnt++] = a;
}
public abstract int pop();
}
/// 스택
package dynamic;
public class MyStack extends Memory {
@Override
public int pop() {
return arr[--cnt];
}
}
/// 큐
package dynamic;
public class MyQueue extends Memory{
private int front;
public MyQueue() {
front = 0;
}
@Override
public int pop() {
return arr[front++];
}
}
- 메인에서의 예외처리 (Try Catch문 사용)
> 예외는 예외처리(Exception Handling)을 통해 프로그램을 종료 되지 않고 정상적으로 작동되게 만들어줄 수 있다.
자바에서 예외처리는 Try Catch문을 통해 해줄 수 있다.
/// 메인
package dynamic;
import java.util.Scanner;
public class DynamicMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
MyStack ms = new MyStack();
MyQueue mq = new MyQueue();
Memory mm = null;
int a;
while(true) {
System.out.println("1. 스택 2. 큐 3. 종료");
a = sc.nextInt();
if(a==1) {mm = ms;}// 스택
else if(a==2) {mm = mq;} // 큐
else {break;}
while(true) {
System.out.print("1. push 2. pop 3. break : ");
a = sc.nextInt();
if(a==1) { // push
System.out.print("push 값 입력 : ");
///// 예외처리 부분 //////
try {
mm.push(sc.nextInt());
} catch (Exception e) {}
/////////////////////////
}
else if(a==2) {
System.out.print("pop 값 : ");
///// 예외처리 부분 //////
try {
System.out.println(mm.pop());
} catch (Exception e) {}
/////////////////////////
}
else {
break;
}
}
}
}
}
- 빈공간과 사이즈 함수를 구현하여 활용
// 배열
package dynamic;
public abstract class Memory {
protected int[] arr;
protected int cnt;
public Memory() {
arr = new int[5];
cnt = 0;
}
public void push(int a) {
arr[cnt++] = a;
}
public boolean sizeEmpty() { // 배열안에 값이 없을때 비교
return cnt == 0;
}
public boolean sizeFull() { // 배열안에 값이 꽉 차 있을때 비교
return cnt == 5;
}
public abstract int pop();
}
// 스택
package dynamic;
public class MyStack extends Memory {
@Override
public int pop() {
return arr[--cnt];
}
}
// 큐
package dynamic;
public class MyQueue extends Memory{
private int front;
public MyQueue() {
front = 0;
}
@Override
public int pop() {
--cnt;
if(front == 5) {
front = 0;
}
return arr[front++];
}
}
// 메인
package dynamic;
import java.util.Scanner;
public class DynamicMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
MyStack ms = new MyStack();
MyQueue mq = new MyQueue();
Memory mm = null;
int a;
while(true) {
System.out.println("1. 스택 2. 큐 3. 종료");
a = sc.nextInt();
if(a==1) {mm = ms;}// 스택
else if(a==2) {mm = mq;} // 큐
else {break;}
while(true) {
System.out.print("1. push 2. pop 3. break : ");
a = sc.nextInt();
if(a==1) { // push
if(mm.sizeFull()) { // 값이 가득 차 있을때
System.out.println("더 이상 push 할 수 없습니다.");
}
else {
System.out.print("push 값 입력 : ");
mm.push(sc.nextInt());
}
}
else if(a==2) {
if(mm.sizeEmpty()) { // pop 할 값이 없을때
System.out.println("더 이상 pop 할 수 없습니다.");
}else {
System.out.print("pop 값 : ");
System.out.println(mm.pop());
}
}
else {
break;
}
}
}
}
}
반응형
'자바과정 > 과제물' 카테고리의 다른 글
(Java) GUI 계산기 [연산은 한번] (0) | 2021.02.17 |
---|---|
(Java) 급여 관리 프로그램 [인터페이스 생성] (0) | 2021.02.15 |
(Java) 급여 관리 프로그램 [팀] (0) | 2021.02.13 |
(Java) 성적처리프로그램(3차원 배열사용) (0) | 2021.02.02 |
(Java) stack과 heap (0) | 2021.01.30 |
댓글