【问题标题】:how to pass parameters to an array in another class?如何将参数传递给另一个类中的数组?
【发布时间】:2018-12-18 22:54:41
【问题描述】:

这是我第一次在 StackOverflow 上发帖,但我访问过很多次。我正在上计算机科学课,但遇到了一个我无法通过研究解决的问题。任务是创建一个带有实例变量和构造函数的 NBATeam 类和一个 NBA 客户端,该客户端从用户那里接收球员姓名的参数并将它们传递给第一个类中的数组。

所以我遇到的问题是当我运行我的程序时,我输入玩家名称并将它们传递给数组,第一个名称数组被删除。但是,输入到最新数组中的名称是可以的。

如果我的术语有误,我深表歉意,我还是个新手!

非常感谢您能给我的任何帮助。

我将在下面插入我的代码。我的问题是上面写着[null]。我还为第一队输入了 bob,为第二队输入了 brian,但 bob 在第二队的数组中。

请帮忙!

Create NBA team of Heats
Add a player to team Heats? (yes/no)
yes
Enter the name of the player: 
bob
Add one more player to Heats?
no
Create NBA team of Spurs
Add a player to team Spurs? (yes/no)
yes
Enter the name of the player: 
brian
Add another player to Spurs?
no
***Heat Wins!***
Heats[null]Wins: 4 Loses: 0
Spurs[bob]Wins: 0 Loses: 4

import java.util.*;

public class NBA {
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String ifAddPlayer, playerName = null;


    //construct Team Heat
    System.out.println("Create NBA team of Heats");
    NBATeam heats = new NBATeam("Heats");
    System.out.println("Add a player to team Heats? (yes/no)");
    ifAddPlayer = input.next();

        while(ifAddPlayer.equalsIgnoreCase("yes")) {
            System.out.println("Enter the name of the player: ");

            heats.addPlayer(playerName);
            playerName = input.next();

            System.out.println("Add one more player to Heats?");
            ifAddPlayer = input.next();
        }

    //construct team Spurs.
    System.out.println("Create NBA team of Spurs");
    NBATeam spurs = new NBATeam("Spurs");
    System.out.println("Add a player to team Spurs? (yes/no)");
    ifAddPlayer = input.next();

        while(ifAddPlayer.equalsIgnoreCase("yes")) {
            System.out.println("Enter the name of the player: ");

            spurs.addPlayer(playerName);
            playerName = input.next();

            System.out.println("Add another player to Spurs?");
            ifAddPlayer = input.next(); 
        }

        playAGame(heats,spurs);
         System.out.println(heats.toString());
            System.out.println(spurs.toString());

}
public static void playAGame(NBATeam heats, NBATeam spurs) {

        for(int game = 0; game < 7; game++){

        double score = Math.random();

        if (score < .5) {
        heats.winAgame(spurs);

        }
        else{    
        spurs.winAgame(heats);

        }
        if(spurs.nWin()==4 || heats.nWin()==4) {
            break;
        }
        }
        if(spurs.nWin()>heats.nWin()) {
            System.out.println("***Spurs Win!***");
        }
        else
            System.out.println("***Heat Wins!***");
    }
}




import java.util.Arrays;

public class NBATeam {
private String sTeamName;
private int nWin;
private int nLoss;
private int nPlayer;

private String [] playerArray = new String[nPlayer];

public NBATeam(String sTeamName) {
    this.sTeamName = sTeamName;
    nPlayer=0;

}
public int nWin() {
    return nWin;
}
public int nLoss() {
    return nLoss;
}
public String getTeamName(){        
    //gets team's Name
    return sTeamName;
}

public String toString() {
     return sTeamName + Arrays.toString(playerArray)+ "Wins: " + nWin + 
            " Loses: " + nLoss;

}

public void lossAgame() {
    this.nLoss++;
}
public void winAgame(NBATeam team2) { //To win over the team
    nWin++;
    team2.setLoss(team2.nLoss()+1);
    //teamB.lossAgame();
}

public int getLossNumber() {
    return this.nLoss;
}
public void setLoss(int l) {
    this.nLoss=l;
}

public int getWinNumber() {
    return this.nWin;
}
public void setWin(int w) {
    this.nWin=w;
}
public void addPlayer(String player) {

    String temp[] = playerArray;
    playerArray = Arrays.copyOf(temp, temp.length+1);
    playerArray[nPlayer] = player;
    nPlayer++;

}

public String[] getPlayerArray() {
    return playerArray;
}

public void setPlayerArray(String[] playerArray) {
    this.playerArray = playerArray;
}
}

【问题讨论】:

    标签: java arrays oop object constructor


    【解决方案1】:

    您从playerName 中的初始值null 开始,然后在获取值之前添加playerName。这个,

    heats.addPlayer(playerName);
    playerName = input.next();
    

    颠倒了。应该是

    playerName = input.next();
    heats.addPlayer(playerName);
    

    而且,你是一贯的。这个,

    spurs.addPlayer(playerName);
    playerName = input.next();
    

    也是相反的。应该是

    playerName = input.next();
    spurs.addPlayer(playerName);
    

    我会建议您限制变量的可见性。如果你有

    String playerName = input.next();
    heats.addPlayer(playerName);
    

    它会限制在设置之前添加播放器的可能性。

    【讨论】:

    • 哇,多么愚蠢的错误!非常感谢您的超快响应!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2013-11-21
    • 2012-09-25
    相关资源
    最近更新 更多