「2020 NBA プレイオフ」のスタッツが落ちてたので、javaで遊んでみた。
今日はネットにオーランドのディズニーワールドで行われた「2020 nba プレイオフ」のスタッツが記されたExcelファイルが落ちていたので、
Javaでデータを取り出して、遊んでみたいと思います。
昔pythonでcsvファイルの読み取りをやった記憶があったので、Javaでできるのか調べながらやってみました。
使用するExcelファイルは以下サイトからダウンロードすることができます。
nbaファンにとって、選手のスタッツをみるだけでも楽しいものです。
完成したもの
平均得点と平均リバウンド、平均アシストを指定し、指定した成績以上のプレイヤーの名前とポジション、スタッツを出力するプログラム。
平均20得点10リバウンド0アシストを指定した例
平均15得点5リバウンド5アシストを指定した例
ソースコード
package nba_app1; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.List; public class nba_app { public static void main(String[] args) { int count =0; BufferedReader br = null; List<nbaplayer> list = new ArrayList<>(); //nbaplayer型のリストを宣言 String file_name = "2019-2020_stats.csv"; // 入力ファイルの指定 try { File file = new File(file_name); //javaでファイルを扱うために、引数にファイル名を指定し、Fileオブジェクトを生成 br = new BufferedReader(new FileReader(file)); //javaでファイルからデータを読み取るために、引数にFileオブジェクトを指定し、BufferedReaderオブジェクトを生成 String line; String[] data; while ((line = br.readLine()) != null) { //readLine()メソッドを使い、一行ずつデータを取得 count++; data = line.split(","); if(count>=3) { //-------------以下のprintはテストコードとして使用しました----------------- //System.out.print(data[1]);//名前出力 //System.out.print(" "+data[3]);//ポジション 出力 //System.out.print(" "+data[18]);//平均得点 出力 //System.out.print(" "+data[19]);//平均リバウンド 出力 //System.out.print(" "+data[21]);//平均アシスト 出力 //System.out.println(); list.add(new nbaplayer(data[1],data[3],data[18],data[19],data[21])); } } nbaplayer.serch_player(list, 15, 5, 5);//nbaプレイヤー検索メソッド } catch (Exception e) { System.out.println(e.getMessage()); } finally { try { br.close(); } catch (Exception e) { System.out.println(e.getMessage()); } } } } class nbaplayer{ String name; String position; String PPG; String RPG; String APG; public nbaplayer(String name,String position,String PPG,String RPG,String APG) { this.name=name; this.position=position; this.PPG=PPG; this.RPG=RPG; this.APG=APG; } public static void serch_player(List<nbaplayer> list,double PPG,double RPG,double APG) { for(nbaplayer n:list) { double p = Double.parseDouble(n.PPG); double r = Double.parseDouble(n.RPG); double a = Double.parseDouble(n.APG); if(p>=PPG&&r>=RPG&&a>=APG) { System.out.print(n.name);//名前出力 System.out.print(" "+n.position);//ポジション 出力 System.out.print(" "+n.PPG);//平均得点 出力 System.out.print(" "+n.RPG);//平均リバウンド 出力 System.out.print(" "+n.APG);//平均アシスト 出力 System.out.println(); } } } }
ソースコードの説明
コードについて、簡単に流れを説明すると、指定ファイルから名前、ポジション、平均得点、平均アシスト、平均リバウンドのデータを抜き出し、
それらのデータを使ってnbaplayerオブジェクトを生成。そしてnbaplayer型リストを作り、nbaplayerオブジェクトを入れていき、
そのリストを利用して、nbaプレイヤーを検索するという流れです。
以下ポイントとなるコードを説明します。
while ((line = br.readLine()) != null) { //readLine()メソッドを使い、一行ずつデータを取得 count++; data = line.split(","); if(count>=3) { //-------------以下のprintはテストコードとして使用しました----------------- //System.out.print(data[1]);//名前出力 //System.out.print(" "+data[3]);//ポジション 出力 //System.out.print(" "+data[18]);//平均得点 出力 //System.out.print(" "+data[19]);//平均リバウンド 出力 //System.out.print(" "+data[21]);//平均アシスト 出力 //System.out.println(); list.add(new nbaplayer(data[1],data[3],data[18],data[19],data[21])); } }
使うExcelファイルについて、1行目と2行目はこのプログラムを作る上で必要ないので、count++とif(count>=3)を使いました。
他のコードの説明については、コードにコメントを書いておきました。