簡體   English   中英

通過構造函數在 ArrayList 中添加對象

[英]Add objects in an ArrayList through constructor

我是初學者,我正在構建一個經典的 NimGame。 之前,我曾經使用數組來保存項目。 現在,我修改它以將ArrayList應用到這次。 不過,這似乎沒有問題,我所做的功能無法正常工作,沒有任何錯誤。 我不知道為什么。

現在,我嘗試將NimPlayer類型添加到新的playerList中,即 ArrayList。 我將 ArrayList 放在NimModel中,並使用NimPlayer中的構造函數來創建新播放器。 Nimsys是提供命令和接收用戶輸入的主面板。 這就是為什么我把它們分成三類。

該命令就像這樣$addplayer userName,familyName,givenName 並且掃描器應該通過構造函數將字符串和 go 處理為新的 object。

非常感謝您的任何幫助,並感謝您的善意和耐心。

這是我的相關代碼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!");
    }
}

NimModel

public class NimModel {

private NimPlayer nimplayer;

private ArrayList<NimPlayer> playerList = new ArrayList<>();

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;

最后, 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.");         
}

此外,您在 Nimsys 中給出的 addPlayer() 是在您的 While(true) 中定義的,但我認為這更像是一個打字錯誤。 我個人也會給你的 model 一個構造函數:

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;
}
}

當您使用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);
      ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM