java—我应该采用哪种方法来实现这两个move()函数?

woobm2wo  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(217)

我正在写一个小的模拟程序,我有一个 void move(int n) 函数和a void move() 功能。正如他们的名字所暗示的, move(int n) 制造 n 一次移动 move() 只有一个动作。
现在我想到了两种实现它们的方法。方法1是:

public void move()
{
  // make one move
}

public void move(int n)
{
  for (int i=0;i<n;i++)
  {
    move();
  }
}

方法2:

public void move(int n)
{
  for (int i=0;i<n;i++)
  {
    // make one move
  }
}

public void move()
{
  move(1);
}

显然,当移动次数较大时,方法2提供了时间效率优势,因为我们不会每次移动时都进行单独的函数调用。但是,从现在起,每一步的实施都是以一种全新的方式实施的 for loop ,以后更改实现(例如从每次移动中获取元数据或分析数据)似乎没有很好的模块化。在一次进行多个单步移动的情况下,方法2需要额外的函数调用和额外的循环设置。
假设我们不知道特定的未来用例,我应该如何决定采取哪种方法?

kmbjn2e3

kmbjn2e31#

也许我遗漏了什么,但看起来你只需要一个函数

public void move(int n)
{
  for (int i=0;i<n;i++)
  {
    // make one move
  }
}

对于只需要进行一次移动的情况,初始化变量i和再进行一次比较所需的额外时间可以忽略不计。

hwamh0ep

hwamh0ep2#

实际上,一个好的jvm应该使它们相当等价(主要是内联的,请看这个答案);相反,您应该将重点放在可读代码上,这无疑会使第一个代码更可取。如果这真的很重要,我建议尝试用随机用例(例如所有单个移动、所有大量移动、混合)来分析代码;您可能必须做出一些您认为最有可能的定性决策,并且要记住,如果您正在编写可能被移植的代码,那么它将依赖于实现。

sqxo8psd

sqxo8psd3#

我建议你在移动时只使用一个功能,一个移动或多个移动。你应该使用第一种方法并保持
void move() private 让我们 void move(int n) 调用这个函数 public .

相关问题