我如何制作随机浮动数字,但要检查是否会有相同的数字?

时间:2016-07-30 22:05:14

标签: c# unity3d unityscript unity5

for(int i = 0; i < gos.Length; i++)
        {
float randomspeed = (float)Math.Round (UnityEngine.Random.Range (1.0f, 15.0f));
    floats.Add (randomspeed);
    _animator [i].SetFloat ("Speed", randomspeed);
        }

现在我得到的只是1到15之间的整数。我的意思是我没有得到像1.0或5.4或9.8或14.5这样的数字这样的速度值是合乎逻辑的吗?如果是这样,我如何才能使随机数也包括浮点数?

其次,我如何确保没有相同的数字?

gos长度为15

3 个答案:

答案 0 :(得分:4)

正如另一个答案所述,你不会得到小数值,因为你调用Math.Round(),其明确目的是四舍五入到最接近的整数(当你按照你的方式调用时)。

至于防止重复,我质疑是否需要确保不重复。首先,您选择的范围内的可能值的数量足够大,以至于获得重复的机会非常小。其次,看起来你正在为一些游戏对象选择随机速度,在我看来,在这种情况下,偶尔你会发现一对具有相同速度的游戏对象,这是完全可信的。 / p>

那就是说,如果你仍然想这样做,我会反对其他答案推荐的线性搜索。游戏逻辑应该合理有效,并且在这种情况下意味着使用哈希集。例如:

HashSet<float> values = new HashSet<float>();

while (values.Count < gos.Length)
{
    float randomSpeed = UnityEngine.Random.Range(1.0f, 15.0f);

    // The Add() method returns "true" if the value _wasn't_ already in the set
    if (values.Add(randomSpeed))
    {
        _animator[values.Count - 1].SetFloat("Speed, randomSpeed);
    }
}

// it's not clear from your question whether you really need the list of
// floats at the end, but if you do, this is a way to convert the hash set
// to a list
floats = values.ToList();

答案 1 :(得分:3)

你的第一个问题:如果你使用Math.Round(),你永远不会得到像5.4这样的数字......

第二个问题:在添加号码之前,您可以检查号码是否存在:

private float GenerateRandomSpeed()
{ return (float)UnityEngine.Random.Range (1.0f, 15.0f);}


for(int i = 0; i < gos.Length; i++)
    {
     float randomspeed= GenerateRandomSpeed();
     while (floats.any(x=>x==randomspeed)) 
         randomspeed=GenerateRandomSpeed();

     floats.Add (randomspeed);
     _animator [i].SetFloat ("Speed", randomspeed);
    }

我没有测试它,但我希望它可以引导你找到答案。

答案 2 :(得分:3)

您没有获得任何小数的原因是因为您正在使用Math.Round,这会将浮点数提升到下一个整数或降低它。

至于它是否符合逻辑,它取决于。至于你的情况,动画速度通常由浮点数完成,因为它可以平稳地加速和减速。

还要回答你关于如何避免重复同一个浮点数的问题..这本身已经不太可能了,请尝试这样做:

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<form id="ad-form">
  <div class="container">

    <div class="col-lg-12">
      <div class="form-group">
        <h1 class="text-center">Wickliffe Italian-American Club</h1>
        <h4 class="text-center">2016 Pat O'brien Chevrolet Cleveland Challenge Cup of Bocce Advertisement Form</h4>
        <p class="bg-danger text-center">Paragraph</p>
      </div>
    </div>

    <div class="col-lg-6">
      <div class="form-group">
        <label for="company">
          <h5>Company</h5>
        </label>
        <input type="text" class="form-control" id="company" placeholder="Company Name" />
      </div>
    </div>

    <div class="col-lg-6">
      <div class="form-group">
        <label for="fl-name">
          <h5>Contact Name</h5>
        </label>
        <input type="text" required class="form-control" id="fl-name" placeholder="First and Last Name" />
      </div>
    </div>

    <div class="col-lg-6">
      <div class="form-group">
        <label for="address">
          <h5>Address</h5>
        </label>
        <input type="text" required class="form-control" id="address" placeholder="Address, City, State, Zip" />
      </div>
    </div>

    <div class="col-lg-6">
      <div class="form-group">
        <label for="phone">
          <h5>Phone Number</h5>
        </label>
        <input type="text" required class="form-control" id="phone" placeholder="Contact Phone Number" />
      </div>
    </div>

    <div class="col-lg-6">
      <div class="form-group">
        <label for="email">
          <h5>Email</h5>
        </label>
        <input type="email" required class="form-control" id="email" placeholder="Email Address" />
      </div>
    </div>

    <div class="col-lg-6">
      <div class="form-group">
        <label for="reference">
          <h5>Referred by Italian-American Club Member</h5>
        </label>
        <input type="text" required class="form-control" id="reference" placeholder="Reference Name" />
      </div>
    </div>

    <div class="col-lg-12">
      <div class="form-group">
        <h5>Please select appropriate ad size below:</h5>
        <div class="radio">
          <label>
            <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1"><strong>$125.00</strong>
          </label>
        </div>
        <div class="radio">
          <label>
            <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"><strong>$75</strong>
          </label>
        </div>
        <div class="radio">
          <label>
            <input type="radio" name="optionsRadios" id="optionsRadios3" value="option3"><strong>$35.00</strong>
          </label>
        </div>
        <div class="radio">
          <label>
            <input type="radio" name="optionsRadios" id="optionsRadios4" value="option4"> <strong>$15.00</strong>
          </label>
        </div>
      </div>
    </div>

    <div class="col-lg-12">
      <div class="form-group">
        <input type="submit" class="btn btn-default" />
      </div>
    </div>

  </div>
</form>