200pt差し上げます。コード書いてくださいませんか?
javaでお願いします。
以下の試合結果テキストデータファイル(デスクトップにあるやつを指定)を読み取り、
優勝したチーム名を出力するプログラムを作成せよ。
先頭の行にチーム数が出力されており、
2行目からチーム名(チーム数分)、
それ以降の行に試合結果が出力されている。
試合に勝ったチームには勝ち点3が、引き分けたチームには
勝ち点1が与えられる。勝ち点の合計が最も多いチームが優勝となるが、
勝ち点の合計が同じチームが複数ある場合には、それらのうち、
得失点差(得点と失点の差)の合計が大きいチームが優勝となる。
得失点差の合計が同じ場合にはどちらを優勝としてもよい。
4
花組
星組
風組
月組
花組 3 1 星組
風組 3 0 月組
星組 2 2 風組
月組 3 0 花組
適当につくってみました。
package main; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.Map; public class Main { private static final String FILENAME = "game_data.txt"; public static void main(String[] args) { try { execute(); } catch (IOException e) { e.printStackTrace(); } } private static void execute() throws IOException { Map<String, Integer> pointMap = new HashMap<String, Integer>(); Map<String, Integer> diffMap = new HashMap<String, Integer>(); BufferedReader reader = new BufferedReader(new FileReader(FILENAME)); try { String line = reader.readLine(); int teamNum = Integer.parseInt(line); for (int i = 0; i < teamNum; i++) { String teamName = reader.readLine(); pointMap.put(teamName, 0); diffMap.put(teamName, 0); } while ((line = reader.readLine()) != null) { String[] data = line.split(" "); String team1 = data[0]; int goal1 = Integer.parseInt(data[1]); int goal2 = Integer.parseInt(data[2]); String team2 = data[3]; if (goal1 > goal2) { int team1Point = pointMap.get(team1); pointMap.put(team1, team1Point + 3); int team1diff = diffMap.get(team1); diffMap.put(team1, team1diff + (goal1 - goal2)); } else if (goal1 == goal2) { int team1Point = pointMap.get(team1); pointMap.put(team1, team1Point + 1); int team1diff = diffMap.get(team1); diffMap.put(team1, team1diff + (goal1 - goal2)); int team2Point = pointMap.get(team2); pointMap.put(team2, team2Point + 1); int team2diff = diffMap.get(team2); diffMap.put(team2, team2diff + (goal2 - goal1)); } else { int team2Point = pointMap.get(team2); pointMap.put(team2, team2Point + 3); int team2diff = diffMap.get(team2); diffMap.put(team2, team2diff + (goal2 - goal1)); } } } finally { reader.close(); } int maxPoint = Collections.max(pointMap.values()); Map<String, Integer> maxPointTeamDiff = new HashMap<String, Integer>(); for (String teamName : pointMap.keySet()) { int point = pointMap.get(teamName); if (point == maxPoint) { int diff = diffMap.get(teamName); maxPointTeamDiff.put(teamName, diff); } } int maxDiff = Collections.max(maxPointTeamDiff.values()); for (String teamName : maxPointTeamDiff.keySet()) { int diff = maxPointTeamDiff.get(teamName); if (diff == maxDiff) { System.out.println(teamName); break; } } } }
結果:
風組
「得失点差」というのが、勝ったときだけなのか負けたときにもつくのかよくわかりませんでした。
ちょこっと変えればいいだけのはなしなんですが。
適当につくってみました。
package main; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.Map; public class Main { private static final String FILENAME = "game_data.txt"; public static void main(String[] args) { try { execute(); } catch (IOException e) { e.printStackTrace(); } } private static void execute() throws IOException { Map<String, Integer> pointMap = new HashMap<String, Integer>(); Map<String, Integer> diffMap = new HashMap<String, Integer>(); BufferedReader reader = new BufferedReader(new FileReader(FILENAME)); try { String line = reader.readLine(); int teamNum = Integer.parseInt(line); for (int i = 0; i < teamNum; i++) { String teamName = reader.readLine(); pointMap.put(teamName, 0); diffMap.put(teamName, 0); } while ((line = reader.readLine()) != null) { String[] data = line.split(" "); String team1 = data[0]; int goal1 = Integer.parseInt(data[1]); int goal2 = Integer.parseInt(data[2]); String team2 = data[3]; if (goal1 > goal2) { int team1Point = pointMap.get(team1); pointMap.put(team1, team1Point + 3); int team1diff = diffMap.get(team1); diffMap.put(team1, team1diff + (goal1 - goal2)); } else if (goal1 == goal2) { int team1Point = pointMap.get(team1); pointMap.put(team1, team1Point + 1); int team1diff = diffMap.get(team1); diffMap.put(team1, team1diff + (goal1 - goal2)); int team2Point = pointMap.get(team2); pointMap.put(team2, team2Point + 1); int team2diff = diffMap.get(team2); diffMap.put(team2, team2diff + (goal2 - goal1)); } else { int team2Point = pointMap.get(team2); pointMap.put(team2, team2Point + 3); int team2diff = diffMap.get(team2); diffMap.put(team2, team2diff + (goal2 - goal1)); } } } finally { reader.close(); } int maxPoint = Collections.max(pointMap.values()); Map<String, Integer> maxPointTeamDiff = new HashMap<String, Integer>(); for (String teamName : pointMap.keySet()) { int point = pointMap.get(teamName); if (point == maxPoint) { int diff = diffMap.get(teamName); maxPointTeamDiff.put(teamName, diff); } } int maxDiff = Collections.max(maxPointTeamDiff.values()); for (String teamName : maxPointTeamDiff.keySet()) { int diff = maxPointTeamDiff.get(teamName); if (diff == maxDiff) { System.out.println(teamName); break; } } } }
結果:
風組
「得失点差」というのが、勝ったときだけなのか負けたときにもつくのかよくわかりませんでした。
ちょこっと変えればいいだけのはなしなんですが。
コメント(2件)
はてなのプログラム作成に対する考え方は以下です。
http://hatena.g.hatena.ne.jp/hatenasupport/20080526/1222929611
回答欄を利用して広く公開する形ならば「直接的に人物や物品を募る内容を発言する行為」には当たりません。