我的代码输出遇到问题(下面列出了单独的文件和所有文件(,我可以在这里执行正确的操作,直到我需要直接执行一个又一个。它吐出了线程中的异常";主";java.lang.NullPointerException错误,以及它在哪些行是不正确的,但是我现在还不知道如何修复它。(这是在Eclipse编译器中完成的(
public class Assignment4
{
public static void main (String[] args)
{
// local variables, can be accessed anywhere from the main method
char input1 = 'Z';
//String inputInfo= "";
String name, firstName, lastName, city ;
int years = 0;
String line = new String();
// instantiate a Team object
Team suns = null;
printMenu();
//Create a Scanner object to read user input
Scanner scan = new Scanner(System.in);
do // will ask for user input
{
System.out.println("What action would you like to perform?");
line = scan.nextLine();
if (line.length() == 1)
{
input1 = line.charAt(0);
input1 = Character.toUpperCase(input1);
// matches one of the case statement
switch (input1)
{
case 'A': //Add a coach
System.out.print("Please enter the Coach's information:n");
System.out.print("Enter coach's first name:t");
firstName = scan.nextLine();
System.out.print("Enter coach's last name:t");
lastName = scan.nextLine();
System.out.print("Enter coach's years of experience:t");
years = scan.nextInt();
scan.nextLine();
Coach sunsCoach = new Coach(firstName, lastName, years);
System.out.print("nPlease enter the Team's information:");
System.out.print("nEnter teams name:t");
name = scan.nextLine();
System.out.print("Enter Team's city:t");
city = scan.nextLine();
suns = new Team(name, sunsCoach, city);
break;
case 'D': //Display course
System.out.print(suns.toString());
break;
case 'Q': //Quit
break;
case '?': //Display Menu
printMenu();
break;
default:
System.out.print("Unknown actionn");
break;
}
}
else
{
System.out.print("Unknown actionn");
}
} while (input1 != 'Q' || line.length() != 1);
scan.close();
}
/** The method printMenu displays the menu to a user **/
public static void printMenu()
{
System.out.print("ChoicettActionn" +
"------tt------n" +
"AttAdd Coachn" +
"DttDisplay Teamn" +
"QttQuitn" +
"?ttDisplay Helpnn");
}
}
除了这段代码,还有我的两个子类文件,分别是Coach.java和Team.java,如下所示。
public class Coach
{ String firstName, lastName; //constructor
int years;
{ String numYears;
firstName = lastName = numYears = "?";
}
public Coach(String first, String last, int years) { //Set variables
firstName = first;
lastName = last;
int numYears = years;
}
//Accessors
public String getFirstName()
{return firstName;}
public String getLastName()
{return lastName;}
public String getYears()
{String numYears = null;
return numYears;}
// Mutators
public void setFirstName(String theFirstName)
{firstName = theFirstName;}
public void setLastName(String theLastName)
{lastName = theLastName;}
public void setYears(int years)
{int numYears = years;}
public String toString() {
String output = "nLast Name:t" + lastName + "nFirst Name:t " + firstName;
output += "nYears of Experience:t " + getYears() + "n";
return output;
}
}
public class Team {
String teamName;
Coach coach;
String getCity;
//Constructor
public Team() {
teamName = getCity = "?";
}
public Team(String name, Coach coach, String cityName)
{ teamName = name;
}
//Accessors
public String getName() {return teamName;}
public Coach getCoach() {return coach;}
public String getCity() {return getCity;}
//Mutators
public void setName(String theName) {teamName = theName;}
public void setCity(String someCity) {getCity = someCity;}
public void setCoach(String firstName, String lastName, int years)
{ coach = new Coach (firstName, lastName, years);
}
public String toString()
{ String output = "Team's name:t" + teamName + " at " + getCity() + "nCoach Information:";
output += coach.toString();
return output;
}
}
运行代码并输入直到我希望选择选项D,最终会产生以下特定错误:
线程中的异常";主";java.lang.NullPointerException:无法调用"Coach.toString(("因为";这个。教练;为null在Team.toString(Team.java:30(在Assignment4.main(Assignment4.java:68(
suns=新团队(名称,sunCoach,城市(;
正如我所看到的,您将sunCoach作为参数传递给Team的构造函数,但您没有初始化coach对象。
从更新您的代码
public Team(String name, Coach coach, String cityName)
{
teamName = name;
}
至
public Team(String name, Coach coach, String cityName)
{
teamName = name;
coach = coach;
getCity = cityName;
}
这将解决NullPointerException