Before you do this section, watch the videos here: <https://www.dropbox.com/sh/v0xcqgjkia6brmm/AABRKcrZjwhkR1j14NsMcd4za?dl=0>
Older programming languages distinguish between Functions and Procedures. Very simply, a function returns a value, a procedure does not.
Java rolls both of these into one concept: Methods. A method always has a return type. If the return type is void it is what an older language would call a procedure, otherwise it's a function.
Here is an example method:
```java
public void spoons (String s, int i)
```
| | | | |
| --- | --- | --- | --- |
| Access Type | Return Type | Name | Parameters |
| public | void | spoons | (String s, int i) |
## Two example Classes
```java
public class Main {
public static void main(String[] args)
{
Person p1 = new Person("Bloggs", "Joe");
p1.setSex("M");
Person p2 = new Person("Baker", "Jill");
p2.setGender("F");
p1.printPerson();
p2.printPerson();
}
}
public class Person {
private String surname;
private String forename;
private String gender;
Person(String surname, String forename)
{
this.surname = surname;
this.forename = forename;
}
public void setGender(String s)
{
if(!(s.equals("F")|s.equals("M")))
{
System.out.println("Validation error!");
} else
{
sex = s;
}
}
public void printPerson()
{
System.out.println(surname + " " + forename + " " + gender);
}
}
```
## Method Exercise: Progress Tracker
Write a class Pupil that will track pupils' progress through a year. The class will store pupils' grades as percentages.
1. Add private member variables String forename, surname
2. Add private member variables int target, autumn, spring, summer
3. Add a constructor method that will accept the parameters forename, surname, target
4. Test the constructor by adding the following pupils: Joe, Bloggs, 70 and Jill, Cooper, 75
5. Add accessor methods to setAutumn(), setSpring(), setSummer()
6. Add accessor methods to getAutumn(), getSpring(), getSummer()
7. Add the following grades to Joe Bloggs: Autumn 55, Spring 65, Summer 75
8. Add the following grades to JIll Cooper: Autumn 50, Spring 60, Summer 70
9. Add a method average() to return a double showing the average percentage a pupil has. Print out Joe and Jill's average scores
10. Add a method progress() that will return a String saying whether the pupil is above target, on target or below target on the summer test.
11. Check this method works on Joe and Jill
12. Add a print() method that will print out the pupil's details in a suitable format
## Extension Work
* Add a validation() method to check that grades entered lie between 1 and 100
* Modify your average() method so it will return a correct average if only one or two grades have been entered so far
* Add a static int variable aBound to record the grade A boundary.
* Add the appropriate setters and getters to aBound
* Set up a Pupil \[\] array in your Main class to handle your pupils
* Add a save() method to your Pupil class that will write the pupil data to file