お仕事の依頼です。


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

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

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

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




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

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:
  • 終了:2010/09/20 18:41:45
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:akagi_paon No.2

回答回数143ベストアンサー獲得回数13

ポイント62pt

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

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

結果:

風組

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

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

その他の回答3件)

id:deflation No.1

回答回数1036ベストアンサー獲得回数126

ポイント8pt

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

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


質問を撤回して下さい。

id:akagi_paon No.2

回答回数143ベストアンサー獲得回数13ここでベストアンサー

ポイント62pt

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

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

結果:

風組

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

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

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 mkonoml 43 11 0 2010-09-20 02:02:43
2 mkonml 47 8 0 2010-09-20 02:09:17
  • id:yayaya1130
    すいませんでした。返信ありがとうございます
  • id:SALINGER
    >deflationさん、yayaya1130さん
    はてなのプログラム作成に対する考え方は以下です。
    http://hatena.g.hatena.ne.jp/hatenasupport/20080526/1222929611
    回答欄を利用して広く公開する形ならば「直接的に人物や物品を募る内容を発言する行為」には当たりません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません