Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / First Aid / October 2004

Tip: Looking for answers? Try searching our database.

generating soccer fixtures from a list of teams

Thread view: 
zcraven - 29 Oct 2004 16:04 GMT
public void createFixtureList()
   {
       //setup 'cal' to get todays date
       Calendar cal = new GregorianCalendar();
       int y = cal.get(Calendar.YEAR);
       int m = cal.get(Calendar.MONTH);  // 0=Jan, 1=Feb, ...
       m++;                                              // 1=Jan, 2=Feb,
...
       int d = cal.get(Calendar.DAY_OF_MONTH);
       int hr = 15;
       int min = 00;

       int j = league.size();
       j--;  // last club in league will have already had fixtures
generated by previous clubs
       for (int i=0; i<j; i++)
       {
           //get a CLUB(i) and create all possible fixtures for it
           Club c1 = (Club)league.get(i);
           for (int x=i+1; x<league.size(); x++)
           {
               // get an opponent club - CLUB(x) to create 2 fixtures
(home/away) with club(i)
               Club c2 = (Club)league.get(x);

               // HOME GAME - CLUB(i) vs CLUB(x)
               // set game date for one week after the previous club(i)
matchdate
               d = d+7;
               if (d > 23) // correct values 31->1
               {
                   m++;
                   d=(d-30);
                   if (m > 11) // correct values dec->jan
                   {
                       m = 1;
                       y++;
                   }
               }
               Calendar homedate = new GregorianCalendar(y, m, d, hr, min);
               Fixture f1 = new Fixture(c1.getGround(), homedate, c1, c2);
               fixtures.add(f1);

               // AWAY GAME CLUB(x) vs CLUB(i)
               // set away game for 6 months later
               int tempM = m;
               int tempY = y;
               m = (m+6);
               if (m > 12)
               {
                   m=(m-12);
                   y=y+1;
               }
               Calendar awaydate = new GregorianCalendar(y, m, d, hr, min);

               Fixture f2 = new Fixture(c2.getGround(), awaydate, c2, c1);
               fixtures.add(f2);

               // return m and y back to previous CLUB(i) homegame value
               m = tempM;
               y = tempY;
               homedate.clear();
               homedate.set(y,m,d,hr,min);
           }
       }
       printFixtureList();
   }

For some reason, the above code worked perfectly when I had 3 clubs in the
league.  But since I added a 4th club, I always get a runtime error.

It generates all fixtures (8) for the first club (club(i)) perfectly.  But
the problem occurs when it tries to increment i and get the next club to be
club(i).  When it tries to get the club, it throws a 'null pointer
exception'.  So the problem seems to be with the first FOR statement in the
above code.
zcraven - 29 Oct 2004 16:13 GMT
> public void createFixtureList()
>     {
[quoted text clipped - 72 lines]
> exception'.  So the problem seems to be with the first FOR statement in the
> above code.

correction - the problem is not accessing the clubs - it does that fine.
the problem is with updating the date values.  when throws an 'error: month
cannot be zero or negative' error when it tries to create a fixture for the
2nd club vs the 3rd club in the league.
zcraven - 29 Oct 2004 18:22 GMT
ok forget all that code before, it was crap.  The problem is that it is not
updating the dates as I want it to.  The first error (see printout below)
occurs here:

Man Utd vs Arsenal @ Old Trafford
24-May-2004 @ 15:00

(03-May-2004 @ 15:00 is correct)

Basically I want to create a whole fixture list, and I dont want the same
club to have two games on the same date.  Whats wrong with my maths?

This is the code:

public void createFixtureList()
   {
       // set up todays date for later reference
       Calendar today = new GregorianCalendar();
       today.set(Calendar.MONTH, 2);  //temp
       today.set(Calendar.HOUR_OF_DAY, 15);
       today.set(Calendar.MINUTE, 00);
       today.set(Calendar.SECOND, 00);

       //set up 'matchdate' as a date object with todays date, and 15:00
       Calendar matchdate = new GregorianCalendar();
       matchdate.set(Calendar.MONTH, 2);  //temp
       matchdate.set(Calendar.HOUR_OF_DAY, 15);
       matchdate.set(Calendar.MINUTE, 00);
       matchdate.set(Calendar.SECOND, 00);

       int j = league.size();
       j--;  // no need to create fixtures for last club in league, as all
will have been generated already by previous clubs
       for (int i=0; i<j; i++)
       {
           //get a CLUB(i) and create all possible fixtures for it
           Club c1 = (Club)league.get(i);
           System.out.println("              i=" + i);
           for (int x=i+1; x<league.size(); x++)
           {

               // get an opponent club - CLUB(x) to create 2 fixtures
(home/away) with club(i)
               Club c2 = (Club)league.get(x);

               // HOME GAME - CLUB(i) vs CLUB(x)
               // set game date for one week after the previous club(i)
matchdate (or today if this is 1st game)
               matchdate.add(Calendar.DATE, 7);
               Fixture f1 = new Fixture(c1.getGround(), matchdate, c1, c2);
               fixtures.add(f1);
               System.out.println(f1.getFixtureClubs() + " @ " +
f1.getFixturePlace());
               f1.displayFixtureDate();

               // AWAY GAME CLUB(x) vs CLUB(i)
               // set away game for exactly 6 months after the home game
            //   awaydate = homedate;
               matchdate.add(Calendar.MONTH, 6);
               Fixture f2 = new Fixture(c2.getGround(), matchdate, c2, c1);
               fixtures.add(f2);
               System.out.println(f2.getFixtureClubs() + " @ " +
f2.getFixturePlace());
               f2.displayFixtureDate();
               matchdate.add(Calendar.MONTH, -6);
           }
           // before getting next club(i), give two weeks space to avoid
having 2 matches on the same date
           matchdate = today;
           matchdate.add(Calendar.DATE, 14);
           System.out.println("reset date to today, then added 14");
       }
       printFixtureList();
   }

this is the system.out:

[ league1.createFixtureList() ]
             i=0

Liverpl vs Chelsea @ Anfield

05-Apr-2004 @ 15:00

Chelsea vs Liverpl @ chelseas ground

05-Oct-2004 @ 15:00

Liverpl vs Man Utd @ Anfield

12-Apr-2004 @ 15:00

Man Utd vs Liverpl @ Old Trafford

12-Oct-2004 @ 15:00

Liverpl vs Arsenal @ Anfield

19-Apr-2004 @ 15:00

Arsenal vs Liverpl @ Highbury

19-Oct-2004 @ 15:00

Liverpl vs Newcastle @ Anfield

26-Apr-2004 @ 15:00

Newcastle vs Liverpl @ St.James Park

26-Oct-2004 @ 15:00

reset date to today, then added 14

             i=1

Chelsea vs Man Utd @ chelseas ground

19-Apr-2004 @ 15:00

Man Utd vs Chelsea @ Old Trafford

19-Oct-2004 @ 15:00

Chelsea vs Arsenal @ chelseas ground

26-Apr-2004 @ 15:00

Arsenal vs Chelsea @ Highbury

26-Oct-2004 @ 15:00

Chelsea vs Newcastle @ chelseas ground

03-May-2004 @ 15:00

Newcastle vs Chelsea @ St.James Park

03-Nov-2004 @ 15:00

reset date to today, then added 14

             i=2

Man Utd vs Arsenal @ Old Trafford

24-May-2004 @ 15:00

Arsenal vs Man Utd @ Highbury

24-Nov-2004 @ 15:00

Man Utd vs Newcastle @ Old Trafford

31-May-2004 @ 15:00

Newcastle vs Man Utd @ St.James Park

30-Nov-2004 @ 15:00

reset date to today, then added 14

             i=3

Arsenal vs Newcastle @ Highbury

20-Jun-2004 @ 15:00

Newcastle vs Arsenal @ St.James Park

20-Dec-2004 @ 15:00

reset date to today, then added 14


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.