Java 通过构造函数在ArrayList中添加对象
我是一个初学者,我正在构建一个经典的游戏。以前,我使用数组保存项目。现在,我修改它以将Java 通过构造函数在ArrayList中添加对象,java,constructor,Java,Constructor,我是一个初学者,我正在构建一个经典的游戏。以前,我使用数组保存项目。现在,我修改它以将ArrayList应用于这次。不过,似乎没问题,我所做的函数没有任何错误。我不明白为什么 现在,我尝试将NimPlayer类型添加到新的playerList,即ArrayList。我将ArrayList放在NimModel中,并使用NimPlayer中的构造函数来创建新的播放器。Nimsys是发出命令和接收用户输入的主面板。这就是为什么我把它们分成三类 命令是这样的 $addplayer用户名、familyNa
ArrayList
应用于这次。不过,似乎没问题,我所做的函数没有任何错误。我不明白为什么
现在,我尝试将NimPlayer
类型添加到新的playerList
,即ArrayList。我将ArrayList放在NimModel
中,并使用NimPlayer
中的构造函数来创建新的播放器。Nimsys
是发出命令和接收用户输入的主面板。这就是为什么我把它们分成三类
命令是这样的
$addplayer用户名、familyName、givenName
。扫描器应该处理字符串并通过构造函数成为一个新对象
非常感谢您的帮助,感谢您的好意和耐心
这是我的相关代码Nimsys
:
public class Nimsys {
private NimModel nimModel;
public static void main(String[] args) {
Nimsys nimsys = new Nimsys();
nimsys.processCommands();
}
private void processCommands() {
this.nimModel = new NimModel();
Scanner in = new Scanner(System.in);
System.out.println("Welcome to Nim\n");
while (true) {
System.out.print('$');
String commandin = in.nextLine().trim();
if (commandin.equalsIgnoreCase("addplayer")) {
addplayer(in);
}
if (commandin.equalsIgnoreCase("removeplayer")) {
removeplayer(in);
}
}
private String[] splitName(String inName) {
String[] splittedLine = inName.split(",");
String[] name = null;
if (splittedLine.length == 3) {
String userName = splittedLine[0].trim();
String familyName = splittedLine[1].trim();
String givenName = splittedLine[2].trim();
name = new String[3];
name[0] = userName;
name[1] = familyName;
name[2] = givenName;
}
return name;
}
private void addplayer(Scanner in) {
String inName = in.nextLine().trim();
String[] name = splitName(inName);
if (name != null && name.length == 3) {
ArrayList<NimPlayer> playerList = nimModel.getPlayerList();
for (NimPlayer player: playerList) {
if (player.getUserName().contains(name[0])) {
System.out.println("The player already exists.");
return;
} else {
nimModel.createPlayer(name[0], name[1], name[2]);
System.out.println("The player has been created.");
}
}
}
private void removeplayer(Scanner in) {
String removeUserName = in.nextLine().trim();
NimPlayer player = nimModel.removePlayer(removeUserName);
if (player == null) {
System.out.println("The player does not exist");
} else {
System.out.println("Player " + player.getUserName() +
" removed successfully!");
}
}
最后,NimPlayer
class
public class NimPlayer {
private final String userName;
private String familyName;
private String givenName;
private int gamesPlayed;
private int gamesWon;
private int winRatio;
public NimPlayer(String userName, String familyName, String givenName) {
this.userName = userName;
this.familyName = familyName;
this.givenName = givenName;
this.gamesPlayed = 0;
this.gamesWon = 0;
}
//getters and setters
}
简而言之:
private void addplayer(Scanner in) {
String inName = in.nextLine().trim();
String[] name = splitName(inName);
if (name != null && name.length == 3) {
ArrayList<NimPlayer> playerList = nimModel.getPlayerList();
for (NimPlayer player: playerList) {
if (player.getUserName().contains(name[0])) {
System.out.println("The player already exists.");
return;
}
}
nimModel.createPlayer(name[0], name[1], name[2]);
System.out.println("The player has been created.");
}
private void addplayer(扫描仪进入){
字符串inName=in.nextLine().trim();
字符串[]名称=拆分名称(inName);
if(name!=null&&name.length==3){
ArrayList playerList=nimModel.getPlayerList();
for(NimPlayer:playerList){
如果(player.getUserName()包含(名称[0])){
System.out.println(“播放器已经存在。”);
返回;
}
}
createPlayer(名称[0],名称[1],名称[2]);
System.out.println(“播放器已创建。”);
}
此外,Nimsys中给出的addPlayer()是在While(true)中定义的,但我认为这更像是一个键入错误。
就我个人而言,我还将为您的模型提供一个构造函数:
import java.util.ArrayList;
public class NimModel {
private NimPlayer nimplayer;
private ArrayList<NimPlayer> playerList;
public NimModel()
{
this.playerList = new ArrayList<NimPlayer>();
}
public void createPlayer(String userName, String familyName, String givenName) {
NimPlayer player = new NimPlayer(userName, familyName, givenName);
playerList.add(player);
}
public ArrayList<NimPlayer> getPlayerList() {
return playerList;
}
public NimPlayer removePlayer(String userName) {
for (NimPlayer player : playerList) {
String nameCheck = nimplayer.getUserName();
String playerName = player.getUserName();
if (playerName.equals(nameCheck)) {
playerList.remove(player);
break;
}
}
return null;
}
}
import java.util.ArrayList;
公共类模型{
私人玩家;
私人编剧家;
公共模型()
{
this.playerList=新的ArrayList();
}
public void createPlayer(字符串用户名、字符串familyName、字符串givenName){
NimPlayer=新的NimPlayer(用户名、家庭名称、givenName);
玩家列表。添加(玩家);
}
公共阵列列表getPlayerList(){
返回玩家列表;
}
公共播放器removePlayer(字符串用户名){
for(NimPlayer:playerList){
字符串名称检查=nimplayer.getUserName();
String playerName=player.getUserName();
if(playerName.equals(名称检查)){
玩家列表。移除(玩家);
打破
}
}
返回null;
}
}
当您使用scanner.nextLine()时,您要求用户输入新的内容。因此,如果您想要格式:$addplayer user,firstName,lastName,则必须将其提取到字符串中并使用此字符串:
while (true) {
System.out.print('$');
String commandin = in.nextLine().trim();
if (commandin.split(" ")[0].equalsIgnoreCase("addplayer")) {
addplayer(commandin);
}
}
}
private void addplayer(String commandin) {
String inName = commandin.split(" ")[1];
String[] name = splitName(inName);
....
您发布的代码中是否缺少一些行,或者您的
addPlayer(Scanner-in)
方法是在processCommands()中定义的
方法?这不起作用。其次,为了清洁起见,由于您的playerList
位于NimModel
中,因此您应该将迭代该列表所需的任何代码移动到NimModel
中。感谢您查看我的代码。我应该如何使用addplayer(扫描仪输入)呢
?但它应该需要用户输入。我将移动那些与玩家列表的迭代相关的代码。谢谢您查看我的代码。我发现了绑定错误并编辑了帖子。我的问题是,扫描仪似乎没有同时接受用户输入。$addplayer user,firstName,lastName
doesn不能在processCommand
中工作。再次感谢!祝您有愉快的一天@Alex
while (true) {
System.out.print('$');
String commandin = in.nextLine().trim();
if (commandin.split(" ")[0].equalsIgnoreCase("addplayer")) {
addplayer(commandin);
}
}
}
private void addplayer(String commandin) {
String inName = commandin.split(" ")[1];
String[] name = splitName(inName);
....