0

我正在尝试创建一个梦幻足球选秀计划。我遇到困难的第一步是正确地将数据读入列表。我想逐行扫描数据。我创建了一个循环来设置每个角色名称,然后继续添加所有具有该角色的人,直到“-----”出现在一行上。然后将该角色添加到角色列表中。我相信我的循环是正确的,但是,我不知道如何正确使用我的 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; 
}

}

人物类

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

    
    

}

4

3 回答 3

0

在你的代码中我看到

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

isInteger(personLine)如果计算结果为真,这将是无限循环。也许应该是 if 而不是 while,或者您需要personLine在每次迭代中进行修改。

于 2013-02-12T02:35:01.193 回答
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()此处调用,尝试更改它以调用另一个构造函数。

于 2013-02-12T02:52:46.093 回答
0

创建一个接受字符串的构造函数,就像 setData 一样,然后在该构造函数中调用您的 setData 方法,将字符串发送给它。这样您就可以保留 setData,而您的构造函数基本上是 setData()。

如果您想绝对保持构造函数的原样,则必须在 main 中拆分字符串

于 2013-02-12T04:58:51.520 回答