如何在没有构造函数参数的情况下添加类的实例?

时间:2013-02-12 02:18:34

标签: java constructor instance-variables

我正在尝试创建一个梦幻足球选秀计划。我遇到困难的第一步是将数据正确地读入List。我想逐行扫描数据。我创建了一个循环来设置每个角色名称,然后继续添加具有该角色的所有人,直到“-----”显示在一行上。然后该角色将添加到角色列表中。我相信我的循环是正确的,但是,我不知道如何正确地工作我的Person构造函数,以便它包含我在Person类中使用setData方法无法实现的等级,名称和原点。我仍然是编程的初学者,我想知道我是否遗漏了一些东西。

数据文件

利达

1超人DC

2美国队长Marvel

3 X Marvel教授

4 The Shoveler Mystery Men

布朗

1 Hulk Marvel

2 Wolverine Marvel

3 The Thing Marvel

4 Beast Marvel

5 Thor Marvel

6愤怒之谜先生

7 Incredible Pixar先生

......等等

主类

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

}

3 个答案:

答案 0 :(得分:0)

在你的代码中我看到了

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

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

答案 1 :(得分:0)

你有两个构造函数

  

public Person(){

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(),尝试更改它以调用其他构造函数。

答案 2 :(得分:0)

创建一个接受字符串的构造函数,就像setData一样,然后在该构造函数中调用setData方法,向其发送字符串。这样你保持setData,你的构造函数基本上是setData()。

如果你想完全保留构造函数,你必须在主

中拆分字符串