【问题标题】:Iterating through an array and checking values of the items遍历数组并检查项目的值
【发布时间】:2014-02-22 20:04:31
【问题描述】:

我通过从 mysql 表中获取数据来填充一个数组,我想要做的是遍历该数组,检查每个项目的值,然后根据值执行不同的操作。

这是我连接到数据库并尝试遍历数组的方法的代码

public void HomeRecord(){

    ArrayList<HomeTeamResults> allResults = new ArrayList<>();

    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 table = box1.getSelectedItem().toString();
        String SQL = "SELECT * FROM " + table + " WHERE `HomeTeam` = ?";
        PreparedStatement prepst;            

        prepst =  con.prepareStatement(SQL);
        prepst.setString(1,box1.getSelectedItem().toString());
        rs = prepst.executeQuery();

        HomeTeamResults hometeamResults=null;
        while (rs.next()) 
        {               
            hometeam = rs.getString("HomeTeam");                      
            awayteam = rs.getString("AwayTeam");                   
            result = rs.getString("Result");                             


            custs = (hometeam + "," + awayteam + "," + result);
            allResults.add(hometeamResults);
        }

    }

    catch (Exception e) 
    {
        System.out.println("Error " +e);                                                                               
    }

    System.out.println("Size of HomeArrayList::"+allResults.size());
    for(HomeTeamResults temp:allResults){                                 

   if(temp.getResult().equals("W")){
       hometeamvalue = hometeamvalue + 50;
   }  

   else if(temp.getResult().equals("D")){
       hometeamvalue = hometeamvalue + 10;
   }

   else
   {           
           hometeamvalue = hometeamvalue + 0;           
    }

    }

}

这是数组的代码

public class HomeTeamResults {   

private String hometeam;                                            
private String awayteam;                                
private String result;

public String getHomeTeam() {
return hometeam;
}

public void setHomeTeam(String hometeam) {
  this.hometeam = hometeam;
}

public String getAwayTeam() {
return awayteam;
}

public void setAwayTeam(String awayteam) {
  this.awayteam = awayteam;

public String getResult() {
return result;
}

public void setResult(String result) {
    this.result = result;
}

private  HomeTeamResults(String hometeam, String awayteam, String result) 
{
    this.hometeam = hometeam;
    this.awayteam = awayteam;
    this.result = result;

}

@Override
public String toString() 
{ 
    return " "+hometeam+", "+awayteam+", "+result; 
}
}

我的问题在于比较。当我尝试 if(temp.getResult().equals("W") 那么它根本不起作用。如果我尝试 if(result.equals("W") 那么它所做的就是从数组,然后假设数组中的所有其他项都是相同的。

不确定我哪里出错了,有什么想法吗?

【问题讨论】:

    标签: java mysql arrays


    【解决方案1】:

    您在列表中添加对象,但在迭代结果时未在任何地方初始化对象。

    HomeTeamResults hometeamResults=null;  // Object is null
            while (rs.next()) 
            {               
                hometeam = rs.getString("HomeTeam");                      
                awayteam = rs.getString("AwayTeam");                   
                result = rs.getString("Result");                             
                custs = (hometeam + "," + awayteam + "," + result); // No idea abt usage
                hometeamResults = new HomeTeamResults(hometeam,awayteam,result); // Initial It
                allResults.add(hometeamResults);   // Now List will contain proper object
            }
    

    【讨论】:

    • 更新了答案以获得更多理解。您的列表将包含空对象。
    • 我明白了,所以我不应该让列表为空?
    • 再次更新了答案。现在您从 db 收到的任何结果都将创建正确的对象,然后在列表中设置
    【解决方案2】:

    您正在使用空值初始化引用,您首先要做的是创建您的对象,然后设置其中的值有点像

     HomeTeamResults hometeamResults= null;
                while (rs.next()) 
                {     hometeamResults=new HomeTeamResults()
                    hometeam = rs.getString("HomeTeam");                      
                    awayteam = rs.getString("AwayTeam");                   
                    result = rs.getString("Result");                             
                    hometeamResults.setHomeTeam(hometeam);
                    hometeamResults.setAwayTeam(awayteam);
                    hometeamResults.setResult(result);
                    allResults.add(hometeamResults);
                }
    

    【讨论】:

    • 您正在列表中添加相同的对象 hometeamResults。您需要在循环内对其进行初始化
    猜你喜欢
    • 2013-04-20
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多