거래대금을 기준으로 한 데이터 비교

sun·2022년 7월 13일
0

Java_task

목록 보기
2/2
post-thumbnail

Project :
Maven Project 로 진행하시오.

Dependency :
1. groupId : org.json, artifactId : json, version : 20211205
2. groupId : com.squareup.okhttp3, artifactId : okhttp, version : 4.9.0

Task :
1. 첨부 파일의 Main.java 를 소스 폴더에 복사하고 실행하시오.
2. sorted_coins 객체를 이용하여 변수 format, key, mid 에 차례로 출력 형식, 거래 대금이 중간값인 코인의 이름, 거래 대금을 대입하시오.
3. 대입한 mid 값과 최소 거래대금, 최대 거래대금의 차이를 출력하시오.

  • 거래 대금의 key 는 "acc_trade_value_24H" 이다.
  • 출력 형식은 "코인 이름 -> 거래 대금" 이며, 거래대금은 쉼표를 포함하여 소수 두 자리까지 출력하시오.
  • 거래대금의 차이는 최소, 최대 거래 대금의 코인 이름과 거래 대금을 포함하여 출력하시오.

    Report :
  1. 실행 결과 스크린샷
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class Main {

	public static void main(String[] args) throws IOException {

		// 설명은 생략한다.
		OkHttpClient client = new OkHttpClient();

		Request request = new Request.Builder()
				.url("https://api.bithumb.com/public/ticker/ALL_KRW")
				.get()
				.addHeader("Accept", "application/json")
				.build();

		Response response = client.newCall(request).execute();
		JSONObject result = new JSONObject(response.body().string());

		// 코인 데이터를 조회한다. 
		JSONObject coins = result.getJSONObject("data");

		// data에 존재하는 date는 코인 정보가 아니므로 제외한다.
		coins.remove("date");

		// JSONArray의 정보를 삽입할 리스트를 선언한다.
		List<JSONObject> coinList = new ArrayList<JSONObject>();

		// 정렬을 위해 JSONArray에 담긴 정보를 모두 리스트에 담는다.
		for(String key : coins.keySet())

			// 리스트에 담으면 key가 사라지므로, put("key", key)로 코인 이름을 넣어준다.
			coinList.add(coins.getJSONObject(key).put("key", key));

		// 윗 줄을 주석 처리, 아랫 줄을 주석 해제하면 코인 이름이 없어진다.
		// coinList.add(coins.getJSONObject(key);

		// 거래대금 순으로 정렬한다.
		// Collections.sort(데이터가 담긴 리스트, new Comparator<리스트에 담긴 데이터의 형식>())
		Collections.sort(coinList, new Comparator<JSONObject>() {

			// acc_trade_value_24H는 최근 24시간 동안의 거래대금이다.
			String key = "acc_trade_value_24H";

			// Collections 클래스가 보유한 함수이므로 오버라이드 어노테이션을 붙여준다.
			@Override
			public int compare(JSONObject o1, JSONObject o2) {

				// * JSONObject는 getString 뿐만 아니라 getDouble 같이 형식을 지정하여 값을 받을 수 있다. *
				return Double.compare(o1.getDouble(key), o2.getDouble(key));
			}
		});

		JSONArray sorted_coins = new JSONArray();

		for(JSONObject coin : coinList)

			sorted_coins.put(coin);

		// 출력한다.
		System.out.println(sorted_coins.toString(4));

		String money = "acc_trade_value_24H";
		
		String [] format = {"lower", "mid", "high"};
		String key = sorted_coins.getJSONObject(0).getString("key").toString();
		String mid_key = sorted_coins.getJSONObject(coins.keySet().size()/2).getString("key").toString();
		String high_key = sorted_coins.getJSONObject(coins.keySet().size()-1).getString("key").toString();
		
		double first = sorted_coins.getJSONObject(0).getDouble(money);
		double mid = sorted_coins.getJSONObject(coins.keySet().size()/2).getDouble(money);
		double high = sorted_coins.getJSONObject(coins.keySet().size()-1).getDouble(money);
		
		System.out.println(String.format("%-5s : %s | %,-20.2f, %,.2f", format[0],key,first,mid-first));
		System.out.println(String.format("%-5s : %s | %,-20.2f", format[1],mid_key,mid));
		System.out.println(String.format("%-5s : %s | %,-20.2f, %,.2f", format[2],high_key,high,high-mid));
		

	}

}

profile
World CHange

0개의 댓글

관련 채용 정보