2

我已成功从 2 个文件中提取数据并将它们存储在各自类的数组对象中。这是我存储在数组对象中的一些数据:

2005,Arsenal,ManU,Arsenal,WestHam,Y,2,3,40000
2006,ManU,Chelsea,ManU,WestHam,N
2007,ManU,Arsenal,ManU,WestHam,Y,1,0,260000
2008,Chelsea,ManU,Chelsea,Swansea,Y,4,0,285630
2009,Chelsea,ManCity,Chelsea,Swansea,N

每个逗号代表不同的列。这是我存储它的代码:

try{ 
Scanner kd = new Scanner(file);
    while(kd.hasNext()){
        String data = kd.nextLine();
        String [] values = data.split(",");
        String year = values[0];
        String wScore = "N/A" , lScore = "N/A", crowd = "N/A";

        if(inputYears.equals(year))
        {
        g.setPremier(values[1]);
        g.setLosing(values[2]);

我按照一些用户的建议做了,但现在唯一的问题是我将获胜者设为空白。例如:

    Year: 2005
    Premier: 

它应该是:

    Premier: Arsenal

无论如何我可以解决这个问题?

4

4 回答 4

1

好吧,如果用户只想按年份查询,那么您应该有一个以年份键的地图

在初始化阶段,尝试做这样的事情:

Map<String, ArrayList<String>> map= new HashMap<String, ArrayList<String>>();

while(kd.hasNext()){
    String data = kd.nextLine();
    String [] values = data.split(",");
    String year = values[0];
    String premiers = values[1];
    //String otherStuff= values[2]; and so on

    ArrayList<String> temp= new ArrayList<String>();
    temp.add(premiers);

    //temp.add(otherStuff);
    map.put(year, temp);
}

稍后,您可以这样查询:

ArrayList<String> values= map.get(userInputYear);
String winner= values.get(0);
于 2013-05-29T16:08:56.563 回答
1

没有收藏?你遇到的好老师....

在没有 Map 的情况下,您可以尝试创建一个单独的getPremiershipChampion方法。

像这样:

public PremiershipYear getPremiershipChampion (String userYear, String[] kd) {

 while(kd.hasNext()){
   String data = kd.nextLine();
   String [] values = data.split(",");
   String year = values[0];

   if (userYear.equals(year)) {
       PremiershipYear py = new PremiershipYear();
       py.setWinner(values[1]);
       py.setRunnerUp(values[2]);
    // Set whatever you need to here...
      return py;
   }    
 }

return null;
}

...然后这样称呼它:

PremiershipYear year = getPremiershipChampion (userYear, kd);

// Get the winner
if (year != null) {
   System.out.println("Winner for "+userYear+"="+year.getWinner());
}

这是PremiershipYear课程:

public class PremiershipYear {

    private String winner;
    private String runnerUp;
    private String third;
    private String fourth;
    private String faCupWinner;
    private int someScore;

    public String getWinner() {
        return winner;
    }

    public void setWinner(String winner) {
        this.winner = winner;
    }

    public String getRunnerUp() {
        return runnerUp;
    }

    public void setRunnerUp(String runnerUp) {
        this.runnerUp = runnerUp;
    }

    public String getThird() {
        return third;
    }

    public void setThird(String third) {
        this.third = third;
    }

    public String getFourth() {
        return fourth;
    }

    public void setFourth(String fourth) {
        this.fourth = fourth;
    }

    public String getFaCupWinner() {
        return faCupWinner;
    }

    public void setFaCupWinner(String faCupWinner) {
        this.faCupWinner = faCupWinner;
    }

    public int getSomeScore() {
        return someScore;
    }

    public void setSomeScore(int someScore) {
        this.someScore = someScore;
    }    
}

你可以用它来提高效率,例如制作kd课程级别,但这应该给你一个大致的想法!

于 2013-05-29T16:21:07.400 回答
0

您可以创建一个类来表示您的数据记录

class Data
{ 
    private String year;
    private String winner;

    ...

    Data(String year, String winner) { ... }
}

然后您可以填写一张将年份与一些数据相关联的地图,这使得查找年份更容易一些。

Map<String, Data> m = new HashMap<String, Data>();

while(kd.hasNext())
{
    String[] arr = kd.nextLine().split(",");

    Data d = new Data(arr[0], arr[1])

    m.put(arr[0], d);
}

但即使你只有一个List<Data>Data[]等你仍然可以做类似的事情

for (Data d : listOfData)
{
    if (d.getYear().equals(yearToFind)) return d;
}

找到年份

于 2013-05-29T16:17:48.210 回答
0

使用Map. 如果您每行只有一年,请使用 aHashMap<String, String>以年份为键,以团队为值。

如果您有许多具有相同年份的行,请使用 aHashMap<String, ArrayList<String>>以年份作为键,将 team* s * 作为值。

在后一种情况下,您必须确保该值已初始化。如果没有,则初始化它并添加当前团队。如果它已经被初始化,你会按年份获取值并将当前团队添加到其中。

获得用户输入后,您可以查询您Map的密钥集...

  • 验证它是否包含用户输入,如果是...
  • 显示团队/枚举当年列出的每个团队
于 2013-05-29T16:10:46.237 回答