如何在对象数组中获取和设置名称?
How to get and set names in an array of objects?
我有一项家庭作业,但我对 Java 还很陌生,过去两天一直在尝试创建玩家对象数组,设置名称并获取名称。
但无论我尝试什么,我都会出错。我看了很多教程,并准确地复制了他们所做的,但它不起作用。如何正确创建数组和 get/set 名称?
我有一个游戏 class 和一个玩家 class:
游戏class -- 一个版本:
Player[] players = new Player[3];
//All the tutorials I've seen show both these types of putting names in:
players[0] = new Player();
//followed by:
players[0].setName("name");
//or...
players[0] = new Player("human");
//my errors on both: unknown class 'players'...
//unexpected token... invalid method... etc etc
Gmae class - 不同版本(使用方法):
//for the homework, I'm expected to put it all into a method
//ideally I'd be using the setName method from the Players class (below)
//but that doesn't work here
void createPlayers(Player[] players) {
for (Player p : players) {
players[0] = new Player("human");
players[1] = new Player("Greg");
players[2] = new Player("Susan");
}
}
public static void main(String[] args) {
Game obj = new Game();
//I had to change Players[] to static to get a printout but it's not supposed
//to be static
//I tried these separately to check output
//I need to be able to get the name of a player
obj.createPlayers(players); //no output
for (Player pl : players) {
System.out.println("Name = " + pl); //null null null
}
System.out.println(obj.players[0]); //null
obj.player[0].getName(); //cannot resolve symbol 'player'
}
游戏Class -- 另一个版本(将所有内容放在主版本中):
public static void main(String args[]) {
Main game = new Main();
Player p0 = new Player("Jeff"); //it errored if I didn't put a name
Player p1 = new Player("Susan"); //but I need to be able to change names
Player p2 = new Player("Michael");
Player[] players = new Player[3];
players[0] = p0;
players[1] = p1;
players[2] = p2;
p2.setPName("Alan");
System.out.println(p2.getPName()); //output: null
Player class:具有 getter 和 setter 功能,我理想情况下会使用它们来获取和设置玩家名称,但我不知道如何让它们在我的游戏中工作 class。
private String name;
Player (String name) { this.name = name; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
在第一个清单中,您创建没有名称的新玩家是错误的,因为在 class 中定义新构造函数并禁用参数默认构造函数后,您需要添加默认构造函数或创建具有名称的玩家。
Player[] players = new Player[3];
//All the tutorials I've seen show both these types of putting names
in:
players[0] = new Player();
<-- wrong! because you don't have this`
constructor in Player class
您的代码的另一部分也包含错误,您在 Player class 中放置了一个 getter 和 setter 方法名称,但试图将它们与其他名称一起使用。
class Player {
private String name;
Player (String name) { this.name = name; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
}
p2.setPName("Alan");
System.out.println(p2.getPName()); <--this method is not exists
正确的代码应该是这样的,但注意它的设计很糟糕:
public class Main {
public static void main(String...args) {
Game game = new Game();
Player[] players = game.getPlayers();
for(Player player : players) {
System.out.println(player.getName());
}
for(int i = 0; i < players.length; i++) {
players[i].setName("new name");
}
for(Player player : players) {
System.out.println(player.getName());
}
}
}
class Player {
private String name;
public Player(String name) { this.name = name; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
}
class Game {
private Player[] players;
public Game() {
players = { new Player("human"), new Player("Greg"), new Player("Susan") };
}
public Player[] getPlayers() {
return players;
}
}
将此代码放在名称为 Main.java 的文件中,并放在控制台中的同一文件夹中
javac Main.java 之后用 java Main 命令启动你的程序
输出将是:
human
Greg
Susan
new name
new name
new name
- 您似乎没有默认构造函数。所以你需要将名称传递给构造函数。这是您第一次尝试时出现未定义方法错误的原因。
- 第二次,玩家没有在本地范围内声明。只要在main方法中声明Player[]就可以了。
- 第三个看起来不错,除了方法 getPName 没有定义或者它的值为空。由于您没有提供这部分代码,因此我无法对此进行进一步评论。
//Player Class . Create a package named test and create a class
package test;
public class Player {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//Create a Game class in same package
package test;
public class Game {
//Game Name is just name of the game
private String gameName;
private Player[] players;
public String getGameName() {
return gameName;
}
public void setGameName(String gameName) {
this.gameName = gameName;
}
public Player[] getPlayers() {
return players;
}
public void setPlayers(Player[] players) {
this.players = players;
}
}
//Create a Test class in same package which contains main method
package test;
public class Test {
public static void main(String[] args) {
Game game =new Game();
Player []players = new Player[3];
players[0]= new Player(); //Create Player Object and assign it into
player[0]
players[0].setName("name1");
players[1] = new Player();
players[1].setName("name2");
players[2] = new Player();
players[2].setName("name3");
game.setPlayers(players);
for(Player player : game.getPlayers()){
System.out.println(player.getName());
}
}
}
对您的游戏进行简单修改 class 给了我这个,它几乎可以满足您的要求:
public class Game {
void createPlayers(Player[] players) {
Player player1 = new Player();
player1.setName("human");
Player player2 = new Player();
player2.setName("Greg");
Player player3 = new Player();
player3.setName("Susan");
players[0] = player1;
players[1] = player2;
players[2] = player3;
}
public static void main(String[] args) {
Player[] players = new Player[3];
Game obj = new Game();
obj.createPlayers(players);
for (Player pl : players) {
System.out.println("Name = " + pl.getName());
}
}
}
1) 对于您的游戏 class -- 一个版本
players[0] = new Player();
将无法工作,因为您的 class 播放器中没有任何默认构造函数。
您可以添加默认构造函数,您的 class 将如下所示。
private String name;
Player () {}
Player (String name) { this.name = name; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
2) 对于您的游戏 class --不同的版本
在您的主要 class 中,您还没有创建玩家列表,并且在没有创建列表的情况下,您正在方法中传递它。
在你的主要class之前
obj.createPlayers(players);
添加Player[] players = new Player[3];
3) 对于您的游戏 Class -- 另一个版本
输出为空,因为 System.out.println(p2.getPName());
你正在尝试做 p2.getPName()
但在你的 class 播放器中 getter 是 getName()
。改一下就行了
我有一项家庭作业,但我对 Java 还很陌生,过去两天一直在尝试创建玩家对象数组,设置名称并获取名称。
但无论我尝试什么,我都会出错。我看了很多教程,并准确地复制了他们所做的,但它不起作用。如何正确创建数组和 get/set 名称?
我有一个游戏 class 和一个玩家 class:
游戏class -- 一个版本:
Player[] players = new Player[3];
//All the tutorials I've seen show both these types of putting names in:
players[0] = new Player();
//followed by:
players[0].setName("name");
//or...
players[0] = new Player("human");
//my errors on both: unknown class 'players'...
//unexpected token... invalid method... etc etc
Gmae class - 不同版本(使用方法):
//for the homework, I'm expected to put it all into a method
//ideally I'd be using the setName method from the Players class (below)
//but that doesn't work here
void createPlayers(Player[] players) {
for (Player p : players) {
players[0] = new Player("human");
players[1] = new Player("Greg");
players[2] = new Player("Susan");
}
}
public static void main(String[] args) {
Game obj = new Game();
//I had to change Players[] to static to get a printout but it's not supposed
//to be static
//I tried these separately to check output
//I need to be able to get the name of a player
obj.createPlayers(players); //no output
for (Player pl : players) {
System.out.println("Name = " + pl); //null null null
}
System.out.println(obj.players[0]); //null
obj.player[0].getName(); //cannot resolve symbol 'player'
}
游戏Class -- 另一个版本(将所有内容放在主版本中):
public static void main(String args[]) {
Main game = new Main();
Player p0 = new Player("Jeff"); //it errored if I didn't put a name
Player p1 = new Player("Susan"); //but I need to be able to change names
Player p2 = new Player("Michael");
Player[] players = new Player[3];
players[0] = p0;
players[1] = p1;
players[2] = p2;
p2.setPName("Alan");
System.out.println(p2.getPName()); //output: null
Player class:具有 getter 和 setter 功能,我理想情况下会使用它们来获取和设置玩家名称,但我不知道如何让它们在我的游戏中工作 class。
private String name;
Player (String name) { this.name = name; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
在第一个清单中,您创建没有名称的新玩家是错误的,因为在 class 中定义新构造函数并禁用参数默认构造函数后,您需要添加默认构造函数或创建具有名称的玩家。
Player[] players = new Player[3];
//All the tutorials I've seen show both these types of putting names in:
players[0] = new Player();
<-- wrong! because you don't have this` constructor in Player class
您的代码的另一部分也包含错误,您在 Player class 中放置了一个 getter 和 setter 方法名称,但试图将它们与其他名称一起使用。
class Player {
private String name;
Player (String name) { this.name = name; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
}
p2.setPName("Alan"); System.out.println(p2.getPName()); <--this method is not exists
正确的代码应该是这样的,但注意它的设计很糟糕:
public class Main {
public static void main(String...args) {
Game game = new Game();
Player[] players = game.getPlayers();
for(Player player : players) {
System.out.println(player.getName());
}
for(int i = 0; i < players.length; i++) {
players[i].setName("new name");
}
for(Player player : players) {
System.out.println(player.getName());
}
}
}
class Player {
private String name;
public Player(String name) { this.name = name; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
}
class Game {
private Player[] players;
public Game() {
players = { new Player("human"), new Player("Greg"), new Player("Susan") };
}
public Player[] getPlayers() {
return players;
}
}
将此代码放在名称为 Main.java 的文件中,并放在控制台中的同一文件夹中 javac Main.java 之后用 java Main 命令启动你的程序
输出将是:
human
Greg
Susan
new name
new name
new name
- 您似乎没有默认构造函数。所以你需要将名称传递给构造函数。这是您第一次尝试时出现未定义方法错误的原因。
- 第二次,玩家没有在本地范围内声明。只要在main方法中声明Player[]就可以了。
- 第三个看起来不错,除了方法 getPName 没有定义或者它的值为空。由于您没有提供这部分代码,因此我无法对此进行进一步评论。
//Player Class . Create a package named test and create a class
package test;
public class Player {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//Create a Game class in same package
package test;
public class Game {
//Game Name is just name of the game
private String gameName;
private Player[] players;
public String getGameName() {
return gameName;
}
public void setGameName(String gameName) {
this.gameName = gameName;
}
public Player[] getPlayers() {
return players;
}
public void setPlayers(Player[] players) {
this.players = players;
}
}
//Create a Test class in same package which contains main method
package test;
public class Test {
public static void main(String[] args) {
Game game =new Game();
Player []players = new Player[3];
players[0]= new Player(); //Create Player Object and assign it into
player[0]
players[0].setName("name1");
players[1] = new Player();
players[1].setName("name2");
players[2] = new Player();
players[2].setName("name3");
game.setPlayers(players);
for(Player player : game.getPlayers()){
System.out.println(player.getName());
}
}
}
对您的游戏进行简单修改 class 给了我这个,它几乎可以满足您的要求:
public class Game {
void createPlayers(Player[] players) {
Player player1 = new Player();
player1.setName("human");
Player player2 = new Player();
player2.setName("Greg");
Player player3 = new Player();
player3.setName("Susan");
players[0] = player1;
players[1] = player2;
players[2] = player3;
}
public static void main(String[] args) {
Player[] players = new Player[3];
Game obj = new Game();
obj.createPlayers(players);
for (Player pl : players) {
System.out.println("Name = " + pl.getName());
}
}
}
1) 对于您的游戏 class -- 一个版本
players[0] = new Player();
将无法工作,因为您的 class 播放器中没有任何默认构造函数。 您可以添加默认构造函数,您的 class 将如下所示。
private String name;
Player () {}
Player (String name) { this.name = name; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
2) 对于您的游戏 class --不同的版本 在您的主要 class 中,您还没有创建玩家列表,并且在没有创建列表的情况下,您正在方法中传递它。
在你的主要class之前
obj.createPlayers(players);
添加Player[] players = new Player[3];
3) 对于您的游戏 Class -- 另一个版本
输出为空,因为 System.out.println(p2.getPName());
你正在尝试做 p2.getPName()
但在你的 class 播放器中 getter 是 getName()
。改一下就行了