たけるのプログラミング

作ったものとか、気ままにアップします。

「2020 NBA プレイオフ」のスタッツが落ちてたので、javaで遊んでみた。

今日はネットにオーランドのディズニーワールドで行われた「2020 nbaレイオフ」のスタッツが記されたExcelファイルが落ちていたので、


Javaでデータを取り出して、遊んでみたいと思います。


pythoncsvファイルの読み取りをやった記憶があったので、Javaでできるのか調べながらやってみました。


使用するExcelファイルは以下サイトからダウンロードすることができます。

www.nbastuffer.com

nbaファンにとって、選手のスタッツをみるだけでも楽しいものです。


完成したもの

平均得点と平均リバウンド、平均アシストを指定し、指定した成績以上のプレイヤーの名前とポジション、スタッツを出力するプログラム。

平均20得点10リバウンド0アシストを指定した例

f:id:takeru232423:20210117165153p:plain

平均15得点5リバウンド5アシストを指定した例

f:id:takeru232423:20210117165644p:plain

ソースコード

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)を使いました。

他のコードの説明については、コードにコメントを書いておきました。