【发布时间】:2014-02-19 17:15:54
【问题描述】:
涉及到相当多的代码,我不确定要详细说明多少,但我正在使用 mysql 表中的数据填充树形图,但在迭代它时遇到了麻烦。
这是包含树形图的类的代码
public class SeasonResults{
private static Map<String,SeasonResults> allResults = new TreeMap<String,SeasonResults>();
private String hometeam;
private String awayteam;
private String result;
private static SeasonResults result6;
public static SeasonResults add(String hometeam, String awayteam, String result)
{
result6 = new SeasonResults(hometeam, awayteam, result);
allResults.put(hometeam,result6);
return result6;
}
private SeasonResults(String hometeam, String awayteam, String result)
{
this.hometeam = hometeam;
this.awayteam = awayteam;
this.result = result;
}
public static Collection<SeasonResults> getCollection()
{
return allResults.values();
}
@Override
public String toString()
{
return " "+hometeam+", "+awayteam+", "+result;
}
}
这是我填充数组然后尝试迭代它的代码。
public void HeadToHead(){
try
{
//Sets up the connedtion to the database and installs drivers which are required.
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost", "username", "password");
String SQL = "SELECT * FROM PreviousSeasons WHERE HomeTeam=? and AwayTeam=?";
PreparedStatement prepst;
prepst = con.prepareStatement(SQL);
prepst.setString(1,box1.getSelectedItem().toString());
prepst.setString(2,box2.getSelectedItem().toString());
rs = prepst.executeQuery();
while (rs.next())
{
//This retrieves each row of League table and adds it to an array in the League Results class.
hometeam = rs.getString("HomeTeam");
awayteam = rs.getString("AwayTeam");
result = rs.getString("Result");
custs = (hometeam + "," + awayteam + "," + result); // Takes all the variables containging a single customers information and puts it into a string, seperated by commas.
SeasonResults.add(hometeam, awayteam, result);
}
}
catch (Exception e)
{
System.out.println("Error " +e);
}
Seasonrecord = SeasonResults.getCollection();
seasons = new SeasonResults[Seasonrecord.size()];
Iterator iterateSeason = Seasonrecord.iterator();
int i = 0;
while(iterateSeason.hasNext()){
seasons[i] = (SeasonResults)iterateSeason.next();
i++;
if(result.equals("HW")){
hometeamvalue = hometeamvalue + 50;
}
else if(result.equals("D")){
hometeamvalue = hometeamvalue + 10;
awayteamvalue = awayteamvalue + 10;
}
else{
if(result.equals("AW")){
awayteamvalue = awayteamvalue + 50;
}
}
}
}
数据库中有 5 个“结果”字段。 2 是“HW”,2 是“AW”,1 是“D”。我要做的是打印出'hometeamvalue'和'awayteamvalue',但是当我这样做时,值仅打印为10。仅使用第一个字段的值。
当我想在 GUI 中显示结果时,我使用相同的代码遍历数组,并显示所有字段。但是当我尝试对它们进行一些计算时,它不起作用。
任何想法是什么问题?
【问题讨论】:
-
if(result.equals("HW")) 在此语句中将结果替换为 seasons[i].getResult().equals("HW") 并且在剩余的两个 if 语句中也执行同样的..并尝试
-
试过了,还是不行。我不认为这部分是问题所在,因为它适用于数组中的第一项,但它并没有更进一步得到其他项。
-
它会起作用,但您还需要更改您的 Serachesults 代码..您可以完全发布 SeasonResults.java 以及为什么您将私有静态 Map
allResults 放在同一个类中... -
你有解决方案吗??
-
不。我尝试使用 for 循环而不是“while”,但它仍然得到相同的答案。它只得到第一个结果。