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 :
- 실행 결과 스크린샷
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));
}
}