如果使用某个参数调用方法,如何取消打印语句



我不确定这个问题是否很清楚,也许代码会有所帮助。

这是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建议的那样。

最新更新