How can I use the Exceptions I have created below in the Cinema class?

//IllegalAgeException class

public class IllegalAgeException extends Exception
{
    /**
     * Creates a new instance of <code>IllegalAgeException</code> without detail message.
     */
    String exception;
    public IllegalAgeException() 
    {
         exception="Unknown";
    }
    /**
     * Constructs an instance of <code>IllegalAgeException</code> with the specified detail message.
     * @param msg the detail message.
     */
    public IllegalAgeException(String msg) 
    {
        super(msg);
        this.exception=msg;
    }
    public String getException()
    {
        return this.exception;
    }
}

//MoviePropertiesNotSetException class

public class MoviePropertiesNotSetException extends Exception 
{

    /**
     * Creates a new instance of <code>MoviePropertiesNotSetException</code> without detail message.
     */
    String exception;
    public MoviePropertiesNotSetException() 
    {
        exception="Unknown";
    }
    /**
     * Constructs an instance of <code>MoviePropertiesNotSetException</code> with the specified detail message.
     * @param msg the detail message.
     */
    public MoviePropertiesNotSetException(String msg) 
    {
        super(msg);
        this.exception=msg;
    }
    public String getException()
    {
        return this.exception;
    }
}

//Cinema class

import java.util.*;
public class Cinema 
{
    float cost;
    String Title;

    String mrPG="PG";
    String mrA="A";
    String mrG="G";
      
    Movie movieNew = new Movie();
    
     //MovieRating class
    MovieRating mrating = new MovieRating();
    private ArrayList<Human> hm = new ArrayList();
    
    public Cinema()
    {
        
    }
    public Cinema (String mtitle, float pounds) 
    {
            this.Title=mtitle;
            this.cost = pounds;
    }

    public float getcost (int people) 
    {
        return cost * people;
    }
       
    /**
    * Method check that the movie title and rating have been set,
    * if not throw an exception.
    */
    public  void setMovie(Movie movieNew) throws MyException
    { 
        if(movieNew.getTitle()!=null && movieNew.getRating()!=null)
        {
             System.out.println("The movie is called " +movieNew.getTitle()+ 
                    " and is rated " +movieNew.getRating()+ ".");
        }
        else
        {
            throw new MyException("The Movie properties not set");
        }
    }
     /*
      * this method first checks if the movie properties are set.
      */
    public void showMovie() throws MyException
    { 
//        movieNew.setName("Comedy");
//        movieNew.setRating("PG");
//        movieNew.setTitle("Mr Bin");
        if(movieNew.getTitle()!=null || movieNew.getRating()!=null)
        {
             System.out.println("Now Showing... "+movieNew.getTitle());             
        }
        else
        {
            throw new MyException ("The  movie properties are not set.");
        }            
    }
     /*Checks if Movie properties are set, if not throws MyException
      * takes a collection of Human - Adult and Child
      */ 
    public void addMovieGoers(Human h) throws MyException
    {
        Human a = new Adult("Joe",43);
        Human b = new Adult("Sue",39);
        Human c = new Adult("Tracy",20);
        Human d = new Child("Sammy",17);
        Human e = new Child("Julie",12);
        Human f = new Child("Mona",6);
        hm.add(a);hm.add(b);hm.add(c);hm.add(d);
        hm.add(e);hm.add(f);

        hm.trimToSize();
        String toPrint = "";

        if(movieNew.getRating()!=null && movieNew.getTitle()!=null)
        {
             if(mrPG.equals(movieNew.getRating())) //movies rated PG
             {                        
                System.out.println("The following can only watch under parental guidance:");
                for(int i = 0; i < hm.size(); i++)
                {
                    Human test = (Human)hm.get(i);
                    if ( test instanceof Child)
                    {
                        if(toPrint.equals("")) 
                        {
                            System.out.println(test);  
                        }
                        else
                        {
                             System.out.println("Children: " + toPrint);
                        }
                     }
                 }
            }
            else if(mrA.equals(movieNew.getRating())) //movies rated Adult
            {
                System.out.println("The following can watch...");
                for ( int i = 0; i < hm.size(); i++)
                {
                    Human test = (Human)hm.get(i);
                    if ( test instanceof Adult)
                    {
                        if(toPrint.equals("")) 
                        {
                            System.out.println(test);  
                        }
                        else
                        {
                             System.out.println("Adults: " + toPrint);
                        }
                    }
                                 
                } 
            }
            else //Movies rated G
            {                        
                System.out.println("This is movie rated G. So the following can watch"+
                        ": "+hm+"");
            }
        }
        else
        {
            throw new MyException("The Movie properties are not set.");
        } 
    }

