Lab4

Lab4 – ImageProcessorTest (Due by 5/7)
이미지 10장이상을 이용해서, resize/rotate/grayscale등 이미지 처리한다.
ImageProcessorTest

Lab4 프로젝트 디렉토리 안에 모든 파일(src/*.java & bin/*.class)와 보고서(3-4장정도 – 장수제한없음)를 넣고 Lab4_학번_이름.zip 압축한 후 e-learning(http://lms.dankook.ac.kr/index.jsp)으로 제출

ImageUtil 클래스 (resize, rotate, grayscale, blur, adjust)
UserInput 클래스 (getString, getInteger, getIntegerBetween, getImageMode, getConvertMode, getExitKey)
ConvertMode 열거형 (TO_JPG, TO_PNG, TO_GIF)
ImageMode 열거형 (CONVERT, RESIZE, ROTATE, GRAYSCALE, BLUR, BRIGHTNESS_ADJUST)
Photo 클래스 (load, toCompatibleImage, getFullPath, getImg, getWidth, getHeight, getFormat, getFullpathWithoutExt, print, toString, etc)

ImageProcessorTest 클래스의 process메소드에서는 Photo 클래스 객체를 사용하여 ImageMode에 따라 convert, resize, grayscale 등 각종 이미지 변환을 수행한다.

본인이 원하는 코드를 추가작성한다 (예를 들어, ImageUtil 클래스에 blur, adjust 메소드를 이용하여  ImageProcessorTest에서 사용 등등)

보고서의 내용은 기존 코드 분석과 이해한 내용 그리고 본인이 추가한 코드내용을 적는다.

Person Array – Instance vs Static

PersonTest-InstanceStatic – instance member field & method vs static member field & method

public class Person {
    String name; // instance member field
    int age; // instance member field
    
    public Person() { // default constructor
        this("JAVA17", 2017); // call Person(String n, int a);
    }

    public Person(String name, int age) { // constructor
        this.name = name;
        this.age = age;
    }

    public void setName(String name) { // instance method
        this.name = name;
    }

    public void setAge(int age) { // instance method
        this.age = age;
    }

    public String getName() { // instance method
        return name;
    }

    public int getAge() { // instance method
        return age;
    }

    public void print() { // instance method
        System.out.println("Person Name=" + name + " Age=" + age);
    }

    @Override
    public String toString() { // instance method
        return "Person Name=" + name + " Age=" + age;
    }
}

public class Person2 {
    static String name; // static member field
    static int age; // static member field

    public Person2() { // default constructor
        this("JAVA17", 2017); // call Person2(String n, int a);
    }

    public Person2(String n, int a) { // constructor
        name = n;
        age = a;
    }

    public static void setName(String n) { // static method
        name = n;
    }

    public static void setAge(int a) { // static method
        age = a;
    }

    public static String getName() { // static method
        return name;
    }

    public static int getAge() { // static method
        return age;
    }

    public static void print() { // static method에서는 this 사용 불가
        System.out.println("Person Name=" + name + " Age=" + age);
    }

    @Override
    public String toString() {
        return "Person Name=" + name + " Age=" + age; // instance method에서는 static member variable 접근 가능
    }
}

public class Person3 {
    static String name; // static member field
    static int age; // static member field

    private Person3() { // private default constructor
    }

    public static void setName(String n) { // static method
        name = n;
    }

    public static void setAge(int a) { // static method
        age = a;
    }

    public static String getName() { // static method
        return name;
    }

    public static int getAge() { // static method
        return age;
    }

    public static void print() { // static method에서는 this 사용 불가
        System.out.println("Person Name=" + name + " Age=" + age);
    }
}

public class PersonTest {
    static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        Person[] pArray = new Person[3]; // 만약 Person 객체를 하나만 생성한 후 for문에서 공유해 사용할 경우  // 마지막으로 입력된 데이터로 모든 데이터값이 치환됨 Person p = new Person(); 
        for (int i = 0; i < 3; i++) {
            System.out.print("\n\nEnter Person name and age : ");
            p.setName(input.next()); // 입력정보
            p.setAge(input.nextInt()); // 입력정보
            p.Print(); 
            pArray[i] = p; //배열에 들어간 모든 원소는 동일한 p
        }
        System.out.println("pArray : " + Arrays.toString(pArray)); 

        Person[] pArray1 = new Person[3]; // 아래와 같이 for문 안에 Person p = new Person()와같이 // 새로운 객체를 생성해야 각자 다르게 입력된 정보가 들어가게 됨 
        for (int i = 0; i < 3; i++) {
            Person p1 = new Person(); 
            System.out.print("\n\nEnter Person name and age : ");
            p1.setName(input.next()); // 입력정보
            p1.setAge(input.nextInt()); // 입력정보
            p1.Print();
            pArray1[i] = p1; // p1는 새로운 Person객체이므로 배열에서 각각 다른 원소가 들어간다  
        } 
        System.out.println("pArray1 : " + Arrays.toString(pArray1)); 

        // 만약 Person2 객체의 name과 age는 static이라서,  
        // static은 공유하는 것이므로, 마지막으로 입력된 데이터로 모든 데이터값이 치환됨 
        Person2[] pArray2 = new Person2[3]; 
        for (int i = 0; i < 3; i++) {  
            Person2 p2 = new Person2(); 
            System.out.print("\n\nEnter Person name and age : ");
            p2.setName(input.next()); // Person2.setName(input.next())와 동일
            p2.setAge(input.nextInt()); // Person2.setAge(input.nextInt())와 동일
            pArray2[i] = p2; // p2 객체의 name과 age는 static이므로 모두 공유하기때문에, 배열의 모든 원소는 마지막에 들어간 정보로 셋팅
        }
        System.out.println("pArray2 : " + Arrays.toString(pArray2));
 
        Person3[] pArray3 = new Person3[3]; // Person3 타입의 배열생성 OK 
        for (int i = 0; i < 3; i++) {  
            //Person3 p3 = new Person3(); // error Person3() has private access 
            System.out.print("\n\nEnter Person name and age : ");
            Person3.setName(input.next()); // p3.setName(input.next()) 사용을 못하게 함
            Person3.setAge(input.nextInt()); // p3.setAge(input.nextInt()) 사용을 못하게 함
            //pArray3[i] = p3; // error p3 객체를 생성할 수 없으므로 사용 불가능  
        } 
        Person3.print();

Lab3

Lab3 – ImageManipulatorTest (Due by 4/16)
이미지 5장을 이용해서, print/convert/resize등을 각종 이미지 변환을 수행한다.

Lab3 프로젝트 디렉토리 안에 모든 파일(src/*.java & bin/*.class)와 보고서(3-4장정도 – 장수제한없음)를 넣고 Lab3_학번_이름.zip 압축한 후 e-learning(http://lms.dankook.ac.kr/index.jsp)으로 제출

0 – ImageUtil (print, convert, resize, grayscale)

1 – enum ConvertMode (TO_JPG, TO_PNG, TO_GIF), ImageMode (PRINT, CONVERT, RESIZE)

2 – UserInput (getString, getInteger, getIntegerBetween, getImageMode, getConvertMode, getExitKey)

3 – ImageManipulatorTest (manipulate, print, convert, resize)

4 – array (String[] filenames), command line arguments, for, do-while(using UserInput), if/else, foreach, method (사용자 입력을 받아서 선택해서 각종 이미지 변환을 수행한다)

5 – 본인이 원하는 코드를 추가작성한다 (예를 들어, ImageUtil 클래스에 grayscale 메소드를 이용하여  ImageManipulatorTest에서 사용 등등)

1,2,3,4,5에 해당하는 부분을 /* 주석문 */으로 표시해준다.

보고서의 내용은 기존 코드 분석과 이해한 내용 그리고 본인이 추가한 코드내용을 적는다.

Java swap pass-by-value

static void swap(int p, int q) // Java uses pass-by-value
{
int t = p;
p = q;
q = t;
}

static void swap2(int[] p, int[] q) // Java uses pass-by-value
{
int t = p[0];
p[0] = q[0];
q[0] = t;
}

static void swap(int[] p, int[] q) // Java uses pass-by-value
{
int[] t = p;
p = q;
q = t;
}

static void swap2(int[][] p, int[][] q) // Java uses pass-by-value
{
int[] t = p[0];
p[0] = q[0];
q[0] = t;
}

static void swap(Point p, Point q) // Java uses pass-by-value
{
Point t = p;
p = q;
q = t;
}

static void swap2(Point p, Point q) // Java uses pass-by-value
{
double[] t = p.get(); // T t = p
p.set(q.get()); // p = q
q.set(t); // q = t
}

////////////////////////////////////////

public static void main(String[] args)
{
Point p1 = new Point(10.5, 10.7);
Point p2 = new Point(1.5, 1.7);

swap(p1, p2);
System.out.println(“After swap p1=” + p1 + ” p2 ” + p2); // p1=(10.5, 10.7) p2=(1.5, 1.7)
swap2(p1, p2);
System.out.println(“After swap2 p1=” + p1 + ” p2 ” + p2); // p1=(1.5, 1.7) p2=(10.5, 10.7)

int[] arr1 = { 1, 2, 3 };
int[] arr2 = { 4, 5, 6, 7, 8 };
swap(arr1, arr2);
System.out.print(“arr1: “);
System.out.println(Arrays.toString(arr1)); // arr1: [1, 2, 3]
System.out.print(“arr2: “);
System.out.println(Arrays.toString(arr2)); // arr2: [4, 5, 6, 7, 8]

int[][] array1 = { new int[] { 1, 2, 3 } };
int[][] array2 = { new int[] { 4, 5, 6, 7, 8 } };
swap2(array1, array2);
System.out.print(“array1: “);
System.out.println(Arrays.toString(array1[0])); // array1: [4, 5, 6, 7, 8]
System.out.print(“array2: “);
System.out.println(Arrays.toString(array2[0])); // array2: [1, 2, 3]

int a = 10;
int b = 20;
swap(a, b);
System.out.println(“a=” + a); // a=10
System.out.println(“b=” + b); // b=20

int[] a2 = { 10 };
int[] b2 = { 20 };
swap2(a2, b2);
System.out.println(“a2=” + a2[0]); // a2 = 20
System.out.println(“b2=” + b2[0]); // b2 = 10
}