OK, I need to create three constructors as part of a project, one default, one general and one copy. I've managed to create a default constructor, but I can't create either the general or copy constructors because otherwise my code won't compile. Here is the code if anybody knows the answer:
package lab02;
import javax.swing.JOptionPane;
/**
* Stores the personal details of a friend.
*
* @author Keith Francis(11109971)
* @date 4-10-2012
*/
public class Friend {
private String firstName;// stores first name
private String surname;// stores surname
private String address;// stores address
private int age;// stores age in years
private int height;// stores height in cms
private String hairColourString;// stores hiar colour as a string
private boolean colourTrue = false;// hair colour value is not valid
public static final int BLACK = 0;
public static final int BROWN = 1;
public static final int BLONDE = 2;
public static final int RED = 3;
public static final int GREY = 4;
/**
* Default constructor sets everything to 0 or null, depending on type.
*/
public Friend() {
firstName = null;
surname = null;
address = null;
age = 0;
height = 0;
hairColourString = null;
}
/**
* Allows the first name to be edited
*
* @param first
* first name variable
*/
public void setFirstName(String first) {
firstName = first;
}
/**
* Retrieves first name
*
* @return first name to String
*/
public String getFirstName() {
return firstName;
}
/**
* Allows the surname to be edited
*
* @param last
* creates last name variable
*/
public void setSurname(String last) {
surname = last;
}
/**
* Retrieves the surname
*
* @return last name to string
*/
public String getSurname() {
return surname;
}
/**
* Allows the address to be edited
*
* @param place
* where the friend lives
*/
public void setAddress(String place) {
address = place;
}
/**
* Retrieves the address
*
* @return the address of the friend
*/
public String getAddress() {
return address;
}
/**
* Allows the age (in years) to be edited
*
* @param years
* the age in years
*/
public void setAge(int years) {
age = years;
}
/**
* Retrieves the age in years
*
* @return the age in years
*/
public int getAge() {
return age;
}
/**
* Allows the height in centimetres to be edited
*
* @param h
* height in centimetres
*/
public void setHeight(int h) {
height = h;
}
/**
* Retrieves the height in centimetres
*
* @return height in centimetres
*/
public int getHeight() {
return height;
}
/**
*
* @return String of the personal details of the friend
*/
@Override
public String toString() {
return ("First name is: " + firstName + "\nSurname is: " + surname
+ "\nAddress is: " + address + "\nAge is :" + age
+ "\nHeight is: " + height + "\nHair colour is: " + hairColourString);
}
/**
* Uses JOptionPanel to edit the friend's personal details
*/
void inputFriend()
{
//welcome message
JOptionPane.showMessageDialog(null,"Weclome",null,JOptionPane.PLAIN_MESSAGE);
//prompt to enter first name
String name1 = JOptionPane.showInputDialog("Enter the friend's first name.");
//calls setFirstName method
setFirstName(name1);
//prompt user to enter second name
String name2 = JOptionPane.showInputDialog("Enter the friend's surname.");
setSurname(name2);// calls setSurname method
//prompt user to enter address
String thisAddress = JOptionPane.showInputDialog("Enter the friend's address.");
setAddress(thisAddress);//calls setAddress method
//prompt user to enter age in years
String ageString = JOptionPane.showInputDialog("Enter the friend's age in years.");
int i = Integer.parseInt(ageString);
setAge(i);
//prompt user to enter height in centimetres
String heightString = JOptionPane.showInputDialog("Enter the friend's height in cenimetres.");
int j = Integer.parseInt(heightString);
setHeight(j);
//prompt user to enter hair colour
String hairColourInput = JOptionPane.showInputDialog("Select the friend's " +
"hair colour:\n 0 = Black\n1 = Brown\n2 = Blonde\n3 = Red\n4 = Grey");
while(colourTrue != true)//if hair colour is valid
{
if(
hairColourInput.equals("0"))
{ hairColourString = "Black";//hair is black
colourTrue = true;}//entry is valid
else if (hairColourInput.equals("1"))
{ hairColourString = "Brown";//hair is brown
colourTrue = true;}//entry is valid
else if (hairColourInput.equals("2"))
{ hairColourString = "Blonde";//hair is blonde
colourTrue = true;}//entry is valid
else if (hairColourInput.equals("3"))
{ hairColourString = "Red";//hair is red
colourTrue = true;}//entry is valid
else if (hairColourInput.equals("4"))
{ hairColourString = "Grey";//hair is grey
colourTrue = true;}//entry is valid
else {
JOptionPane.showMessageDialog(null,
"The number entered is invalid.", "Error",
JOptionPane.WARNING_MESSAGE);// warns user that entry is
// not valid
hairColourInput = JOptionPane
.showInputDialog("Select the friend's " +
"hair colour:\n 0 = Black\n1 = Brown\n2 = Blonde\n3 = Red\n4 = Grey");
}// user is asked to choose again until they enter a valid number
}
}
/**
*
* @param args
* Calls inputFriend method and prints out the final String using
* JOptionPane
*/
public static void main(String[] args) {
Friend friend = new Friend();
friend.inputFriend();// calls inputFriend method
JOptionPane.showMessageDialog(null, friend.toString()); // prints out details
}
}
Here is my attempt at a copy constructor:
public Friend(Friend aFriend) {
this(aFriend.getFirstName(), aFriend.getSurname(), aFriend.getAddress, aFriend.getAge, aFriend.getHeight);
and my attempt at the general constructor:
public Friend2(){
public static final int BLACK = 0;
public static final int BROWN = 1;
public static final int BLONDE = 2;
public static final int RED = 3;
public static final int GREY = 4;
}
What came up was that a class, interface or enum was expected when I inserted the constructor. Hope that helps.
Right, I've tried the copy constructor like this:
public Friend(Friend f) {
this(f.getFirstName(),f.getSurname(),f.getAddress(),f.getAge(),f.getHeight());
}
But I am getting a message saying that I don't have a suitable constructor.
UPDATE:general and copy constructors are now working. Thanks for your help.
you can overload the constructor like below:
cons1:
public Friend()
{
}
cons2:
public Friend(int arg)
{
}
cons3:
public Friend(String s)
{
}
copy cons:
public Friend(Friend f)
{
}