How to add a runner to an array of results

1.3k views Asked by At

I have been trying to figure out how to add runner information into an array of runner information. It should contain at most 100 runners.

This is part of a larger project that must fulfill these requirements:

Operations (methods):

• A constructor that takes in a race name and distance.

• Getters and setters for both the name and distance instance variables.

• Method to return the count of the number of RunnerResult objects added to the array.

• Method to add a RunnerResult to the array (given an instance of Runner and the runner’s finishing time).

• Methods to get a RunnerResult object; one that takes in the position in which the RunnerResult was added (to directly access the object from the array) and one that takes in a runner name (to use to search for the matching runner). The first runner’s index is 0, the second is 1, etc.

• A method with conditional logic to give a count of all runners for a certain category (youth, adult, senior, male, female, all) triggered by a flag passed in as a whole number (1, 2, 3, 4, 5, 6, respectively, implemented as public constants). A similar method provides the average race result (time to finish race) for each potential category.

• A method with conditional logic finds runners with a race time less than the specified minutes per mile. For example, find all runners who finished the race with a time of less than 8 minutes per mile.

• A toString method that simply gives the race name, race distance, a count of total runners in the race, and the average time of all runners in the race.

So far, this is what I have:

public class Race
{
    // instance variables
    private String name;
    private double distance;
    private int nextPos;
    private RunnerResult [] results;


    // public constants

    /**
     * Flag to signify YOUTH.
     */
    public static final int YOUTH = 1;



    /**
     * Flag to signify ADULT.
     */
    public static final int ADULT = 2;

    /**
     * Flag to signify SENIOR.
     */
    public static final int SENIOR = 3;

    /**
     * Flag to signify MALE.
     */
    public static final int MALE = 4;

    /**
     * Flag to signify FEMALE.
     */
    public static final int FEMALE = 5;

    /**
     * Flag to signify ALL.
     */
    public static final int ALL = 6;

    /**
     * Array limit.
     */
    public static final int MAX_COUNT = 100;


    /**
     * Constructor for objects of class Race.
     *
     * @param  inName the race name.
     * @param  inDist the distance of the race.
     *
     */
    public Race(String inName, double inDist)
    {
        // initialize the instance variables and 
        // empty array of results, initalize nextPos
        this.name = inName;
        this.distance = inDist;
        RunnerResult[] results = new RunnerResult[100];
    }

    /**
     * Set the race Name.
     * 
     * @param  inName the race name.
     *  
     */
    public void setName(String inName)
    {
        this.name = inName;
    }

    /**
     * Get the race Name.
     * 
     * @return String The race name.
     *  
     */
    public String getName()
    {
        return this.name;
    }   

    /**
     * Set the race distance.
     * 
     * @param  inDist the distance of the Race.
     *  
     */
    public void setDist(double inDist)
    {
        this.distance = inDist;
    }

    /**
     * Get the race distance.
     * 
     * @return double the distance of the race.
     *   
     */
    public double getDist()
    {
        return this.distance;
    }    

    /**
     * Add a runner to the results
     * (runners are NOT entered in order of finish).
     * 
     * @param  inChip   the runner's chip id.
     * @param  inRunner a Runner object.
     * @param  inStart  the start time for the runner.
     * @param  inEnd    the end time for the runner.
     *  
     */
    public void addRunner(String inChip, Runner inRunner, Time inStart, Time inEnd)
    {
        if (this.nextPos < MAX_COUNT)
        {
            // set the instance field element to a "copy" of passed-in object
            // add to array, increment counter

            for(int i = 0; i < results.length; i++);
            {
                RunnerResult[] results = { copyinChip, copyinRunner, copyinStart,  
                    copyinEnd };

                i++;
            }
        }
    }  
}

I just cannot figure out how to get these values into the array. (I get an incompatible type error. Any input would be greatly appreciated.

1

There are 1 answers

5
Alex On

two things here.

1.) when you re-declare results, you are not referencing the same object that you declare as a field, but an entirely new object that then has no purpose, because it only lives within addRunner.

2.) When you assign results = { ---, ---, ---, ---}; You aren't adding a new runner to the array. Rather, you are reassigning the entire array every single time you do that loop. You would want to create a new RunnerResult object, add the necessary data to it, and then put that at results[];

An example here:

public void addRunner(String inChip, Runner inRunner, Time inStart, Time inEnd)
{
    if (this.nextPos < MAX_COUNT)
    {
        // set the instance field element to a "copy" of passed-in object
        // add to array, increment counter

        for(int i = 0; i < results.length; i++);
        {      
            results[i] = new RunnerResult(<your params>);
        }
    }
}