-2

I am a new Java student and experiencing an issue with a piece of code that I am writing. I am not getting any specific error messages, but when I select an option in the menu it does not display anything apart from the headers for each item. This was previously throwing null pointer errors, but they seem to have been corrected.

This is an example of what comes out when run:

5 - Display Incomes by Category
6 - Exit
Enter Option (1 - 6): 
5


Income Per Category:


Category                Actual Income           Pecentage of Income Achieved

This is the code:

package Java;

import java.util.Scanner;

import firstPrograms.My;
import firstPrograms.MyDate;
import firstPrograms.MyTime;

public class TestEvent 
{
public static Scanner key = new Scanner(System.in);


public static void main(String[] args)
{
    int noOfEvents = 25;  // number of stipulated events
    int option = 0;

    Event [] allEvents = new Event [noOfEvents];

    do
    {
        option = mainMenu(option);

        switch (option)
        {
            case 1:
                addEvents(allEvents, noOfEvents);
            break;

            case 2:
                displayEvents(allEvents, noOfEvents);
            break;

            case 3:
                //System.out.println("\nEnter Search criteria here");
                do
                {
                    option = searchMenu(option);

                    switch (option)
                    {
                        case 1:
                            //addEventsByEventNo(allEvents);
                            System.out.println("\nEnter Search criteria here");
                        break;

                        case 2:
                            //displayEventsByEventDate(allEvents);
                            System.out.println("\nEnter Search criteria here");
                        break;

                        case 3:
                            //displayEventsByEventCategory(allEvents);
                            System.out.println("\nEnter Search criteria here");
                        break;

                        case 4:
                            //displayIncomes(allEvents);
                        break;

                        //case 5:
                        //  displayCategoryIncomes(allEvents);

                        //break;

                        //case 6:
                            //System.out.println("\nGoodbye");
                    }

                }while (option != 4);
            break;

            case 4:
                displayIncomes(allEvents);
            break;

            case 5:
                displayCategoryIncomes(allEvents);

            break;

            case 6:
                System.out.println("\nGoodbye");
        }

    }while (option != 6);

}

public int createArray(Event [] allEvents) // prepopulation of a certain amount of items into the array, leaving some space for additions
{
    allEvents[0] = new Event (1000, "West Ham United v Arsenal", "Premiership", new MyDate (9, 03, 2016),  new MyDate (9, 04, 2016), new MyTime (12, 45, 00), "Upton Park", 3500, 3498, 65.00, 0.025);
    allEvents[1] = new Event (1001, "Sunderland v Arsenal", "Premiership", new MyDate (24, 03, 2016),  new MyDate (24, 04, 2016), new MyTime (14, 05, 00), "Stadium of Light", 500, 500, 75.00, 0.05);
    allEvents[2] = new Event (1002, "Arsenal v Crystal Palace", "Premiership", new MyDate (17, 03, 2016),  new MyDate (17, 04, 2016), new MyTime (16, 05, 00), "Emirates Stadium", 100, 98, 125.00, 0.025);
    allEvents[3] = new Event (1003,"Arsenal v West Bromwich Albion", "Premiership", new MyDate (21, 03, 2016),  new MyDate (21, 04, 2016), new MyTime (19, 45, 00), "Emirates Stadium", 125, 72, 95.00, 0.025);
    allEvents[4] = new Event (1004, "Arsenal v Norwich City", "Premiership", new MyDate (30, 03, 2016),  new MyDate (30, 04, 2016), new MyTime (17, 30, 00), "Emirates Stadium", 1250, 1137, 110, 0.025);
    allEvents[5] = new Event (1005, "Manchester City v Arsenal", "Premiership", new MyDate (8, 04, 2016),  new MyDate (8, 05, 2016), new MyTime (16, 05, 00), "Etihad Stadium", 5000, 4796, 75.00, 0.05);
    allEvents[6] = new Event (1006, "Arsenal v Aston Villa", "Premiership", new MyDate (15, 04, 2016),  new MyDate (15, 05, 2016), new MyTime (19, 30, 00), "Emirates Stadium", 1250, 872, 16.00, 0.025);
    allEvents[7] = new Event (1007, "MLS All-Stars v Arsenal", "Friendly", new MyDate (28, 01, 2016),  new MyDate (28, 07, 2016), new MyTime (17, 00, 00), "Avaya Stadium", 500, 391, 75.00, 0.05);
    allEvents[8] = new Event (1008, "Chivas de Guadalajara v Arsenal", "Friendly", new MyDate (31, 01, 2016),  new MyDate (31, 07, 2016), new MyTime (19, 30, 00), "StubHub Center", 1250, 872, 16.00, 0.025);
    allEvents[9] = new Event (1009, "West Ham United v Manchester United", "Cup", new MyDate (13, 03, 2016),  new MyDate (13, 04, 2016), new MyTime (19, 00, 00), "Upton Park", 750, 615, 85.00, 0.075);
    allEvents[10] = new Event (1010, "Everton v TBC (West Ham or Man United)", "Cup", new MyDate (14, 04, 2016),  new MyDate (23, 04, 2016), new MyTime (17, 15, 00), "Wembley Stadium", 10000, 5000, 150.00, 0.015);
    allEvents[11] = new Event (1011, "Crystal Palace v Watford", "Cup", new MyDate (24, 03, 2016),  new MyDate (24, 04, 2016), new MyTime (16, 00, 00), "Wembley Stadium", 10000, 10000, 150.00, 0.015);
    allEvents[12] = new Event (1012, "FA Cup Final - TBC", "Cup", new MyDate (25, 04, 2016),  new MyDate (21, 05, 2016), new MyTime (15, 00, 00), "Wembley Stadium", 20000, 0, 150.00, 0.015);
    allEvents[13] = new Event (1013, "UEFA Champions League Final - TBC", "Europe", new MyDate (5, 5, 2016),  new MyDate (28, 05, 2016), new MyTime (19, 45, 00), "Stadio Giuseppe Meazza", 25000, 0, 350.00, 0.01);
    allEvents[14] = new Event (1014, "UEFA Europa League Final - TBC", "Europe", new MyDate (6, 05, 2016),  new MyDate (18, 05, 2016), new MyTime (19, 45, 00), "St. Jakob-Park", 20000, 0, 250.00, 0.015);

    return 16;
}

public static int mainMenu(int option)
{
    int tempOption = 0;

    System.out.println("\n\nEvent Menu");
    System.out.println("----------------------------");
    System.out.println("1 - Add Event");
    System.out.println("2 - Display All Events");
    System.out.println("3 - Search Events");
    System.out.println("4 - Display Incomes for Events");
    System.out.println("5 - Display Incomes by Category");
    System.out.println("6 - Exit");
    System.out.println("Enter Option (1 - 6): ");
    tempOption = key.nextInt();
    key.nextLine();

    return tempOption;
}

public static int searchMenu(int option)
{
    int tempOption = 0;

    System.out.println("\n\nEvent Menu");
    System.out.println("----------------------------");
    System.out.println("1 - Search By Event No");
    System.out.println("2 - Search By Date");
    System.out.println("3 - Search By Category");
    //System.out.println("4 - Display Incomes for Events");
    //System.out.println("5 - Display Incomes by Category");
    System.out.println("4 - Previous Menu");
    System.out.println("Enter Option (1 - 4): ");
    tempOption = key.nextInt();
    key.nextLine();

    return tempOption;
}

public int option(int min, int max)
{
    int input;
    boolean valid;


    do
    { 
        valid = false;
        input = key.nextInt();

        if (input < min || input > max)
        {            
            System.out.printf("\n\n%s%d%s%d%s", "Invalid input! Please re-enter a value between ", min, " and ", max, ":  ");   
        }
        else
        {
            valid = true;
            //System.out.printf("\n\n%s%d%s%d%s%d", "Number entered ", input, " is between ", min, " & ", max); 
        }

    } while (!valid);

    return input;
}

private static void displayEvents(Event [] allEvents, int noOfEvents)
{
    System.out.println("\nEvents:");

    //for (int i = 0; i < allEvents.length; i++)
    //{
        //if(allEvents[i] != null)
        //System.out.printf("\n\n\t" + allEvents.toString());
    //}

        int rowTotal = 0;

        if(allEvents[rowTotal] != null)
        {
            do
            {
                System.out.println(allEvents[rowTotal].toString());
                rowTotal++;
            }while (rowTotal < allEvents.length);
        }


}

private static void addEvents (Event[] allEvents, int noOfHours)
{
    System.out.println("\nAdd Events:");

    int day = 0, month = 0, year = 0;
    MyDate tempSaleDate;
    MyDate tempEventDate;
    int hour = 0, mins = 0, secs = 0;
    MyTime tempTime;
    boolean answer = false;
    String keyedAnswer = "";



    for (int i = 0; i < allEvents.length; i++)
    {   
        //Event[] newEvent = null;

        //Event[] newEvent = new Event[allEvents.length] ;

        //Event newEvent = allEvents[i + 1];

        //newEvent[i] = new Event();

        allEvents[i] = new Event();

        //allEvents[i].setEventNo((allEvents[allEvents.length - 1]).getEventNo() + 1);
        allEvents[i].setEventNo((allEvents[i].getEventNo() + 1));

        System.out.println("\n\tPlease enter name of event: ");
        allEvents[i].setEventName(key.nextLine());
        System.out.println("\tPlease enter the event's category: ");
        allEvents[i].setCategory(key.nextLine());
        System.out.println("\tPlease enter event location: ");
        allEvents[i].setVenue(key.nextLine());
        System.out.println("\tPlease enter the event's tickets date of sale (ie 1 - 31): ");
        day = key.nextInt();
        System.out.println("\tPlease enter the event's tickets month of sale (ie 1 - 12): ");
        month = key.nextInt();
        System.out.println("\tPlease enter the event's tickets year of sale (ie 2016): ");
        year = key.nextInt();
        tempSaleDate =  new MyDate(day, month, year);
        allEvents[i].setDateOnSale(tempSaleDate);
        key.nextLine();
        System.out.println("\tPlease enter the event's date of event (ie 1 - 31): ");
        day = key.nextInt();
        System.out.println("\tPlease enter the event's month of event (ie 1 - 12): ");
        month = key.nextInt();
        System.out.println("\tPlease enter the event's year of event (ie 2016): ");
        year = key.nextInt();
        tempEventDate = new MyDate(day, month, year);
        allEvents[i].setEventDate(tempEventDate);
        key.nextLine();
        System.out.println("\tPlease enter the event's start hour (ie 1am = 1, 10am = 10, 10pm = 22, etc): ");
        hour = key.nextInt(); 
        key.nextLine();
        System.out.println("\tPlease enter the event's  start minutes (ie = 00, 15, 30, 45, etc): ");
        mins = key.nextInt();
        key.nextLine();
        tempTime = new MyTime(hour, mins, secs);
        allEvents[i].setEventTime(tempTime);
        System.out.println("\tPlease enter the event's ticket allocation: ");
        allEvents[i].setTicketsReceived(key.nextInt());
        key.nextLine();
        System.out.println("\tPlease enter the amount of tickets sold for the event: ");                    
        allEvents[i].setTicketsSold(key.nextInt());
        key.nextLine();
        System.out.println("\tPlease enter the event's ticket cost: £");
        allEvents[i].setTicketCost(key.nextDouble());
        key.nextLine();
        System.out.println("\tPlease enter the event's ticket commission rate: ");
        allEvents[i].setCommissionRate(key.nextDouble());
        key.nextLine();
        System.out.println("\n\t\tWould you like to add another event (Y / N): ");
        keyedAnswer = key.nextLine();
        //System.out.println("\n\tKeyed Answer = " + keyedAnswer);

        if (answer = keyedAnswer.equalsIgnoreCase("N"))
        {
            answer = false;
            break;
        }
        else
        {
            answer = true;
        }
    }
}

public static void displayIncomes(Event[] allEvents)
{   
    System.out.println("\n\nIncome per event");
    System.out.println("\n\n\tEvent No" + "\t\tEvent" + "\t\t\t\tActual Income" + "\t\t\t\tPotential Income");

    for (int i = 0; i < allEvents.length; i++)
    {
        if(allEvents[i] != null)
        System.out.println("\n\n\t" + allEvents[i].getEventNo() + "\t\t" + allEvents[i].getEventName() + "\t\t\t£" + allEvents[i].getActualIncome() + "\t\t\t£" + allEvents[i].getPotentialIncome());
    }   
}

public static void displayCategoryIncomes(Event[] allEvents)
{
    double tempActualIncome = 0.00, totalTemp = 0.00;
    double percentageAchieved = 0.00;
    String tempCategory;

    System.out.println("\n\nIncome Per Category:");
    System.out.println("\n\n\tCategory" + "\t\t\t\tActual Income" + "\t\t\tPecentage of Income Achieved");

    for (int i = 0; i < allEvents.length; i++)
    {
        //if(allEvents[i] != null)
        //{
            //if (allEvents[i].getCategory() == "Premiership")
            //if ("Premiership".equals(allEvents[i].getCategory()))
            if (allEvents[i] != null && "Premiership".equals(allEvents[i].getCategory()))
            {
                //double tempActualIncome = 0.00;
                //double percentageAchieved = 0.00;
                //String tempCategory;

                tempActualIncome = allEvents[i].getActualIncome();
                totalTemp += tempActualIncome;
                percentageAchieved = (tempActualIncome / allEvents[i].getPotentialIncome()) * 100;
                tempCategory = "Premiership";

                System.out.printf("%s%s%s%.2f%s%.2f", "\n\t", tempCategory, "\t\t\t\t£", totalTemp, "\t\t\t\t", percentageAchieved);
            }
            //else if (allEvents [i].getCategory() == "Friendly")
            else if (allEvents[i] != null && "Friendly".equals(allEvents[i].getCategory()))
            {
                //double tempActualIncome = 0.00;
                //double percentageAchieved = 0.00;
                //String tempCategory;

                tempActualIncome += allEvents[i].getActualIncome();
                percentageAchieved = (tempActualIncome / allEvents[i].getPotentialIncome()) * 100;
                tempCategory = "Friendly";

                //System.out.println("\n\n\t" + tempCategory + "\t\t\t£" + tempActualIncome);
                System.out.printf("%s%s%s%.2f%s%.2f", "\n\t", tempCategory, "\t\t\t\t£", tempActualIncome, "\t\t\t\t", percentageAchieved);
            }

            //else if (allEvents [i].getCategory() == "Cup")
            else if (allEvents[i] != null && "Cup".equals(allEvents[i].getCategory()))
            {
                //double tempActualIncome = 0.00;
                //double percentageAchieved = 0.00;
                //String tempCategory;

                tempActualIncome += allEvents[i].getActualIncome();
                percentageAchieved = (tempActualIncome / allEvents[i].getPotentialIncome()) * 100;
                tempCategory = "Cup";

                System.out.println("\n\n\t" + tempCategory + "\t\t\t£" + tempActualIncome);
            }

            //else if (allEvents [i].getCategory() == "Europe")
            else if (allEvents[i] != null && "Europe".equals(allEvents[i].getCategory()))
            {
                //double tempActualIncome = 0.00;
                //double percentageAchieved = 0.00;
                //String tempCategory;

                tempActualIncome += allEvents[i].getActualIncome();
                percentageAchieved = (tempActualIncome / allEvents[i].getPotentialIncome()) * 100;
                tempCategory = "Europe";

                System.out.println("\n\t" + tempCategory + "\t\t\t£" + tempActualIncome);
            }

    }
    //}
    //for (int i = 0; i < allEvents.length; i++)
    //{
        //System.out.println("\n\n\t" + allEvents[i].getCategory()+ "\t\t\t£" + allEvents[i].getActualIncome() + "\t\t\t£" + allEvents[i].getPotentialIncome());

    //}
}               

}

Gooner
  • 31
  • 4

2 Answers2

1

Sir this is obvious stuff, since your Event array is not initialized : Change :

Event[] newEvent = null; 

to

Event[] newEvent = new Event[allEvents.length] ; 

Also I think you should do this array initialization code before starting for loop

Optional
  • 4,081
  • 3
  • 22
  • 42
  • ok so I did what you suggested and changed the code as you indicated, but it just throws the same error for the next line of code – Gooner Apr 15 '16 at 10:57
0

This is your problem:

Event[] newEvent = null;

Initialize the Event array before using it.

Please read the Java documentation for Arrays to get a better understanding.

Diyarbakir
  • 1,809
  • 18
  • 30