    public static void main(String args[]) throws MyException
    { 
        Cinema cn = new Cinema();
        Human h = new Human();
        //instantiating and setting properties to the movie 
        Movie movieNew = new Movie();
        movieNew.setName("Comedy");
        movieNew.setRating("PG");
        movieNew.setTitle("Mr Bin");
        try
        {
            if(movieNew.getRating()!=null && movieNew.getTitle()!=null)
            {
                cn.showMovie();
                
            }
        }
        catch(MoviePropertiesNotSetException msg)
        {
            System.out.println("Nothing");
        }

//        System.out.println("Setting Movie properties:");
//        cn.setMovie(movieNew);
//        
//        System.out.println("Current Show:");
//        cn.showMovie(); 
//        
//        System.out.println("Movie Goers are: ");
//        cn.addMovieGoers(h);   
        
    }
}

NOTE
Creating your own exceptions and passing them to the controlling module (here method with scenarios). After an exception occurs your code should stop execution of current scenario and go to another one.
I need to see several scenarios resulting with different exceptions being thrown before finally executing a final scenario without exceptions being thrown.

Recommended Answers

All 11 Replies

First of all the way you create your own exceptions is wrong. You don't need to create a String variables: exception.
The Exception class has a method: getMessage() which returns the description of the exception that occurred with everything you need to know. So you don't need the getException() method.
When you call super(msg); you set the message to be the String that you passed as argument, so when you call the getMessage() of your exception that argument will be returned:

public class IllegalAgeException extends Exception
{
    /**
     * Creates a new instance of <code>IllegalAgeException</code> without detail message.
     */
    //String exception;
    public IllegalAgeException() 
    {
         super();
         //exception="Unknown";
    }
    /**
     * Constructs an instance of <code>IllegalAgeException</code> with the specified detail message.
     * @param msg the detail message.
     */
    public IllegalAgeException(String msg) 
    {
        super(msg);
        //this.exception=msg;
    }
/*
    public String getException()
    {
        return this.exception;
    }
*/
}

How to use it:

Whenever something bad happens that it is wrong and you don't want it to happen call: throw new IllegalAgeException (); in a method. Then at the declararion of that method add: throws IllegalAgeException When you call that method, put it inside a try-catch and treat it as usual:

public void setAge(int age) throws IllegalAgeException {
  if (age<=0) throw new IllegalAgeException("Age: "+age+" must be positive");
  this.age = age;
}

AND

YourClass obj = new YourClass();
try {
  obj.setAge(10); 
} catch (IllegalAgeException iae) {
   System.out.println(iae.getMessage());
}

Thanks for that. But like my addMovieGoers(Human h) method

public void addMovieGoers(Human h) throws IllegalAgeException
    { 
}

I have an ArrayList with more than one age. How do I throw an IllegalAgeException for example for a 5 years old kid?

And: I have three methods setMovie(Movie movieNew) ; showMovie(); and addMovieGoers(Human h). How do I call them in that order in my main method?

Before you add the argument h to the ArrayList do this:
If the age of the human is lower than 5 then throw a new IllegalAgeException


Call them in that order in the main method

and in the showMovie() method, is there a way I can check the movie properties in the movieNew object created in the main method without having to set the movie properties in the method?

/**
    * Method check that the movie title and rating have been set,
    * if not throw MoviePropertiesNotSetException.
    */
    public void showMovie() throws MoviePropertiesNotSetException
    { 
        movieNew.setName("Comedy");
        movieNew.setRating("PG");
        movieNew.setTitle("Mr Bin");
        if(movieNew.getTitle()!=null || movieNew.getRating()!=null)
        {
             System.out.println("Now Showing... "+movieNew.getTitle());             
        }
        else
        {
            throw new MoviePropertiesNotSetException ("The  movie properties are not set.");
        }            
    }

The throw new MoviePropertiesNotSetException ("The movie properties are not set."); will be in the set methods. So when you create the movieNew object in main you will get an exception if the attributes are not set

okay, I've modified my Cinema class to look like this

import java.util.*;
public class Cinema 
{
    float cost;
    String Title;

    String mrPG="PG";
    String mrA="A";
    String mrG="G";
      
    Movie movieNew = new Movie();
    
