如何在Java中打印到控制台?

问题描述 投票:0回答:3

我是在大学里第一次学习 Java。我正在努力打印工作。我无法打印,或者根本无法让程序打印任何内容。我认为问题出在显示方法上,但我无法解决它。因此,在下面的所有评论之后,我已经进行了更改,但是,我现在明白了,它只打印每个方法中的标题,并在我尝试向数组添加附加事件时给出以下错误。

添加活动:

线程“main”中的异常 java.lang.NullPointerException 在 JavaAssignment1.TestEvent.addEvents(TestEvent.java:207) 在 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());
        
    //}
   }
}
java printing console-application
3个回答
2
投票

字符串与

equals
方法进行比较

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

您使用了很多运行应用程序不必要的

static
方法。在典型的控制台应用程序中,只有
main
方法应该是静态的。您应该创建对象,并使用它的方法和属性,即使在同一个类中也是如此。

==
表示对象是相等的,具有相同的引用。只有使用像

这样的静态常量才能实现这一点
public static final String PERMSHIP = "Premiership";

并在代码中的任何地方使用它,但这是非常糟糕的做法。


0
投票

使用“System.out.println”而不是System.out.printf


0
投票

呃,你怎么能编译你的代码,这不起作用

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

当你指定allEvents[0]时编译器不知道你是要修改this.allEvents[0]还是参数值

什么是

My.p(String value)

打印字符串是否有效

System.out.print(String valueToPrint)

或者

System.out.println(String valueToPrint)

第二个添加' ' 在要打印的字符串末尾

此处参数中的有用选项,您不会在函数中使用它

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"
这不起作用类别是字符串

最佳实践:

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

最后

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

我不喜欢 printf 更喜欢 print 或 println 但如果你想使用 printf 就这样做

System.out.printf("\n\n\t%s", allEvents.toString());
  • %s:字符串
  • %d:十进制
  • %f:浮动
© www.soinside.com 2019 - 2024. All rights reserved.