1

I am doing Java for the first time at a college. I'm struggling with the printing to work. I am unable to print, or let the program to print anything at all. I think the issue is in the display methods, but can't figure it out for the life of me. So after all the comments below I have made the changes, however I am now getting it that it only prints the headers in each method, and gives the following error when I try to add an additional event to the array.

Add Events:

Exception in thread "main" java.lang.NullPointerException
at JavaAssignment1.TestEvent.addEvents(TestEvent.java:207)
at JavaAssignment1.TestEvent.main(TestEvent.java:28)

TestEvent.java:

package JavaAssignment1;

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;
    int option = 0;

    Event [] allEvents = new Event [25];

    do
    {
        option = mainMenu(option);

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

            case 2:
                displayEvents(allEvents);
            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)
{
    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("Event 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("Event 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)
{
    System.out.println("\nEvents:");

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


}

private static void addEvents (Event[] allEvents)
{
    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;

        newEvent[i] = new Event();

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

        System.out.println("\n\tPlease enter event name for 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 ("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 ("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 ("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\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());

    //}
}



}
Roman C
  • 49,761
  • 33
  • 66
  • 176
Gooner
  • 31
  • 4

3 Answers3

2

Strings are compared with equals method

allEvents[i].getCategory() == "Premiership"
"Premiership".equals(allEvents[i].getCategory())

You have used a lot of static methods that aren't necessary to run the application. In the typical console application only main method should be static. You should create objects, and use it's methods and properties even in the same class.

== means that Objects are equal, has the same reference. It is only achievable if you use static constants like

public static final String PERMSHIP = "Premiership";

and use it everywhere in the code, but it's very bad practice.

Roman C
  • 49,761
  • 33
  • 66
  • 176
  • Hi Roman, thanks for the help. When I try to execute this it is throwing the following error - Exception in thread "main" java.lang.NullPointerException at JavaAssignment1.TestEvent.displayCategoryIncomes(TestEvent.java:263) at JavaAssignment1.TestEvent.main(TestEvent.java:64) – Gooner Apr 14 '16 at 10:02
  • What the line it is? – Roman C Apr 14 '16 at 10:08
  • when I take static out from them the compiler gives an error to change back to static – Gooner Apr 14 '16 at 10:13
  • the error on line 263 refers to if ("Premiership".equals(allEvents[i].getCategory())), the error on line 64 refers to case 5: displayCategoryIncomes(allEvents); break; – Gooner Apr 14 '16 at 10:14
  • allEvents[i] is null, add a check for null first. if (allEvents[i] != null && "Premiership".equals(allEvents[i].getCategory())). You can fix nullpointer exception, but there's a reason you got it, because you didn't initialize an array. Use arraylist instead. – Roman C Apr 14 '16 at 10:20
  • if(allEvents[i] != null) I added this to try and get it to print, the items in the array don't seem to be printing though – Gooner Apr 14 '16 at 10:26
  • I have never used arraylist before, so not sure what way it works. – Gooner Apr 14 '16 at 11:16
  • is it possible to add to the arrays of this nature, ie in my case add new events to it? – Gooner Apr 14 '16 at 11:47
  • arrays are fixed length, if it riches a cap you have to recreate the array to add additional space and copy its contents. The arraylist has no limited size and better convert em to this. – Roman C Apr 14 '16 at 13:04
0

Use "System.out.println" not System.out.printf

0

Euh how can you compile your code this will not work

Event [] allEvents = new Event [noOfEvents];
public static int createArray(Event [] allEvents){
   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);
...

When you specify allEvents[0] compiler doesn't know if you want to modify this.allEvents[0] or parameter value

What is

My.p(String value)

Does it works to print a String use

System.out.print(String valueToPrint)

Or

System.out.println(String valueToPrint)

The secund one adds '\n' at the end of String to print

Useful option in parameters here you don't use it in your function

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

    My.p("\n\nEvent Menu");
    My.p("\n----------------------------");
    My.p("\n1 - Add Event");
    My.p("\n2 - Display All Events");
    My.p("\n3 - Search Events");
    My.p("\n4 - Display Incomes for Events");
    My.p("\n5 - Display Incomes by Category");
    My.p("\n6 - Exit");
    My.p("\nEnter Option (1 - 6): ");
    tempOption = key.nextInt();
    key.nextLine();

    return tempOption;
}

allEvents [i].getCategory() == "Cup" this doesn't works category is a String

best practices :

"Cup".equals(allEvents[i].getCategory())

And for the end

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

I don't like printf prefere print or println but if you want to use printf do it this way

System.out.printf("\n\n\t%s", allEvents.toString());
  • %s : String
  • %d : decimal
  • %f : float
gori
  • 1,164
  • 1
  • 11
  • 14
  • This won't work System.out.printf("\n\nNumber entered " + input + " is between " + min + " & " + max); System.out.printf("\n\n\t" + allEvents.toString()); This will work System.out.printf("\n\n\t%s" + allEvents.toString()); System.out.printf("\n\n%s %d %s %d %s %d", Number entered ", input, " is between, min , " & ", max); or best parctice System.out.println("\n\nNumber entered " + input + " is between " + min + " & " + max); System.out.println("\n\n\t" + allEvents.toString()); – gori Apr 14 '16 at 11:02
  • This code was meant to help validate the menu. 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\nInvalid input! Please re-enter a value between " + min + " and " + max + ": "); } else { valid = true; System.out.printf("\n\nNumber entered " + input + " is between " + min + " & " + max); } } while (!valid); return input; } – Gooner Apr 14 '16 at 11:05