2016-11-30 8 views
-2

私はサッカーリーグを管理しなければなりません。プログラムにインポートする必要のあるサッカーリーグ(テキストファイル)があります。インポートされたファイルの各行には、1つのゲームの結果が表示されます。一緒にファイルを読み込み、ファイル内のレコードから勝敗チャートを計算する方法は?

ピーター4タイガー3

スカイ2ピーター0

タイガー1スカイ2

のようなスコアと私は、このテキストファイルを読むためのプログラムを記述する必要があり、チームの出力を表示します

のようなレコードの

チームの勝損失

ピーター1 1

タイガー0 2

私はラインを読み、それぞれに関連付けられて勝敗を計算する方法を理解していない2 0

スカイチーム/ストリング。

import java.util.*; 
import java.io.*; 

public class SoccerLeagueStandings 
{ 
    public static void main(String[] args) throws IOException 
    { 
File inFile = new File("LeagueScore.txt"); 
    if(! inFile.exists()) 
    { 
     System.out.println("Error could not open the file"); 
    return; 
    } 
String Panthers="Panthers"; 
String Tigers = "Tigers"; 
String Sky = "Sky"; 

Scanner input = new Scanner (inFile); 
int PW=0; 
int PL=0; 
int TW =0; 
int TL = 0; 
int SW=0; 
int SL=0; 

while (input.hasNextLine()) 
{ 
String firstTeam=input.next(); 
input.nextInt(); 
int firstScore=input.nextInt(); 
    String secondTeam=input.next(); 
    input.nextInt(); 
    int secondScore = input.nextInt(); 
if (firstScore>secondScore) 
{ 
    if (firstTeam.equals(Panthers)) 
    { 
    PW+=1; 
    } 
    if (firstTeam.equals(Tigers)) 
    { 
    TW+=1; 
    } 
    if (firstTeam.equals(Sky)) 
    { 
    SW+=1; 
    } 
} 
} 

} 
} 
+0

あなたはこれまで何をしていますか? –

+0

あなたはそれを解決できるようにするには、問題を理解する必要があります。まず、テキストファイルからの入力を読み込む方法を理解し、ファイルからの入力をパースする方法(おそらくスペースで区切る方法)を見つけ出す必要があります。次に、各チームの勝敗を追跡する方法を理解する必要があります。 –

+0

I私がこれまで行ってきたことで更新しましたが、各チームの勝敗をどのように追跡するのか分かりません – student100

答えて

0

この問題の主な課題は、各チームの勝敗を記録することです。 だから私は、保持するチームと呼ばれるクラスを作成することをお勧めします:名前、winsCount、lossCount。このクラスは、勝ちと敗北数とともに1チームを表します。

チームのarrayListを作成し、ファイルの内容を使用して入力します。 以下のようにあなたのアルゴリズムは次のようになります。

  1. スキャナを使用して行毎にファイルを解析します。
  2. チームとその得点を得るために、各行をスペースで分割します。
  3. チームの得点を比較してください。
  4. 勝者チームをArrayListに追加するか、既に存在する場合はwinsCountを増やします。
  5. 敗者チームに対しても同じことをします。以下は

非テストのサンプルコードです:後

は、チームのクラスである:以下

public class Team { 

    private String name; 

    private int winsCount; 
    private int lossCount; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getWinsCount() { 
     return winsCount; 
    } 

    public void setWinsCount(int winsCount) { 
     this.winsCount = winsCount; 
    } 

    public int getLossCount() { 
     return lossCount; 
    } 

    public void setLossCount(int lossCount) { 
     this.lossCount = lossCount; 
    } 

} 

入力ファイルからのArrayListを埋める方法です:

private void generateWinsLossesFromInput(String filePath) 
{ 
    Scanner input = new Scanner(filePath); 
    List<Team> teams = new ArrayList<Team>(); 
    while(input.hasNext()) 
    { 
     String match = input.next(); 
     // Split the line and get teams and their scores. 
     String[] splittedMatch = match.split("\\s+"); 
     String firstTeam = splittedMatch[0]; 
     int firstTeamScore = Integer.parseInt(splittedMatch[1]); 
     String secondTeam = splittedMatch[2]; 
     int secondTeamScore = Integer.parseInt(splittedMatch[3]); 

     if(firstTeamScore > secondTeamScore) 
     { 
      addWinner(firstTeam, teams); 
      addLoser(secondTeam, teams); 
     } 
     else 
     { 
      if(secondTeamScore > firstTeamScore) 
      { 
       addWinner(secondTeam,teams); 
       addLoser(firstTeam, teams); 
      } 
     } 
    } 
} 

private void addWinner(String team, List<Team> teams) 
{ 
    int index = 0; 
    for(index = 0; index<teams.size(); index++) 
    { 
     Team t = teams.get(index); 
     if(t.getName().equalsIgnoreCase(team)) 
     { 
      // Team already exists, so just increment its winsCount 
      t.setWinsCount(t.getWinsCount() + 1); 
      break; 
     } 
    } 

    if(index == teams.size()) 
    { 
     // team not found, So add it as new team to the list. 
     Team t = new Team(); 
     t.setName(team); 
     t.setWinsCount(1); 
     t.setLossCount(0); 
     teams.add(t); 
    } 
} 

private void addLoser(String team, List<Team> teams) 
{ 
    int index = 0; 
    for(index = 0; index<teams.size(); index++) 
    { 
     Team t = teams.get(index); 
     if(t.getName().equalsIgnoreCase(team)) 
     { 
      // Team already exists, so just increment its loss count. 
      t.setLossCount(t.getLossCount() + 1); 
      break; 
     } 
    } 

    if(index == teams.size()) 
    { 
     // team not found , then add new team to the list 
     Team t = new Team(); 
     t.setName(team); 
     t.setWinsCount(0); 
     t.setLossCount(1); 
     teams.add(t); 
    } 
} 

最後に、配列リストを繰り返し処理して、各チームをWinsと損失カウントとともに印刷することができます。

+0

マップの使い方やParseの意味はわかりません – student100

+0

ArrayListsで同じアルゴリズムを実行しますが、ハッシュマップは高速です。編集したレスポンスを確認してください。 –

+0

これがあなたに役立つ場合は、他人を助けるためにこれを回答として確認してください。 –

関連する問題