본문 바로가기

카테고리 없음

다섯 번째 과제


[ 다섯 번째 과제 - SchoolManagerTest ]

 

[MyComparableInterfaceTest.java]

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

 

enum OperationKind {ADD_C, ADD_L, LIST, CLEAR, SORT_A, SORT_D, QUIT, INVALID} ;

enum SortKind {ASCENDING, DESCENDING} ;

 

public class ComparableInterfaceTest {

 

    private static Scanner scanner = new Scanner(System.in);

    private static List<MyComparable> comparableList = new ArrayList<MyComparable>() ;

 

   

    public static void main(String[] args) {

 

        while ( true ) {

            final OperationKind op = getOperation() ;

 

            if ( op == OperationKind.QUIT ) {

                System.out.println("Bye") ;

                break;

            }

            if ( op == OperationKind.INVALID ) {

                System.out.println("Invalid Operation!") ;

                continue ;

            }

 

            switch ( op ) {

            case ADD_L : {

                Line newLine = createLine() ;

                System.out.println(newLine) ;

                break ;

            }

            case ADD_C : {

                Circle newCircle = createCircle() ;

                System.out.println(newCircle) ;     // got first error at this part

                break ;

            }

            case SORT_A:

                sortList(comparableList, SortKind.ASCENDING) ;

                break ;

            case SORT_D:

                sortList(comparableList, SortKind.DESCENDING) ;

                break ;

            case CLEAR:

                comparableList.clear() ;

                break ;

            case LIST:

                System.out.println(comparableList) ;

                break ;

            }

        }

    }

 

 

    private static OperationKind getOperation() {

 

        System.out.print("Enter Operation String! ") ;

        String operation = scanner.next() ;

        OperationKind kind = OperationKind.INVALID ;

 

        if ( operation.equalsIgnoreCase("ADDL"))

            kind = OperationKind.ADD_L ;

        if ( operation.equalsIgnoreCase("ADDC"))

            kind = OperationKind.ADD_C ;

        else if ( operation.equalsIgnoreCase("LIST"))

            kind = OperationKind.LIST ;

        else if ( operation.equalsIgnoreCase("SORTA"))

            kind = OperationKind.SORT_A ;

        else if ( operation.equalsIgnoreCase("SORTD"))

            kind = OperationKind.SORT_D ;

        else if ( operation.equalsIgnoreCase("CLEAR"))

            kind = OperationKind.CLEAR ;

        else if ( operation.equalsIgnoreCase("QUIT"))

            kind = OperationKind.QUIT ;

        return kind ;

    }

 

 

    private static void sortList(List<MyComparable> comparableList, SortKind sortKind) {

 

        if (sortKind == SortKind.ASCENDING ) {

            for( int i = 0 ; i < comparableList.size()-1 ; i++ ) {

                for ( int j = i+1 ; j < comparableList.size() ; j++ ) {

                    MyComparable tmp = null;

                    if ( (comparableList.get(i)).compareTo(comparableList.get(j) ) == 1 )

                        tmp = comparableList.get(i);

                    comparableList.set(i, comparableList.get(j)) ;

                    comparableList.set(j, tmp) ;

                }

            }

        }

 

        if ( sortKind == SortKind.DESCENDING ) {

            for ( int i = 0 ; i < comparableList.size()-1 ; i++ ) {

                for ( int j = i+1 ; j < comparableList.size() ; j++ ) {

                    MyComparable tmp = null ;

                    if ( ((comparableList.get(i)).compareTo(comparableList.get(j))) == -1 )

                        tmp = comparableList.get(i) ;

                    comparableList.set(i, comparableList.get(j)) ;

                    comparableList.set(j, tmp);

                }

            }

        }

    }

 

    private static Line createLine() {

        int x1 = scanner.nextInt() ;

        int y1 = scanner.nextInt() ;

        int x2 = scanner.nextInt() ;

        int y2 = scanner.nextInt() ;

        Line newLine = new Line(new Point(x1, y1), new Point(x2, y2)) ;

        comparableList.add(newLine) ;

        return newLine ;

    }

 