     //MovieRating class
    MovieRating mrating = new MovieRating();
    private ArrayList<Human> hm = new ArrayList();
    
    public Cinema()
    {
        
    }
    public Cinema (String mtitle, float pounds) 
    {
            this.Title=mtitle;
            this.cost = pounds;
    }

    public float getcost (int people) 
    {
        return cost * people;
    }
       
    /**
    * Method check that the movie title and rating have been set,
    * if not throw MoviePropertiesNotSetException.
    */
    public  void setMovie(Movie movieNew) throws MoviePropertiesNotSetException
    { 
        if(movieNew.getTitle()!=null && movieNew.getRating()!=null)
        {
             System.out.println("The movie is called " +movieNew.getTitle()+ 
                    " and is rated " +movieNew.getRating()+ ".");
        }
        else
        {
            throw new MoviePropertiesNotSetException("The Movie properties not set");
        }
    }
    /**
    * Method check that the movie title and rating have been set,
    * if not throw MoviePropertiesNotSetException.
    */
    public void showMovie() throws MoviePropertiesNotSetException
    { 
        movieNew.setName("Comedy");
        movieNew.setRating("G");
        movieNew.setTitle("Mr Bin");
        if(movieNew.getTitle()!=null || movieNew.getRating()!=null)
        {
             System.out.println("Now Showing... "+movieNew.getTitle());             
        }
        else
        {
            throw new MoviePropertiesNotSetException ("The  movie properties are not set.");
        }            
    }
     /**Checks if Movie properties are set, if not throws MyException
      * takes a collection of Human - Adult and Child
      */ 
    public void addMovieGoers(Human h) throws IllegalAgeException
    {
        Human a = new Adult("Joe",43);
        Human b = new Adult("Sue",39);
        Human c = new Adult("Tracy",20);
        Human d = new Child("Sammy",17);
        Human e = new Child("Julie",12);
        Human f = new Child("Mona",6);
        hm.add(a);hm.add(b);hm.add(c);hm.add(d);
        hm.add(e);hm.add(f);
        
        hm.trimToSize();
        String toPrint = "";
        
            if(movieNew.getRating()!=null && movieNew.getTitle()!=null)
            {
                 if(mrPG.equals(movieNew.getRating())) //movies rated PG
                 {                        
                    System.out.println("The following can only watch under parental guidance:");
                    for(int i = 0; i < hm.size(); i++)
                    {
                        Human test = (Human)hm.get(i);
                        if ( test instanceof Child)
                        {
                            if(toPrint.equals("")) 
                            {
                                System.out.println(test);  
                            }
                            else
                            {
                                 System.out.println("Children: " + toPrint);
                            }
                         }
                     }
                }
                else if(mrA.equals(movieNew.getRating())) //movies rated Adult
                {
                    System.out.println("The following can watch...");
                    for ( int i = 0; i < hm.size(); i++)
                    {
                        Human test = (Human)hm.get(i);
                        if ( test instanceof Adult)
                        {
                            if(toPrint.equals("")) 
                            {
                                System.out.println(test);  
                            }
                            else
                            {
                                 System.out.println("Adults: " + toPrint);
                            }
                        }

                    } 
                }
                else if(mrG.equals(movieNew.getRating()))//Movies rated G
                {                        
                    System.out.println("This is movie rated G. So the following can watch"+
                            ": "+hm+"");
                }
                else
                {
                    throw new IllegalAgeException("You may not be old enough to watch a movie.");
                }
            }

        
    }

    public static void main(String args[]) throws MoviePropertiesNotSetException, IllegalAgeException
    { 
        Cinema cn = new Cinema();
        Human h = new Human();       
        try
        {
             //instantiating and setting properties to the movie 
            Movie movieNew = new Movie();
            movieNew.setName("Comedy");
            movieNew.setRating("G");
            movieNew.setTitle("Mr Bin");
          
            cn.setMovie(movieNew);            
            cn.showMovie();  
            cn.addMovieGoers(h);
        }
        catch(MoviePropertiesNotSetException exp)
        {
            System.out.println(exp.getMessage());
        }
        catch(IllegalAgeException msg)
        {
            System.out.println(msg.getMessage());
        }
        finally
        {
            System.out.println("Movie is over! Have a good day.");
        }

    }
}

But then i dont know if this condition is met:
Add several scenarios resulting with different exceptions being thrown before finally executing a final scenario without exceptions being thrown.

This is wrong:

