1일 1커밋

(개인 공부일지) 9월 20일 화 자바의 정석 기초편 객체지향부터 복습

정현3 2022. 9. 20. 15:23

자바의 정석 기초편 6장 객체지향 프로그래밍의 연습문제들을 다시 풀어보았다

public class Java6_2 {
    public static void main(String[] args) {
        Student s = new Student("홍길동", 1, 1, 100, 60, 76);

        String student = s.info();
        System.out.println(student);
    }
}

class Student{
    String name;
    int ban;
    int no;
    int kor;
    int eng;
    int math;

    Student(String name, int ban, int no, int kor, int eng, int math) { //생성자
        this.name = name;
        this.ban = ban;
        this.no = no;
        this.kor = kor;
        this.eng = eng;
        this.math = math;
    }
    public String info() { //학생의 정보를 추가하는 info() 메서드
        return name
                + "," + ban
                + "," + no
                + "," + kor
                + "," + eng
                + "," + math
                + "," + (kor + eng + math)
                + "," + ((int) ((kor + eng + math) / 3f * 10 + 0.5f) / 10f);
    }
    //출력값 : 홍길동, 1, 1, 100, 60, 76, 236, 78.7
}
/**
 * Student 클래스에 두 개의 메서드 getTotal()과 getAverage()를 추가하시오
 * 출력값 - 이름: 홍길동 총점 : 236 평균 78.7
 */
public class Java6_3 {
    public static void main(String[] args) {
        Student2 s = new Student2();

        s.name = "홍길동";
        s.ban = 1;
        s.no = 1;
        s.kor = 100;
        s.eng = 60;
        s.math = 76;

        System.out.println("이름 : " + s.name);
        System.out.println("총점 : " + s.getTotal());
        System.out.println("평균 : " + s.getAverage());
    }
}

class Student2 {
    String name; //멤버변수
    int ban;
    int no;
    int kor;
    int eng;
    int math;

    Student2(){ //기본 생성자

    }
    Student2(String name, int ban, int no, int kor, int eng, int math) { //생성자
        this.name = name; //지역변수(매개변수)
        this.ban = ban;
        this.no = no;
        this.kor = kor;
        this.eng = eng;
        this.math = math;
    }
    int getTotal() { //총점을 구하는 메서드
        return kor + eng + math;
    }
    float getAverage() { //평균을 구하는 메서드
        return (int)(getTotal() / 3f * 10 + 0.5f) / 10f;
    }
    public String info() { //학생의 정보를 추가하는 info() 메서드
        return name
                + "," + ban
                + "," + no
                + "," + kor
                + "," + eng
                + "," + math
                + "," + (kor + eng + math)
                + "," + ((int) ((kor + eng + math) / 3f * 10 + 0.5f) / 10f); //소숫점 올림, int 형변환으로 인한 정수화
    }
}


/**
 * 메서드명 : shuffle
 * 기능 : 주어진 배열에 담긴 값의 위치를 바꾸는 작업을 반복하여 뒤섞이게 한다. 처리한 배열을 반환한다.
 * 반환타입 : int[]
 * 매개변수 : int[] arr - 정수값이 담긴 배열
 */
public class Java6_17 {
    //인스턴스 변수 존재x
    public static int[] shuffle(int[] arr) { //static 메서드 - 메서드 내에 외부 인스턴스변수 존재하지 않음, 매개변수(지역변수)로만 주입

        if(arr == null || arr.length == 0) { //유효성 체크 반환
            return arr;
        }
        for (int i = 0; i < arr.length; i++) {
            int k = (int) (Math.random() * arr.length); //int로 형변환

            int tmp = arr[i]; //arr[i]와 arr[k]의 값을 서로 바꾼다
            arr[i] = arr[k];
            arr[k] = tmp;
        }
        return arr;
    }

    public static void main(String[] args) {

        int[] original = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        System.out.println(java.util.Arrays.toString(original));

        int[] result = shuffle(original);
        System.out.println(java.util.Arrays.toString(result));
    }
}

/**
 * 정의된 메서드를 작성하고 테스트하시오
 * 메서드명 : isNumber
 * 기능 : 주어진 문자열이 모두 숫자로만 이루어져 있는지 확인한다. 모두 숫자로만 이루어져 있으면 true를 반환하고,
 *       그렇지 않으면 false를 반환한다.
 *       만일 주어진 문자열이 null이거나 빈 문자열 " " 이라면 false를 반환한다
 * 반환타입 : boolean
 * 매개변수 : String str - 검사할 문자열
 */
public class Java6_18 {
    public static boolean isNumber(String str) {

        if (str == null || str.equals("")) {
            return false;
        }
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i); //반복문을 통해 문자열에서 한 문자씩 차례대로 읽어와 char타입의 변수 ch에 저장한다

            if(ch < '0' || ch > '9'){ //읽어온 문자(ch)가 숫자가 아니면 false를 반환한다
                return false;
            }
        }
        return true; //boolean 반환값
    }

    public static void main(String[] args) {

        String str = "123"; //문자열
        System.out.println(str + "는 숫자입니까?" + isNumber(str));

        str = "1234o";
        System.out.println(str + "는 숫자입니까?" + isNumber(str));
    }
}
/**
 * 메서드명 : max
 * 기능 : 주어진 int 형 배열의 값 중에서 제일 큰 값을 반환한다
 *       만일 주어진 배열이 null 이거나 크기가 0인 경우, -999999를 반환한다
 * 반환타입 : int
 * 매개변수 : int[] arr - 최대값을 구할 배열
 */
public class Java6_20 {
    public static int max(int[] arr) {

        if (arr == null || arr.length == 0) { //유효성 체크 - null 이거나 크기가 0인 배열은 -999999를 반환한다
            return -999999;
        }
        int max = arr[0]; //배열의 첫 번째 값으로 최대값을 초기화 한다

        for (int i = 1; i<arr.length; i++) { //배열의 두 번째 값부터 비교한다
            if(arr[i] > max)
                max = arr[i];
            //최대값 max를 배열 1번째 값으로 초기화 했으므로 첫번쨰 값은 비교할 필요가 없다
            //arr[1]부터 비교하고 그 값이 max보다 크면 그 값을 변수 max에 저장한다
        }
        return max; //배열의 요소중 가장 큰 값 반환
    }

    public static void main(String[] args) {
        int[] data = {3, 2, 9, 4, 7};

        System.out.println(java.util.Arrays.toString(data)); // [3,2,9,4,7]

        System.out.println("최대값 : " + max(data)); //최대값 : 9
        System.out.println("최대값 : " + max(null)); //null -> -999999
        System.out.println("최대값 : " + max(new int[]{})); //크기가 0인 배열 -> -999999

    }
}
/**
 * 메서드명 : abs
 * 기능 : 주어진 값의 절대값을 반환한다
 * 반환타입 : int
 * 매개변수 : int value
 */
public class Java6_21 {

    public static int abs(int value) {
        return value >= 0 ? value : -value;

        /**
         * if(value >= 0) {
         *      return value;
         *   } else {
         *      return -value;
         *    }
         *  }
         */
    }

    public static void main(String[] args) {

        int value = 5;
        System.out.println(value + "의 절대값 : " + abs(value));
        value = -10;
        System.out.println(value + "의 절대값 : " + abs(value));
    }
}