2016-04-15 49 views
-2

我是一個新的Java學生,遇到一個問題,我正在寫一段代碼。我沒有收到任何特定的錯誤消息,但是當我在菜單中選擇一個選項時,它不會顯示除每個項目的標題以外的任何內容。這是以前拋出空指針錯誤,但他們似乎已被糾正。試圖打印屏幕的事件等,沒有印刷

這是運行時會發生什麼了一個例子:

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


Income Per Category: 


Category    Actual Income   Pecentage of Income Achieved 

這是代碼:

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

    //} 
}    

}

回答

1

爵士,這是顯而易見的東西,因爲你的事件數組未初始化: 更改:

Event[] newEvent = null; 

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

此外我認爲你開始for循環

+0

好吧,我按照您的建議做了改變,並按照您的指示更改了代碼,但它只是爲下一行代碼引發相同的錯誤 – Gooner

0

這是你的問題之前,應該這樣做數組初始化代碼:

Event[] newEvent = null; 

使用它之前,初始化Event陣列。

請閱讀Java documentation for Arrays以獲得更好的理解。