멋쟁이 사자처럼 2기 150일간의 기록

백엔드 스쿨 자바 4일차 미션

정현3 2022. 9. 23. 16:09

1. 다차원 배열 문제

package Mission;
import java.util.Scanner;
/**
 * 문자형 2차원 배열 5행 5열을 만들고 행과 열을 입력 받아 해당 좌표의 값을 'X'로 변환해 2차원 배열을 출력하시오
 * 또한 계속해서 반복 실행하도록 구현하고 행이나 열 입력시 0 미만 5 이상의 수가 입력되면 프로그램을 종료하시오.
 */
public class Mission5 {

    //1. 클래스 내의 멤버들이 접근 가능한 멤버변수 배열 char[][] arrayBoard 를 선언한다.
    char[][] board;

    //2. 모든 항목이 '0'으로 초기화 된 배열을 만든다.
    //   매겨변수의 배열 크기를 전달받아 그 크기만큼 배열을 만들것이다.
    char[][] makeBoard(int value) {

        //유효성 검사 - 0이하의 수가 들어왔을 때, 다시 입력을 받음
        do {
            if (value <= 0) {
                System.out.println("1이상의 수를 입력해주세요.");
            } else {
                //배열의 크기가 1이상으로 정상적으로 입력되었으면 do-while문 벗어남
                break;
            }
        } while (value <= 0); //0보다 작을경우 do-while문이 계속 실행된다

        board = new char[value][value];

        /**
         String[][] arrayBoard = {

         {" ", " ", " ", " ", " "},
         {" ", " ", " ", " ", " "},
         {" ", " ", " ", " ", " "},
         {" ", " ", " ", " ", " "},
         {" ", " ", " ", " ", " "},
         };
         */
        for (int i = 0; i < value; i++) {
            for (int k = 0; k < value; k++) {
                board[i][k] = '0';
            }
        }
        return board;
    }

    //3. 배열의 결과를 출력하는 메서드를 만들었다
    void showArray(char[][] a) {
        for(char[] col : a) {
            for (char tmp : col) {
                System.out.print(tmp + "");
            }
            System.out.println();
        }
    }
    //4. 인수를 전달받아 해당 위치의 배열요소를 X로 바꾼다
    char[][] markBoard(int x, int y) {

        board[x - 1][y - 1] = 'X';
        return board;
    }

    //5. 5 x 5 배열을 만든다. 콘솔에서 좌표값을 받아 표시한다
    public static void main(String[] args) {

        Mission5 point = new Mission5();

        point.board = point.makeBoard(5);

        point.showArray(point.board);

        System.out.println("원하는 위치의 좌표를 입력하시오.");
        Scanner scanner = new Scanner(System.in);

        System.out.println("X : ");
        int x = scanner.nextInt();
        System.out.println("Y : ");
        int y = scanner.nextInt();

        scanner.close();

        point.showArray(point.markBoard(x, y));
    }
}

2. 다차원 배열 - 메인 메서드 하나로

package Mission;
import java.util.Scanner;
/**
 * 문자형 2차원 배열 5행 5열을 만들고 행과 열을 입력 받아 해당 좌표의 값을 'X'로 변환해 2차원 배열을 출력하시오
 * 또한 계속해서 반복 실행하도록 구현하고 행이나 열 입력시 0 미만 5 이상의 수가 입력되면 프로그램을 종료하시오.
 */

public class Mission5_2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[][] arr = new String[5][5];
        int row;
        int column;

        for (int i = 0; i < arr.length; i++){
            for (int j = 0; j < arr[0].length; j++)
                arr[i][j] = " ";
        }

        while (true){
            System.out.println("행 인덱스 입력 >> ");
            row = sc.nextInt();
            System.out.println("열 인덱스 입력 >> ");
            column = sc.nextInt();

            if (row > 0 && row < 6 && column > 0 && column <6) {
                arr[row][column] = "X";

                System.out.println("  0 1 2 3 4 ");
                for (int i = 0; i < arr.length; i++) {
                    System.out.print(i + " ");
                    for (int j = 0; j < arr[0].length; j++) {
                        System.out.print(arr[i][j] + " ");
                    }
                    System.out.println();
                }
            }else {
                System.out.println("프로그램을 종료합니다.");
                break;
            }
        }
    }
}