    private static Circle createCircle() {

        int x = scanner.nextInt() ;

        int y = scanner.nextInt() ;

        int radius = scanner.nextInt() ;

        Circle newCircle = new Circle(new Point(x, y), radius) ;

        comparableList.add(newCircle) ;

        return newCircle ;

    }

 

}

 

 

[MyComparable.java]

 

public interface MyComparable {

    public int compareTo(MyComparable other) ;

    public long getSize() ;

}

 

 

 

[Circle.java]

 

public class Circle implements MyComparable {

 

    private Point center ;

    private int radius ;

 

    public Circle(Point point, int radius) {

        //center.setX(point.getX()) ; center 아무것도 가리키지 않기 때문에 없다

        //center = new Point(point.getX(), point.getY()) ; sol1 : 새로 만들어서 넣어버리거나

        center = point;     // sol 2 : 포인터 값을 가져오기

        this.radius = radius ;

    }

 

    @Override

    public int compareTo(MyComparable other) {

        long thisSize = getSize() ;

        long otherSize = other.getSize() ;      // ㅁㅈ?    

        int returnVal = -2 ;

 

        if ( thisSize > otherSize )

            returnVal = 1 ;

        else if ( thisSize == otherSize )

            returnVal = 0 ;

        else

            returnVal = -1 ;

        return returnVal ;

    }

 

    @Override

    public long getSize() {

        long size = (long) ((Math.PI)*radius*radius) ; // type casting : long

        return size ;

    }

 

    @Override

    public String toString() {

        return String.format("[[%d, %d] %d %d]", center.getX(), center.getY(), radius, getSize()) ;

    }

 

}

 

[Line.java]

 

public class Line implements MyComparable {

 

    private Point point1, point2 ;

 

 

    public Line(Point point1, Point point2) {

        this.point1 = point1 ;

        this.point2 = point2 ;

    }

 

    @Override

    public int compareTo(MyComparable other) {

 

        long thisSize = getSize() ;

        long otherSize = other.getSize() ;      // ㅁㅈ?    

        int returnVal = -2 ;

 

        if ( thisSize > otherSize )

            returnVal = 1 ;

        else if ( thisSize == otherSize )

            returnVal = 0 ;

        else

            returnVal = -1 ;

        return returnVal ;

    }

 

    @Override

    public long getSize() {

        long size = Math.round( Math.sqrt(

                (point1.getX()-point2.getX())*(point1.getX()-point2.getX()) +

                (point1.getY()-point2.getY())*(point1.getY()-point2.getY()) ) ) ;

        return size ;

    }

 

    @Override

    public String toString() {

        return String.format("[%s %s %d]", point1, point2, getSize() ) ;

    }

   

}

 

 

 

[Point.java]

 

public class Point {

 

    private int x, y ;

   

   

    public Point(int x, int y) {

        this.x = x ;

        this.y = y ;

    }

     

    public int getX() { return x ; }

    public int getY() { return y ; }

   

    public void setX(int x) { this.x = x ;}

    public void setY(int y) { this.y = y ;}

    public void setPoint(int x, int y) {

        this.x = x ;

        this.y = y ;

    }  

   

    @Override

    public String toString() {

        return String.format("[%d, %d]", x, y) ;

    }

 

}

 

               

 

[실행결과]

Enter Operation String! addc

10 20 10

[[10, 20] 10 314]

Enter Operation String! addl

10 10 20 40

[[10, 10] [20, 40] 32]

Enter Operation String! list

[[[10, 20] 10 314], [[10, 10] [20, 40] 32]]

Enter Operation String! sorta

Enter Operation String! list

[[[10, 10] [20, 40] 32], [[10, 20] 10 314]]

Enter Operation String! clear

Enter Operation String! list

[]

Enter Operation String! addl

10 10 20 30

[[10, 10] [20, 30] 22]

Enter Operation String! addc

10 20 30

[[10, 20] 30 2827]

Enter Operation String! list

[[[10, 10] [20, 30] 22], [[10, 20] 30 2827]]

Enter Operation String! sortd

Enter Operation String! list

[[[10, 20] 30 2827], [[10, 10] [20, 30] 22]]

Enter Operation String! quit

Bye