반응형

https://gist.github.com/parkground/019cb38b83bab7b85ebe8ab3cbf4f8a8

 

[Zero-base] 3주차 과제 (CoordinateCompare.java)

[Zero-base] 3주차 과제 (CoordinateCompare.java). GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

 

 


/* CoordinateCompare.java */

import java.util.Scanner;

public class CoordinateCompare {

    /* 나의 좌표 저장 변수 선언 */
    static int myX, myY;

    /* 입력 좌표 저장 배열 선언 */
    static int[] inputX = new int[10];
    static int[] inputY = new int[10];

    /* 배열의 인덱스 접근을 위한 변수 선언 */
    static int index;

    /* 입력 좌표 임시 저장 변수 선언 */
    static int tempX, tempY;

    /* x, y 각 좌표 간 거리를 저장하는 배열 선언 */
    static double[] dX = new double[10];
    static double[] dY = new double[10];

    /* 대각선 거리를 저장하는 배열 */
    static double[] score = new double[10];


    public static void main(String[] args) {

        /* 나의 좌표를 입력 받는 함수 호출 */
        MyCoordinate();

        /* 임의의 좌표 값을 입력 받는 함수 호출 */
        InputCoordinate();

        /* 좌표별 거리 계산하는 함수 호출 */
        CalculateDistance();

//Test printing
        //각 좌표별 거리값 출력
        for (int i = 0; i < score.length; i++) {
            System.out.printf("(" + inputX[i] + ", " + inputY[i] + ") => " + score[i] +"\n");
        }

        /* 가장 작은 값을 찾아서 출력하는 함수 호출 */
        SelectCoordinate();
    }

    /* 나의 좌표를 입력 받는 메소드 */
    public static void MyCoordinate() {
        Scanner scanner = new Scanner(System.in);

        //나의 x좌표 입력
        System.out.printf("나의 좌표 x값을 입력해주세요:");
        myX = scanner.nextInt();
       
        //나의 y좌표 입력
        System.out.printf("나의 좌표 y값을 입력해주세요:");
        myY = scanner.nextInt();

        //입력된 나의 좌표 출력
        System.out.println("나의 좌표 : (" + myX + ", " + myY + ")");
    }

    /* 임의의 좌표 값을 입력 받는 메소드 */
    public static void InputCoordinate() {
        Scanner scanner = new Scanner(System.in);

        //첫번째(0)부터 열번째(9)까지 좌표 입력을 위한 반복문
        for (index = 0; index < 10; index++) {

            //첫번째 좌표 입력이 아닌 경우
            if (index != 0) {

                //입력 값을 비교하여 중복이 아닌 경우 저장하는 함수 호출
                InputCompare();
            }

            //첫번째 좌표 입력인 경우
            else if (index == 0) {

                //첫번째 x좌표 입력
                System.out.printf("1번째 좌표 x값을 입력해주세요: ");
                inputX[0] = scanner.nextInt();

                //첫번째 y좌표 입력
                System.out.printf("1번째 좌표 y값을 입력해주세요: ");
                inputY[0] = scanner.nextInt();

//Test printing
                //입력받은 첫번째 좌표 값을 출력
                System.out.printf("1번째 좌표 : (" + inputX[0] + ", " + inputY[0] + ") \n");
            }
        }

        //입력된 좌표 10개 출력
        System.out.printf("입력된 좌표 : ");
        for (int i = 0; i < 9; i++) {
            System.out.printf("(" + inputX[i] + ", " + inputY[i] + "), ");
        }
        System.out.printf("(" + inputX[9] + ", " + inputY[9] + ")\n");
    }

    /* 입력 값을 비교하는 메소드 */
    public static void InputCompare() {
        Scanner scanner = new Scanner(System.in);

        //n번째 x좌표 입력받아 임시 변수에 저장
        System.out.printf((index + 1) + "번째 좌표 x값을 입력해주세요: ");
        tempX = scanner.nextInt();

        //n번째 y좌표 입력받아 임시 변수에 저장
        System.out.printf((index + 1) + "번째 좌표 y값을 입력해주세요: ");
        tempY = scanner.nextInt();

        //이전 입력값들과 비교하여 중복값을 찾는 반복문
        for (int i = index; i >= 0; i--) {
            if ((tempX == inputX[i]) && (tempY == inputY[i])) {
                System.out.println("동일한 좌표값이 이미 존재합니다. 다시 입력해 주세요.");
                index--;
                break;
            }
           
            //중복값이 없는 경우 입력된 임시 변수 값을 좌표 값 배열에 저장
            inputX[index] = tempX;
            inputY[index] = tempY;
        }
//Test printing
        //현재 입력받은 좌표 값을 출력
        System.out.printf((index + 1) + "번째 좌표 : (" + inputX[index] + ", " + inputY[index] + ") \n");
    }

    /* 좌표별 거리 계산하는 메소드 */
    public static void CalculateDistance() {

        //반목문을 이용하여 개별 좌표간의 거리를 계산
        for (int i = 0; i < 10; i++) {
            dX[i] = (double) (myX - inputX[i]);
            dY[i] = (double) (myY - inputY[i]);

            //피라고라스 정리를 이용하여 각 좌표별 대각선 거리측정
            score[i] = Math.sqrt((dX[i] * dX[i]) + (dY[i] * dY[i]));
        }
    }

    /* 가장 작은 값을 찾는 메소드 */
    public static void SelectCoordinate() {

        //최소값을 찾기 위한 변수 선언
        double min = score[0];

        //찾은 최소값의 인덱스를 확인하기 위한 변수 선언
        int minIndex = 0;

        //반복문을 사용하여서 최소값과 해당하는 인덱스를 찾음
        for (int i = 0; i < score.length; i++) {
            if (min > score[i]) {
                min = score[i];
                minIndex = i;
            }
        }

        //나와 가장 가까운 좌표값 출력
        System.out.printf("제일 가까운 좌표값 :\n(" + inputX[minIndex] + ", " + inputY[minIndex] + ") => " + score[minIndex] + "\n");
    }
}

반응형

+ Recent posts