1. 다차원 배열 - try catch문

package Mission;
import java.util.Scanner;
/**
 * 문자형 2차원 배열 5행 5열을 만들고 행과 열을 입력 받아 해당 좌표의 값을 'X'로 변환해 2차원 배열을 출력하시오
 * 또한 계속해서 반복 실행하도록 구현하고 행이나 열 입력시 0 미만 5 이상의 수가 입력되면 프로그램을 종료하시오.
 */
public class Mission5_3 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.println("배열 크기를 입력하세요. >> ");

        int size;
        int row; //행
        int col; //열

        do {
            size = scanner.nextInt(); //배열의 크기를 입력받음
            if (size <= 0) {
                System.out.println("1 이상의 수를 입력해주세요."); //0 이하의 수가 들어왔을 때, 다시 입력을 받음
            } else {
                break; //배열의 크기가 1이상, 즉 정상적으로 입력되었으면, do-while 문을 벗어남
            }
        } while (size <= 0); //배열의 크기가 0보다 작을경우 Loop가 계속 돌아가게 한다.

        char[][] array = new char[size][size]; //'X'를 입력받아야 하기 때문에, char배열로 생성하였다

        while (true) {

            //try-catch문을 사용할 경우 정수값이 input되지 않을경우 에러 발생없이 프로그램이 종료된다
            //'X'를 표시할 행과 열을 입력받음
            try {
                System.out.println("행 인덱스를 입력하세요. (0 ~ " + (size - 1) + ") 입력 >> ");
                row = scanner.nextInt();
                System.out.println("열 인덱스를 입력하세요. (0 ~ " + (size - 1) + ") 입력 >> ");
                col = scanner.nextInt();
            } catch (Exception e) {
                System.out.println("숫자만 입력하셔야 됩니다. 프로그램을 종료합니다. ");
                break;
            }
            //인덱스 값에 포함되지 않는 값이 들어올 경우 프로그램 종료
            if (array[row][col] != 'X') {
                array[row][col] = 'X';
            } else {
                System.out.println();
                System.out.println(" 이미 입력하셨습니다. ");
                System.out.println();
            }
            System.out.print(" ");

            for (int i = 0; i < size; i++) {
                System.out.print(i + " ");
                System.out.println();
                for (int k = 0; k < array.length; k++) {
                    System.out.print(array[i][k] + " ");
                }
                System.out.println();
            }
        }
    }
}

2. Rectangle

package Mission;

/**
 * int 타입의 x, y, width, height 필드 : 사각형을 구성하는 점과 크기 정보
 * x, y, width, height 값을 매개변수로 받아 필드를 초기화하는 생성자
 * -> (2, 2)에서 크기가 8x7인 사각형 : s의 면적은 36, t는 r을 포함합니다
 */

public class Rectangle {

    int x;
    int y;
    int width;
    int height;

    //x, y, width, height 값을 매개변수로 받아 필드를 초기화하는 생성자
    int Rectangle(int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }
    //사각형 넓이 리턴
    int square() {

    }
    //사각형의 좌표와 넓이를 화면에 출력
    void show() {

    }
    //매개변수로 받은 r이 현 사각형 안에 있으면 true 리턴
    boolean contains(Rectangle r) {

    }

    public static void main(String[] args) {

        Rectangle r = new Rectangle(2, 2, 8, 7);
        Rectangle s = new Rectangle(5, 5, 6, 6);
        Rectangle t = new Rectangle(1, 1, 10, 10);

        r.show();

        System.out.println("s의 면적은" + s.square());
        if(t.contains(r)) {
            System.out.println("t는 r을 포함합니다");
        }
        if(t.contains(s)) {
            System.out.println("t는 s를 포함합니다");
        }
    }
}