Git Product home page Git Product logo

distancesort.java's Introduction

DistanceSort.java

학교 자료구조 수업 프로젝트 - 경도, 위도, 카테고리 기반 거리 정렬


코드 구조

├──
├── data             # 해당 프로젝트에서 다루는 데이터들의 구조를 담고 있습니다.
├── enums            # 시설 종류와 지도 범례를 정의하고 있습니다.
├── services         # 시설 종류와 지도 범례를 정의하고 있습니다.
├── store            # 지도 정보를 저장하기 위한 코드가 담겨있습니다.
├── ColorCode.java   # 콘솔에 색깔을 표시하기 위한 색깔코드가 담겨있습니다.
└── MapSort.java     # 프로젝트의 메인 코드입니다.

Data package

PlaceData

각 장소별 정보 (종류, 위도, 경도)를 담고 있는 클래스입니다.

getDistance() 메소드를 통해 다른 장소끼리의 거리를 구할 수 있습니다.

PlaceDistance

장소별 정보와 함께 거리를 담고 있는 클래스입니다.

distance 변수에 내 위치와의 거리를 담고 있으며 getDistanceToOther()을 통해 거리를 가져올 수 있습니다.

compareTo() 메소드를 이용해 정렬 시 거리 비교를 할 수 있습니다.

Services Package

Distance

내 위치를 기준으로 거리를 구하는 클래스입니다.

PlaceData 클래스를 통해 만들어진 내 위치가 주어지면, MapInfo에 저장한 시설 정보를 가져와 각각의 거리를 구합니다.

SortPlace

버블 정렬을 이용하여 주어진 거리를 정렬하는 클래스입니다.

모든 시설의 거리를 담은 List<PlaceDistance> 데이터가 주어지면 버블 정렬을 이용하여 정렬합니다.

Graph

거리를 지도로 표시하기 위해 전처리 및 출력을 담당하는 클래스입니다.

graph 배열을 만들어 배열 자료구조를 이용하여 지도를 만듭니다.

preprocessGraphData() 메소드를 통해 시설의 거리가 들어오면 가장 가까운 곳을 표시해줍니다.

가장 가까운 곳은 MapType enum에 정의된 것에 따라 표시합니다.

getMark() 메소드를 통해 범례 표시를 위해 지도에 저장한 int 값을 이용하여 사람이 볼 수 있는 값을 가져옵니다.

MapType enum에 정의한 것에 따라 기호를 표기하며 색깔 표시를 위해 ColorCode 클래스를 이용합니다.

MapSort class (Main)

시설 정보 등록

static block을 이용해 처음 클래스가 만들어질 때 시설 정보를 등록합니다.

입력 받기

유저 입력을 받기 위해 UserInput 클래스를 이용합니다.

이 때, enum에 없는 값을 가져오기 위해 시도하면 IllegalArgumentException 오류를 반환합니다.

이를 이용하여 입력에 대한 유효성 검사를 진행합니다.

내 위치 생성, 거리 구하기

PlaceData 클래스를 이용해 내 위치를 만듭니다.

Graph 클래스 생성 시 만든 척도를 이용하여 내 위치를 지도의 좌표계로 변환합니다.

setMark() 메소드를 통해 지도의 범례를 설정할 수 있는데, 내 위치를 [MapType.MY](http://maptype.MY) 값으로 설정합니다.

거리 데이터 가공

내 위치를 기준으로 모든 장소의 거리를 구해 list 변수에 저장하고 원하는 카테고리만 표시하기 위해 filter() 메소드를 통해 걸러줍니다.

필터 작업 이후 Stream형으로 나오기 때문에 collect() 메소드를 통해 원래 사용하던 자료구조인 List으로 변경합니다.

정렬 및 결과 출력

SortPlace 클래스에 만든 버블 정렬을 이용하여 정렬 수행 후 sortedList 변수에 결과를 저장합니다.

정렬 알고리즘에 따라 첫번째 값은 가장 가까운 시설이므로 첫번째 값(get(0) )을 가져와 출력해줍니다.

Graph 클래스에서 만든 전처리 과정 수행 후 지도를 출력해줍니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.