MyRect에 4개의 사각형 좌표를 입력받아서 그것을 Vector에 저장해서 관리하는 동작을 하는 프로그램입니다.

메뉴화면에서

1은 입력 - 4개의 정수를 입력받아 그것을 저장하는 일을 하구요

2는 삭제 - 4개의 정수를 입력받아 그 사이에 있는 모든 사각형을 지웁니다.

3은 출력 - 현재 모든 사각형을 출력 하는거구요..

4는 종료

이렇게 동작하는데, 문제가 삭제를 할때 생기더군요.

분명 하나씩 검사하면서 삭제를 해야 하는데

삭제를 하게 되면 그 다음것을 검사하는게 아니라 다다음거를 검사합니다.



(1,1),(2,2)
(2,2),(3,3)
(3,3),(4,4)
(4,4),(5,5)
(5,5),(6,6)

이렇게 6개를 입력했다고 쳤을때

(2,2)에서 (5,5)사이의 사각형을 삭제하라고 실행시키면

(1,1),(2,2) <- 이걸 검사하고
(2,2),(3,3) <- 이걸 검사해서 삭제한 다음에
(3,3),(4,4)
(4,4),(5,5) <- 바로 여기로 넘어갑니다.
(5,5),(6,6)

if (my.lfX >= a && my.upY >= b && my.rgX <= c &&
                        my.btY <= d)

여기 이후부터 무언가 잘못된것 같은데 처음에는 삭제를 했으니 자동으로 다음인덱스를 가르켜서 그런가 생각을 했는데 그렇게 하니깐 오히려 다음으로 못넘어가 무한루프에 빠져버리고..
2시간동안 이짓저짓 다해봤는데 답이 안나오네요.
무엇이 잘못됬을까요?
ps. 어제 후딱하고 끝내버리자 는 신념으로 하느라 주석은 달지못했습니다.
다만 기본적인 문제였던 만큼 내용은 어렵지는 않을꺼에요.(아마도..)





package project1;
import java.util.*;
import java.io.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
class myRect {
    int lfX, upY, rgX, btY;
    myRect() {
        lfX = upY = rgX = btY = 0;
    }
    myRect(int lX, int uY, int rX, int bY) {
        lfX = lX;
        upY = uY;
        rgX = rX;
        btY = bY;
    }
    void PrintRect() {
        System.out.println("[(" + lfX + ", " + upY + ") (" + rgX + ", " + btY + ")]");
    }
}

class in_out{
    int num;
    int input(){
        try {
            BufferedReader br = null;
            br = new BufferedReader(new InputStreamReader(System.in));
            num = Integer.parseInt(br.readLine());
        }
        catch(Exception e){}
        return num;
    }
}

public class MyObject {
    public MyObject() {
    }

    public static void main(String[] args) {
        int menu = 0;
        in_out i_o = new in_out();
        Vector vec = new Vector();
        while(menu != 4){
            System.out.println("삽입 : 1, 삭제 : 2, 출력 : 3, 끝내기 : 4");
            System.out.print(">>");
            menu = i_o.input();
            switch(menu) {

            case 1:
                int w, x, y, z;
                System.out.println("삽입할 사각형의 점을 입력하세요");
                System.out.print("X1(좌측상단) 좌표 : ");
                w = i_o.input();
                System.out.print("Y1(좌측상단) 좌표 : ");
                x = i_o.input();
                System.out.print("X2(우측하단) 좌표 : ");
                y = i_o.input();
                System.out.print("X1(우측하단) 좌표 : ");
                z = i_o.input();

                vec.addElement(new myRect(w, x, y, z));
                break;

            case 2:
                int a, b, c, d;
                System.out.println("삭제할 사각형의 점을 입력하세요");
                System.out.print("X1(좌측상단) 좌표 : ");
                a = i_o.input();
                System.out.print("Y1(좌측상단) 좌표 : ");
                b = i_o.input();
                System.out.print("X2(우측하단) 좌표 : ");
                c = i_o.input();
                System.out.print("X1(우측하단) 좌표 : ");
                d = i_o.input();

                int count = 0, index = 0;
                Enumeration em = vec.elements();
                while(em.hasMoreElements()) {
                    Object ob = em.nextElement();
                    myRect my = (myRect) ob;
                    if (my.lfX >= a && my.upY >= b && my.rgX <= c &&
                        my.btY <= d) {
                        vec.removeElement(ob);
                        count++;
                        ob = vec.firstElement();
                    }
                    else {
                    }
                }
                System.out.println(count + "개의 사각형을 삭제하였습니다.");
                break;
            case 3:
                Enumeration em2 = vec.elements();
                while(em2.hasMoreElements()) {
                    Object ob2 = em2.nextElement();
                    myRect my2 = (myRect) ob2;
                    my2.PrintRect();
                }
                break;
             case 4:
                 System.out.println("프로그램을 종료합니다");
                 break;
            }
        }
    }
}