2016-02-18 66 views
-2

我试着在此刻做的4位随机数有这个4位随机数C++

class PasswordGuessingGame { 
private: 

    int number = rand() % 9000 + 1000; 
public: 

    int getNumber() { 
     return number;  
    } 

}; 

,但得到的随机数是没有意义谁能帮助我?我是新来的。

+0

能否请您解释一下究竟是什么“无厘头”? –

+1

你想要什么范围? '0 - 9999'?或'1000 - 9999'? – Galik

+0

@Galik,我想他想要1000到9999之间的数字。 – Himanshu

回答

6

欢迎来到新的C++标准库!

最好的办法是使用

#include <random> 
std::random_device rd; 
std::mt19937 mt(rd()); // seed the Mersenne Twister generator 
std::uniform_int_distribution<> dist(1000, 9999); // define the range 

然后,在你的函数,写

return dist(mt); 

这将有好得多的统计特性比老rand()

您的具体问题是由于您在您的班级成员number中存储了单个图形,并且一再返回该图形。

+0

感谢您的帮助,但有什么方法可以将它放入我的课堂吗?不在我的课外? – lusito92

+0

的确,'rd','mt'和'dist'都成为你班级的成员;你可以在你的构造函数中设置它们。你的功能成为我已经给予的单线。另一个(好的)答案为你提供了一个有效的例子。 – Bathsheba

2

这里是你的情况下,一个完整的例子,用现代C++的随机数生成:

#include <iostream> 
#include <chrono> 
#include <random> 

unsigned seed = static_cast<size_t>(std::chrono::system_clock::now().time_since_epoch().count()); 

class PasswordGuessingGame { 
private: 
    std::mt19937 random_engine; 
    std::uniform_int_distribution<size_t> random_generator; 

public: 
    PasswordGuessingGame() : 
     random_engine(seed), 
     random_generator(1000, 9999) 
    { 
    } 

    int getNumber() { 
     return random_generator(random_engine); 
    } 

}; 

int main() 
{ 
    PasswordGuessingGame game; 
    std::cout << "Random value: " << game.getNumber() << std::endl; 

    return 0; 
} 
+0

非常感谢! – lusito92