Search code examples
javaclassobjectinheritancecomposition

Java - Multiple fields of same data type in an object


I was practicing inheritance and composition after a lesson and decided to write a small program to try some things out, stumbled upon a problem, I'll show my code, it has 4 classes including the Main.java:

public class Main {

public static void main(String[] args) {

    Person person1 = new Person("Person1", 170); //"Name", height
    Person person2 = new Person("Person2", 200); //"Name", height

    Bed bed1 = new Bed(160);

    Bedroom bedroom1 = new Bedroom(bed1, person1);

    bedroom1.sleep();

public class Bedroom {

private Bed theBed;
private Person thePerson;

//Constructors

public void sleep() {
    if(thePerson.getHeight() > 180) {
        System.out.println("You are too tall to sleep on this bed.");
    } else {
        theBed.sleepOnBed();
    }
}

//Getters

public class Bed {

private Person thePerson;
private int height;

//Constructor

public void sleepOnBed() {
        System.out.println("You sleep on the bed.");
}

//Getters 

public class Person {

private String name;
private int height;

//Constructor

//Getters

What I want to do is to use both person1 and person2 in my bedroom1 object in Main.java and then test the sleep() method on both of them but I just can't figure out a way to use it.

I tried things like:

public class Bedroom {

private Bed theBed;
private Person thePerson1;
private Person thePerson2;

public Bedroom(Bed theBed, Person thePerson1, Person thePerson2) {
    this.theBed = theBed;
    this.thePerson1 = thePerson1;
    this.thePerson2 = thePerson2;
} 


public class Main {

public static void main(String[] args) {

    Person person1 = new Person("Person1", 170);
    Person person2 = new Person("Person2", 200);

    Bed bed1 = new Bed(160);

    Bedroom bedroom1 = new Bedroom(bed1, person1, person2);

    bedroom1.sleep(); 

But as you might understand, that lead to nothing. I'm just so tired and can't find any leads online, might be because I use the wrong keywords idk.

I want my program to take multiple objects of data type Person and see if their height matches the conditions to sleep in the bed, that's pretty much it.


Solution

  • You can replace Person with a List of Person objects in the bedroom class and then loop over the array in the sleep method.

    public Bedroom(Bed bed1, List<Person> aListOfPersons)
    {
      this.persons = aListOfPersons;
    }
    
    public void sleep()
    {
      for(Person aPerson : persons)
       {
          //check for each aPerson if he fits in the bed
       }
     }
    

    Welcome to Stackoverflow and happy coding!