2013-02-12 52 views
0

我正在嘗試製作一個幻想足球選秀節目。我遇到困難的第一步是將數據正確讀入List。我想逐行掃描數據。我創建了一個設置每個角色名稱的循環,然後繼續添加所有具有該角色的人員,直到「-----」顯示在一行中。然後,該角色被添加到角色列表中。我相信我的循環是完全正確的,但是,我不知道如何正確工作我的Person構造函數,以便它包含我無法用Person類中的setData方法實現的等級,名稱和來源。我仍然是編程初學者,我想知道我是否錯過了一些東西。如何在沒有構造函數參數的情況下添加一個類的實例?

數據文件

組長

1超人DC

2美國隊長驚奇

3 X教授驚奇

4所述的琵嘴鴨推理男性

布朗

1廢船驚奇

2狼獾驚奇

3怪驚奇

4野獸驚奇

5托爾驚奇

6先生狂怒推理男性

7不可思議的皮克斯先生

...等等

主類

import java.util.HashMap; 
import java.util.List; 
import java.util.Scanner; 
import java.io.*; 
import java.util.ArrayList; 

public class FantasyTeamDraft { 

/** 
* Joseph Simmons 
* CPS 181 
* February 6, 2013 
*/ 
public static void main(String[] args) throws IOException{ 
    Scanner scan = new Scanner (System.in); 

    System.out.println("Enter the name and location of the file wanted for the draft: "); 
    File draftData = new File (scan.next()); 
    Scanner scanData = new Scanner(draftData); 

    List <Role> listOfRoles = new ArrayList <Role>(); 
    while (scanData.hasNext()) { 
     String line = scanData.nextLine(); 
     if (!isInteger (line)) { 
      Role role = new Role(); 
      role.setRoleName(line); 
      String personLine = scanData.nextLine(); 
      while (isInteger(personLine)){ 
       Person person = new Person(); 
       person.setData(personLine); 
       role.addPerson(person); 
      } 
      listOfRoles.add(role); 
    } 
     } 





} 

public static boolean isInteger (String line) { 
    try { 
     Integer.parseInt(line.split("\t") [0]); 
    } catch (NumberFormatException e) { 
     return false; 
    } 
    return true; 
} 

}

Person類

import java.util.Scanner; 

public class Person { 

private int rank; 
private String name; 
private String origin; 

public Person() { 

} 
public Person (int rank, String name, String origin) { 
    this.rank = rank; 
    this.name = name; 
    this.origin = origin; 
} 

public void setData (String line) { 
    String [] array = line.split("\t"); 
    this.rank = Integer.parseInt(array [0]); 
    this.name = array [1]; 
    this.origin = array [2]; 
} 

}

角色類

import java.util.List; 
import java.util.Scanner; 

public class Role { 

private String roleName = ""; 
private List <Person> listOfPeople; 

public Role (String roleName) { 
    this.roleName = roleName; 
} 

public void setRoleName (String line) { 
    this.roleName = line; 
} 

public String getRoleName() { 
    return roleName; 
} 

public void addPerson (Person person) { 
    this.listOfPeople.add(person); 
} 

}

+0

串,能得到任何特定的錯誤? – 2013-02-12 02:32:36

回答

0

在你的代碼中,我看到

while (isInteger(personLine)){ 
      Person person = new Person(); 
      person.setData(personLine); 
      role.addPerson(person); 
     } 

這將是無限循環,如果isInteger(personLine)計算結果爲真。也許它應該是,而不是一會兒,或者你需要在每次迭代中修改personLine

0

你有兩個構造

公衆人物(){

public Person (int rank, String name, String origin) { 
this.rank = rank; 
this.name = name; 
this.origin = origin; 
} 

如果我正確理解你的問題,以設定級別,姓名和原始值,你會想調用第二個構造函數。但是,在你的循環這裏

while (isInteger(personLine)){ 
      Person person = new Person(); 
      person.setData(personLine); 
      role.addPerson(person); 
     } 

您在這裏調用new Person(),嘗試改變它來調用其他的構造。

+0

我明白我需要這樣做,但在使用方法.setData之前,我無法獲得「int rank,String name和String origin」。我該如何解決這個問題? – Joey 2013-02-12 02:55:47

+0

一旦你調用默認的構造函數,所有的值將被分配給一個默認值,因爲在代碼中,我們在構造函數之後調用setData,它調用setData方法。 – 2013-02-12 02:58:51

+0

那麼我在調用setData方法後該做什麼? – Joey 2013-02-12 03:31:11

0

創建一個構造函數,它接受一個字符串,就像setData一樣,然後在該構造函數中調用您的setData方法,並將該字符串發送給它。這樣你保持setData和你的構造函數基本上是setData()。

如果要保持絕對的構造,因爲它是你必須分割主

相關問題