人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

お仕事の依頼です。

200pt差し上げます。コード書いてくださいませんか?

javaでお願いします。
以下の試合結果テキストデータファイル(デスクトップにあるやつを指定)を読み取り、
優勝したチーム名を出力するプログラムを作成せよ。

先頭の行にチーム数が出力されており、
2行目からチーム名(チーム数分)、
それ以降の行に試合結果が出力されている。

試合に勝ったチームには勝ち点3が、引き分けたチームには
勝ち点1が与えられる。勝ち点の合計が最も多いチームが優勝となるが、
勝ち点の合計が同じチームが複数ある場合には、それらのうち、
得失点差(得点と失点の差)の合計が大きいチームが優勝となる。
得失点差の合計が同じ場合にはどちらを優勝としてもよい。




4
花組
星組
風組
月組
花組 3 1 星組
風組 3 0 月組
星組 2 2 風組
月組 3 0 花組

●質問者: 555525
●カテゴリ:コンピュータ
✍キーワード:Java PT お仕事 コード テキスト
○ 状態 :終了
└ 回答数 : 2/4件

▽最新の回答へ

1 ● deflation
●8ポイント

はてなでは、「直接的に人物や物品を募る内容を発言する行為」は禁じられています。

http://www.hatena.ne.jp/rule/rule


質問を撤回して下さい。


2 ● akagi_paon
●62ポイント ベストアンサー

適当につくってみました。

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;
}
}
}
}

結果:

風組

「得失点差」というのが、勝ったときだけなのか負けたときにもつくのかよくわかりませんでした。

ちょこっと変えればいいだけのはなしなんですが。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