public void showMovie() throws MoviePropertiesNotSetException
    { 
        movieNew.setName("Comedy");
        movieNew.setRating("G");
        movieNew.setTitle("Mr Bin");
        if(movieNew.getTitle()!=null || movieNew.getRating()!=null)
        {
             System.out.println("Now Showing... "+movieNew.getTitle());             
        }
        else
        {
            throw new MoviePropertiesNotSetException ("The  movie properties are not set.");
        }            
    }

The movie is already set by the setMovie method. And here you are going and changing what it was entered with fixed values: (Comedy,G,MR Bin). All you need to do is check if the movie attribute was set:

public void showMovie() throws MoviePropertiesNotSetException
    { 
        if ((movieNew!=null) && (movieNew.getTitle()!=null) && (movieNew.getRating()!=null))
        {
             System.out.println("Now Showing... "+movieNew.getTitle());             
        }
        else
        {
            throw new MoviePropertiesNotSetException ("The  movie properties are not set.");
        }            
    }

You are making the same mistake with addMovieGoers. You are supposed to take the argument and add it to the ArrayList. The user calling the method will set which "humans" will "watch" the movie. And again you are using fixed values. It is as if the method has no meaning of existence since it makes no difference what the argument is since you don't use it

You are making the same mistake with addMovieGoers. You are supposed to take the argument and add it to the ArrayList. The user calling the method will set which "humans" will "watch" the movie. And again you are using fixed values. It is as if the method has no meaning of existence since it makes no difference what the argument is since you don't use it

How do I do that, I'm a little green in java and your help so far is appreciated. Can you just show me how to do it?

Are you asking how to add something to an ArrayList? If so, and your ArrayList is called myList, use myList.add(item); where item is what you want to add to the ArrayList.

look at the method below

public void addMovieGoers(Human h) throws IllegalAgeException
    {
        Human a = new Adult("Joe",43);
        Human b = new Adult("Sue",39);
        Human c = new Adult("Tracy",20);
        Human d = new Child("Sammy",17);
        Human e = new Child("Julie",12);
        Human f = new Child("Mona",6);
        hm.add(a);hm.add(b);hm.add(c);hm.add(d);
        hm.add(e);hm.add(f);
        
        hm.trimToSize();
        String toPrint = "";
        
            if(movieNew.getRating()!=null && movieNew.getTitle()!=null)
            {
                 if(mrPG.equals(movieNew.getRating())) //movies rated PG
                 {                        
                    System.out.println("The following can only watch under parental guidance:");
                    for(int i = 0; i < hm.size(); i++)
                    {
                        Human test = (Human)hm.get(i);
                        if ( test instanceof Child)
                        {
                            if(toPrint.equals("")) 
                            {
                                System.out.println(test);  
                            }
                            else
                            {
                                 System.out.println("Children: " + toPrint);
                            }
                         }
                     }
                }
                else if(mrA.equals(movieNew.getRating())) //movies rated Adult
                {
                    System.out.println("The following can watch...");
                    for ( int i = 0; i < hm.size(); i++)
                    {
                        Human test = (Human)hm.get(i);
                        if ( test instanceof Adult)
                        {
                            if(toPrint.equals("")) 
                            {
                                System.out.println(test);  
                            }
                            else
                            {
                                 System.out.println("Adults: " + toPrint);
                            }
                        }

                    } 
                }
                else if(mrG.equals(movieNew.getRating()))//Movies rated G
                {                        
                    System.out.println("This is movie rated G. So the following can watch"+
                            ": "+hm+"");
                }
                else
                {
                    throw new IllegalAgeException("You may not be old enough to watch a movie.");
                }
            }

        
    }

javaAddict is telling me :"You are making the same mistake with addMovieGoers. You are supposed to take the argument and add it to the ArrayList. The user calling the method will set which "humans" will "watch" the movie. And again you are using fixed values. It is as if the method has no meaning of existence since it makes no difference what the argument is since you don't use it"

So can you help me correct this?

The argument: Human h is the one to be added in the ArrayList.
The way you have it. no matter what the argument is, you will always insert the same values:

Human a = new Adult("Joe",43);
        Human b = new Adult("Sue",39);
        Human c = new Adult("Tracy",20);
        Human d = new Child("Sammy",17);
        Human e = new Child("Julie",12);
        Human f = new Child("Mona",6);
        hm.add(a);hm.add(b);hm.add(c);hm.add(d);
        hm.add(e);hm.add(f);

It is the argument that you need to insert. Of course before adding it do whatever checks are necessary.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.