我不确定这个问题是否很清楚,也许代码会有所帮助。
这是SpaceGame构造函数的一部分
player.setPlanets(planets); //set Planets for player
enemy.setPlanets(planets); //set Planets for enemy
这是setPlanets方法的一部分
public void setPlanets (ArrayList<Planet> planets) {
for (int i = 0; i < planets.size(); i++) //Iterate through the ArrayList of Planets
{
System.out.println(planets.get(i)); //Prints the info of each planet
}
当游戏开始时,行星被打印两次。如果我使用enemy.setPlanets,有没有办法取消它?
您可以使用布尔值作为条件
public void setPlanets (ArrayList<Planet> planets, boolean print) {
for (int i = 0; i < planets.size(); i++) //Iterate through the ArrayList of Planets
{
if (print) {
System.out.println(planets.get(i)); //Prints the info of each planet
}
}
player.setPlanets(planets, true); //set Planets for player
enemy.setPlanets(planets, false); //set Planets for enemy
还有更多你可以超载设置行星
public void setPlanets (ArrayList<Planet> planets) {
setPlanets(planets, false); // don't print by default
}
然后对于敌人,
enemy.setPlanets(planets);
就够了。
我看到您将打印两种不同的信息。 一次用于玩家,另一个用于敌人 所以问题在哪里,它是不同的信息,所以如果你想在开始游戏时只打印一个信息,你应该写:
if (gameStarted){
player.setPlanets(planets); //set Planets for player
}else{
player.setPlanets(planets); //set Planets for player
enemy.setPlanets(planets); //set Planets for enemy
}
反之亦然。
我认为 bejond 的答案非常好,但它会检查循环中每个元素的打印条件。您可以在进入循环之前检查条件以获得更好的性能。
player.setPlanets(planets, true); //set Planets for player
enemy.setPlanets(planets, false); //set Planets for enemy
您的函数现在应如下所示
public void setPlanets (ArrayList<Planet> planets, boolean isPrinted)
{
if (isPrinted)
{
for (int i = 0; i < planets.size(); i++) //Iterate through the ArrayList of Planets
{
System.out.println(planets.get(i)); //Prints the info of each planet
}
}
//your code...
}
如果你愿意,你也可以重载你的函数,就像bejund建议的那样。