Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过构造函数在ArrayList中添加对象_Java_Constructor - Fatal编程技术网

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