有人可以一步一步地解释这里发生了什么吗?

时间:2018-02-09 10:11:44

标签: java

public int pray(int secondsPrayed){
    int randomRecoveryValue = secondsPrayed + new Random().nextInt(3);
    int actuallyRecoveredValue = Math.min(this.MAX_MP -this.mp,randomRecoveryValue);
    this.mp += actuallyRecoveredValue;
    return actuallyRecoveredValue;
}

这是我目前用来学习的一本书。目标是为pray对象创建Priest方法,该方法通过祈祷的秒数和随机的0到2来恢复其MP。我不太了解两件事:

  1. 3 nextInt之后而不是2(本书的答案) - 当我们试图随机获得0到2时,为什么会这样?

  2. actuallyRecoveredValue将其值返回secondsPrayed;但是,对我而言,首先我们需要actuallyRecoveredValue RandomRecoveryValue secondsPrayed,而T1.CompareColumn <> T2.CompareColumn又需要Cats,而此时似乎不存在?我是Java的新手,所以我没有太多返回值的经验。

2 个答案:

答案 0 :(得分:2)

public class FileUploadController : Controller
{
    private List<string> UploadedFileNames = new List<string>();

    public List<string> AddFileNameToList(string fileName)
    {
        UploadedFileNames.Add(fileName);

        return UploadedFileNames;
    }

    public JsonResult UploadFile(string fileName)
    {

        //save file to directory etc

        AddFileNameToList(fileName);

        return Json(new {});//relevant info for the user
    }
}
  

返回一个伪随机数,在0之间均匀分布的int值   (包括)和指定值(不包括),由此得出   随机数发生器的序列。

您将UploadedFileNames作为变量传递给方法,因此它确实存在于方法(scope)中。从您发布的代码中,我们无法判断nextInt(int n) 是否属实。

  

对我来说,看起来像第一个得到actualRecoveredValue   我们需要RandomRecoveryValue,而这又需要secondsPrayed

这是真的,但如上所述,secondsPrayed确实存在

答案 1 :(得分:0)

1)nextInt()方法返回一个介于零和您使用的参数之间的整数值(在您的情况下为3)。虽然范围中包含零,但范围的最后一个元素不是。

你可以认为nextInt(n)返回n个可能的值,意味着&#34; 0&#34;之间的范围。和&#34; n-1&#34;

nextInt(5) // can return 0,1,2,3,4

2)代码有点乱,我会告诉你,正如你所说的那样,你必须确定&#34; randomRecoveryValue&#34;的价值。为了确定actualRecoveredValue。方法pray()做了三件事:

  • 根据输入参数和一些随机性计算恢复值
  • 调整此值,以便牧师无法完全恢复健康。这发生在第三行,基本上牧师会治疗一些等于&#34; randomRecoveryValue&#34;只有当前的MP不是太高,否则他会治疗使他恢复健康的价值。
  • 更新其MP的价值
  • 返回他实际愈合的数量,不是必需的,但可能对此方法的调用者有用

干杯