Gooner Gooner - 7 months ago 10
Java Question

Loop keeps looping(corrected) - Recurring issue with the program exiting when not required

With the help of some of the posts I have managed to get the loops to correct and stop continuously looping. However there are other issues now happening as a result of fixing that. The add feature won't break, and when the other options finish printing to the screen they exit the program instead of returning to the menu.

package Java1;

import java.util.Scanner;


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 opt = 0;

Event [] allEvents = new Event [noOfEvents];

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 Manchester 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);

Event.mainMenu("Event Menu"); // Calls the main menu
opt = Event.option(1, 6); // sets the validation of the numbers entered by the user in the menu

switch (opt)
{
case 1:
{
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;
String keyedAnswer = "";
boolean answer = false;

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

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();

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

}
//break;
//}while(answer == true);
}
}while(answer == true);
}
break;

case 2:
{
Event.headersEventNo();
for (int i = 0; i < allEvents.length; i++)
{
if (allEvents[i] != null)
{
System.out.println(allEvents[i].toString());
}
}
}
break;

case 3:
{
Event.searchMenu("Search Menu"); // Calls the search menu
opt = Event.option(1, 4); // sets the validation of the numbers entered by the user in the menu

int tempEventNo = 0;
int day = 0, month = 0, year = 0;
MyDate tempEventDate;
String tempEventCat = "";

switch (opt)
{
case 1:
{
System.out.println("Please enter the event no: ");
tempEventNo = key.nextInt();
key.nextLine();

for (int i = 0; i < allEvents.length; i++)
{
if (allEvents[i] != null)
{
if (tempEventNo != allEvents[i].getEventNo())
{
i++;
}
else if (tempEventNo == allEvents[i].getEventNo())
{
System.out.println("\t" + allEvents[i]);//break;
}
}
}
}
break;

case 2:
{
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);
key.nextLine();

for (int i = 0; i < allEvents.length; i++)
{
if (allEvents[i] != null)
{
if (tempEventDate.toShortDate().equals(allEvents[i].eventDate.toShortDate()))
{
//i++;
//System.out.println("\t\t" + tempEventDate.toShortDate());
System.out.println("\t\t" + allEvents[i]);
//break;
}
else
{
System.out.println("\t\tNo Events On This Date - " + tempEventDate.toShortDate());
//break;
continue;
}
}
}
}
break;

case 3:
{
System.out.println("Please enter the event category: ");
tempEventCat = key.nextLine();

for (int i = 0; i < allEvents.length; i++)
{
if (allEvents[i] != null)
{
//if (tempEventCat != allEvents[i].getCategory())
if (tempEventCat.equals(allEvents[i].getCategory()))
{
//i++;
System.out.println("\t" + allEvents[i]);
}
else //if (tempEventCat.equals(allEvents[i].getCategory())}
{
i++;


//System.out.println("\t" + allEvents[i]);
//break;
}
}
}
}
break;

case 4:

break;
}
}
break;

case 4:
{
Event.headersEventIncome();

for (int i = 0; i < allEvents.length; i++)
{
if (allEvents[i] != null)
{
System.out.printf("%-9s%-16d%-36s%s%-10.2f%s%.2f", "\n", allEvents[i].getEventNo(), allEvents[i].getEventName(), "\t\t£", allEvents[i].getActualIncome(), "\t\t£", allEvents[i].getPotentialIncome());
}
}
}
break;

case 5:
{
double tempActualIncome = 0.00, totalTemp = 0.00;
double percentageAchieved = 0.00;
String tempCategory;

System.out.println("\n\nIncome Per Category:");
Event.headersCategoryIncome();

for (int i = 0; i < allEvents.length; i++)
{
if(allEvents[i] != null)
{
if ("Premiership".equals(allEvents[i].getCategory()))
{
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 ("Friendly".equals(allEvents[i].getCategory()))
{
tempActualIncome += allEvents[i].getActualIncome();
percentageAchieved = (tempActualIncome / allEvents[i].getPotentialIncome()) * 100;
tempCategory = "Friendly";

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

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

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

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

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


case 6:
{
My.p("\n\n\t\tGoodbye");
}
break;
}
}


}

Answer

I'd do this...

case 2:
    // You may not even require this check, if it's ensured to be non-null.
    if (allEvents != null) {
        Event.headersEventNo();
        for (int i = 0; i < allEvents.length; i++)
        {
            if (allEvents[i] != null)
            {
                System.out.println(allEvents[i].toString());
            }
        }
    }

    break;

You may be better off instantiating a List here though and simply looping through its contents. That way, you can avoid needless null checks.