Re: Issue with array length in for loop
Thanks for all the interest so far. Here is the code (note: I have
changed things around a little bit based on peoples suggestions, but
am still having the same error).
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;
public class HorseExample {
public HorseExample(){
}
//Class for Jockey, stores the jockey's name and price
public class Jockey {
private Float price;
private String fullName;
//Initialisation
public Jockey (String fullName, Float price) {
this.fullName = fullName;
this.price = price;
}
//Getters
public String getFullName () {
return fullName;
}
public Number getPrice () {
return price;
}
}
//Class for race, stores an array of jockeys running in the race and
the race number
public class Race {
private Jockey[] jockeys;
private int number;
//Initialisation
public Race(){
}
public Race (int number, Jockey[] jockeys) {
this.number = number;
this.jockeys = jockeys;
}
//Getters
public int getNumber () {
return this.number;
}
public Jockey[] getJockeys () {
return this.jockeys;
}
public int getRunners () {
return this.jockeys.length;
}
}
public static void main(String[] args) {
HorseExample he = new HorseExample();
//Initialise the variables
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Race[] races = {he.new Race()};
String raceCode = "R";
String meetingCode = "S";
int raceCount = 0;
//Get the track information
try {
Date date = df.parse("2010-12-26");
//Get the number of races for the meeting
URL url = new URL("http://www.tab.com.au/Racing/Information/" +
"DisplayRaces.aspx?State=2&MeetingCode="
+ meetingCode + "&RacingCode=" + raceCode
+ "&FromDate=" + df.format(date) + "T00:00:00");
BufferedReader in = new BufferedReader(new
InputStreamReader(url.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
if (inputLine.contains("javascript:WP")) {
raceCount = Integer.parseInt(inputLine.split("javascript:WP")
[1].split("'")[5]);
}
}
//Populate the race array
Vector<Race> raceVect = new Vector<Race>();
for (int i=1;i<=raceCount;i++) {
Vector<Jockey> jockVect = new Vector<Jockey>();
String tmpRace = "0" + Integer.toString(i);
if (tmpRace.length()==3){
tmpRace = tmpRace.substring(1);
}
url = new URL("http://www.tab.com.au/Racing/Betting/StandardBets/"
+
"PlaceStandardBet.aspx?State=2&MeetingCode="
+ meetingCode + "&RacingCode=" + raceCode + "&FromDate=" +
df.format(date)
+ "T00:00:00&BetType=Win&RaceNumber=" + tmpRace);
in = new BufferedReader(new InputStreamReader(url.openStream()));
while ((inputLine = in.readLine()) != null) {
if (inputLine.contains("BetGrid_chk_AllRunners")) break;
if (inputLine.contains("TableCheckboxCell")){
String jName = inputLine.split(">")[5].split("&")[0];
Float jPrice;
try {
jPrice = Float.parseFloat(inputLine.split(">")[15].split("<")
[0]);
} catch (NumberFormatException e) {
jPrice = Float.parseFloat("0");
}
jockVect.add(he.new Jockey(jName, jPrice));
}
Jockey[] jArray = new Jockey[jockVect.size()];
raceVect.add(he.new
Race(Integer.parseInt(tmpRace),jockVect.toArray(jArray)));
}
}
races = raceVect.toArray(new Race[raceVect.size()]);
//Go through the races
System.out.println("Number of races: " + raceCount);
for (Race race : races) {
System.out.println("For race " + race.getNumber()
+ " there is " + race.getRunners() + " horses");
}
//Error handling
} catch (MalformedURLException e) {
System.err.println("Malformed URL exception: " + e.getMessage());
} catch (IOException e) {
System.err.println("IO exception: " + e.getMessage());
} catch (ParseException e) {
System.err.println("Parse exception: " + e.getMessage());
}
}
}