如何修复Java中Player类与Coach类无输出的问题?
问题分析与解决方案
你遇到的问题很典型——Java程序只会执行一个入口main方法,也就是你Team类里定义的那个,而Player和Coach类里的main方法根本不会被触发执行。另外,这两个类是Team的内部类,直接调用也有语法问题。咱们一步步来修正:
核心问题点
- Java程序的入口是
public static void main(String[] args),整个程序只会启动这一个方法,其他类里的同名方法不会自动运行。 Player和Coach是Team的非静态内部类,必须依赖外部类Team的实例才能创建对象。
修正步骤
- 把
Player和Coach里的main方法改成普通方法,比如分别叫printPlayerRoster()和printCoachInfo(),避免和入口方法混淆。 - 在
Team类的main方法里,先创建Team的实例,然后通过这个实例创建Player和Coach的内部类对象,再调用它们的打印方法。
修正后的完整代码
public class Team { public static void main(String[] args) { String team_name = "Team Georgia"; System.out.println(team_name); // 创建外部类实例,用于初始化内部类 Team team = new Team(); // 实例化Player内部类并调用打印方法 Team.Player playerRoster = team.new Player(); playerRoster.printPlayerRoster(); // 实例化Coach内部类并调用打印方法 Team.Coach coachInfo = team.new Coach(); coachInfo.printCoachInfo(); } // Team Roster public class Player { public void printPlayerRoster() { String[] first_name = {"Jack","Dave","Henry","John","David","Bob","Tony","Malcolm","Hiro","Jack","Jesus","Luck","Ben", "Benny", "Caboose", "Michael","Taylor","Mark","Hiroshida","Jack","Patric","Davin"}; String[] last_name = {"Le","lynth","Luther","Kendral","Larry","John","Dave","Grendal","Lee","Lyn","Susan","Solo","Holmes","Stark","Potter","Welma","Han","Smith","Solo","Weasly","Emma","Bones"}; String[] position = {"Front","Front","Front","Front","Side","Side","Side","Back","Back","Side","Front","Front","Front","Front","Side","Side","Side","Back","Back","Side","Mid","Mid"}; for ( int i = 0; i < first_name.length; i++ ) { System.out.println("First name: " + first_name[i]); System.out.println("Last name: " + last_name[i]); System.out.println("Position: " + position[i]); System.out.println("------------------------"); // 加个分隔线更清晰 } } } // Coach public class Coach { public void printCoachInfo() { String[] first_name = {"Brown","Dave","Jack","King"}; String[] last_name = {"Jun","Jac","Frost","Kong"}; String[] title = {"Head Coach", "Assistant Coach", "Offensive Coordinator", "Defensive Coordinator"}; for ( int i = 0; i < first_name.length; i++ ) { System.out.println("First name: " + first_name[i]+ " Last name: " + last_name[i] + " Position: " + title[i]); System.out.println("------------------------"); } } } }
额外说明
如果你希望Player和Coach类不依赖Team的实例,可以把它们改成静态内部类(加上static关键字),这样创建对象的时候就不需要先创建Team实例了,直接用Team.Player player = new Team.Player();就行。比如:
public static class Player { // ... 方法内容不变 }
这样修改后,运行程序就能先输出队名,接着输出所有球员信息,最后输出教练信息啦!
内容的提问来源于stack exchange,提问作者Quoc Le
相关产品推荐
相关产品推荐

