随机返回相同的循环值

Random returns same value in for loop

本文关键字:循环 返回 随机      更新时间:2023-10-16

我将代码减少为最小,并且编译了相同的错误。我知道这会发出警告,您不需要提及它们。我是编码的新手,因此感谢您的帮助。 我遇到的问题是向量XPO和YPO在Main()中返回每个完成for循环的值相同的值。我将获得RNADOM输出,但是重复所有向量值。他们应该与众不同。你能帮我找到什么问题吗?太感谢了。代码:

#include "stdafx.h"
#include <ctime>
#include <cmath>
#include <random>
#include <iostream>
using namespace std;

//error is here?
int phaseTwoSimulate(double &Xpos, double &Ypos, int diameter, double stepSize) {

    while (pow(Xpos - 201, 2) + pow(Ypos - 201, 2) < pow(diameter, 2)) { 
// while inside cicle
        int direction = rand() % 4;
        switch (direction) {
        case 0://north
            Ypos = Ypos - stepSize;
            break;
        case 1://east
            Xpos = Xpos + stepSize;
            break;
        case 2://south
            Ypos = Ypos + stepSize;
            break;
        case 3://west
            Xpos = Xpos - stepSize;
            break;
        }
    }
    return 0;
}
int main()
{
    double Xpos = 201;
    double Ypos = 201;
    srand(time(NULL));
    for (int x = 0; x < 50; x++) {
        phaseTwoSimulate(Xpos,Ypos,50,1);
        cout << Xpos << "," << Ypos << endl;
        double Xpos = 201;
        double Ypos = 201;
    }
    cin.ignore();
    cin.get();
    return 0;
}

您的问题与此代码中间的两行:

    cout << Xpos << "," << Ypos << endl;
    double Xpos = 201;
    double Ypos = 201;
}

这样做的是声明两个变量XposYpos并将它们设置为201。不使用这些变量。当您的循环再次绕开时,下一个呼叫phaseTwoSimulate使用XposYpos的旧变量(和旧值),这意味着该点已经在您的圆圈之外,并且您的函数中的循环立即停止。

要解决此问题,请简单地将其更改为:

    cout << Xpos << "," << Ypos << endl;
    Xpos = 201;
    Ypos = 201;
}

或更高

int main()
{
    vector <int> vectorX;
    vector <int> vectorY;
    srand(time(NULL));
    for (int x = 0; x < 50; x++) {
        double Xpos = 201;
        double Ypos = 201;
        phaseTwoSimulate(Xpos, Ypos, 50, 1);
        cout << Xpos << "," << Ypos << endl;
    }
    cin.ignore();
    cin.get();
    return 0;
}