国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
C# 中的隨機(jī)類(lèi)別
偽且安全
RNGCryptoServiceProvider 類(lèi)別
C# 中的隨機(jī)數(shù)產(chǎn)生器函數(shù)
C# 中的整數(shù)隨機(jī)數(shù)產(chǎn)生器
範(fàn)例#1
在 C# 產(chǎn)生浮點(diǎn)數(shù)
A Very Common Mistake
Example #1
How Random Numbers are all the same and Why did this happen?
Conclusion
首頁(yè) 後端開(kāi)發(fā) C#.Net教程 C# 中的隨機(jī)數(shù)產(chǎn)生器

C# 中的隨機(jī)數(shù)產(chǎn)生器

Sep 03, 2024 pm 03:34 PM
c# c# tutorial

隨機(jī)數(shù)產(chǎn)生器是 C# 中的內(nèi)建函式庫(kù),可隨機(jī)產(chǎn)生整數(shù)和浮點(diǎn)數(shù)。每次呼叫庫(kù)的相關(guān)方法時(shí),它都會(huì)傳回一個(gè)隨機(jī)數(shù)。一系列隨機(jī)數(shù)字是一組不遵循任何模式的數(shù)字。 C# 中的隨機(jī)數(shù)產(chǎn)生器在每次呼叫時(shí)都會(huì)產(chǎn)生這樣的序列。

C# 中的隨機(jī)類(lèi)別

  • 那麼,C# 是如何產(chǎn)生一系列隨機(jī)數(shù)的呢?答案就在 C# 系統(tǒng)命名空間的 Random Class 中。
  • Random 類(lèi)別是一個(gè)偽隨機(jī)數(shù)產(chǎn)生器類(lèi)別。這意味著此類(lèi)的任務(wù)是產(chǎn)生一系列不遵循任何模式的數(shù)字。但是,機(jī)器真的能夠產(chǎn)生隨機(jī)數(shù)嗎?機(jī)器如何知道接下來(lái)要產(chǎn)生哪個(gè)數(shù)字?畢竟,機(jī)器被設(shè)計(jì)為遵循指令並執(zhí)行演算法。
  • 不,機(jī)器無(wú)法自行產(chǎn)生隨機(jī)數(shù)。有一個(gè)基於當(dāng)前時(shí)鐘和機(jī)器狀態(tài)的定義的數(shù)學(xué)演算法,指導(dǎo)它從一組中挑選數(shù)字。集合中的所有數(shù)字被選中的機(jī)率相同。因此,它們並不是完全隨機(jī)的。他們確實(shí)遵循某種模式。只是圖案的隨機(jī)性足以滿(mǎn)足人類(lèi)的實(shí)際需求。

偽且安全

我想到的下一個(gè)問(wèn)題是為什麼他們稱(chēng)之為偽隨機(jī)數(shù)產(chǎn)生器類(lèi)別?讓我們透過(guò)現(xiàn)實(shí)生活中的人類(lèi)行為來(lái)理解這一點(diǎn)。當(dāng)一個(gè)人被要求選擇隨機(jī)顏色時(shí),他會(huì)選擇某種顏色。假設(shè)他選擇了黃色。是什麼讓他選擇了黃色?這可能是他最喜歡的顏色或周?chē)h(huán)境的顏色,或者他當(dāng)時(shí)可能正在考慮一些黃色的東西。這種驅(qū)動(dòng)隨機(jī)選擇某物的決定的人類(lèi)行為被稱(chēng)為隨機(jī)世界中的種子。種子是隨機(jī)性的觸發(fā)器或起點(diǎn)。

現(xiàn)在,當(dāng)種子是可預(yù)測(cè)的時(shí),隨機(jī)數(shù)變得不那麼隨機(jī)。然後它們被稱(chēng)為偽隨機(jī)數(shù)。當(dāng)不可預(yù)測(cè)時(shí),它們被稱(chēng)為安全隨機(jī)數(shù)。

C# Random Class 使用當(dāng)前時(shí)間戳作為種子,這是非??深A(yù)測(cè)的。因此,術(shù)語(yǔ)偽隨機(jī)數(shù)產(chǎn)生器類(lèi)別。

RNGCryptoServiceProvider 類(lèi)別

System.Security.Cryptography 命名空間中的 RNGCryptoServiceProvider 類(lèi)別能夠產(chǎn)生安全隨機(jī)數(shù),這些隨機(jī)數(shù)可用作密碼。

C# 中的隨機(jī)數(shù)產(chǎn)生器函數(shù)

在C#中產(chǎn)生隨機(jī)數(shù)的第一件事是初始化Random類(lèi)別。這可以透過(guò)類(lèi)別的兩個(gè)建構(gòu)函式中的任何一個(gè)來(lái)完成:

  • Random():使用基於時(shí)間的種子值初始化 Random 類(lèi)別的物件。種子值是機(jī)器的當(dāng)前時(shí)間戳記。不過(guò),在後來(lái)的版本中,這被更改為基於 GUID。
  • Random(Int32):使用指定的種子值初始化 Random 類(lèi)別的物件。為了從系列中取得下一個(gè)隨機(jī)數(shù),我們呼叫 Random 類(lèi)別的 Next() 方法。
  • Next():?傳回一個(gè)非負(fù)偽隨機(jī) Int32 整數(shù)。
  • Next(Int32):傳回小於指定整數(shù)的非負(fù)偽隨機(jī) Int32 整數(shù)。
  • Next(Int32, Int32):?傳回指定範(fàn)圍內(nèi)的非負(fù)偽隨機(jī) Int32 整數(shù)。

C# 中的整數(shù)隨機(jī)數(shù)產(chǎn)生器

讓我們來(lái)看一個(gè)如何產(chǎn)生隨機(jī)整數(shù)的範(fàn)例:

範(fàn)例#1

下面的範(fàn)例產(chǎn)生隨機(jī) Int32 數(shù)字。

代碼:

using System;
public class Program
{
public static void Main()
{
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd));
}
public static int GenerateRandomInt(Random rnd)
{
return rnd.Next();
}
}

輸出:

C# 中的隨機(jī)數(shù)產(chǎn)生器

範(fàn)例#2

下面的範(fàn)例產(chǎn)生 0 到 100 範(fàn)圍內(nèi)的隨機(jī) Int32 數(shù)字。

代碼:

using System;
public class Program
{
public static void Main()
{
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd));
}
public static int GenerateRandomInt(Random rnd)
{
return rnd.Next(100);
}
}

輸出:

C# 中的隨機(jī)數(shù)產(chǎn)生器

範(fàn)例 #3

下面的範(fàn)例產(chǎn)生 50 到 100 範(fàn)圍內(nèi)的隨機(jī) Int32 數(shù)字。

代碼:

using System;
public class Program
{
public static void Main()
{
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd));
}
public static int GenerateRandomInt(Random rnd)
{
return rnd.Next(50, 100);
}
}

輸出:

C# 中的隨機(jī)數(shù)產(chǎn)生器

在 C# 產(chǎn)生浮點(diǎn)數(shù)

讓我們來(lái)看一個(gè)如何產(chǎn)生隨機(jī)浮點(diǎn)數(shù)的範(fàn)例:

範(fàn)例#1

下面的範(fàn)例產(chǎn)生隨機(jī) Int32 數(shù)字。

代碼:

using System;
public class Program
{
public static void Main()
{
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd));
}
public static double GenerateRandomInt(Random rnd)
{
return rnd.NextDouble();
}
}

輸出:

C# 中的隨機(jī)數(shù)產(chǎn)生器

A Very Common Mistake

The most common mistake developers commit while generating random numbers is that for each random number, they create a new object of Random Class. As illustrated in the example below:

Example #1

Code:

using System;
public class Program
{
public static void Main()
{
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt());
}
public static int GenerateRandomInt()
{
Random rnd = new Random();? //a very common mistake
return rnd.Next();
}
}

Output:

C# 中的隨機(jī)數(shù)產(chǎn)生器

How Random Numbers are all the same and Why did this happen?

As explained in the working of Random Class, the numbers generated are based on the seed value and the current state of the machine. Any instance of Random class starts with the seed value, saves the current state and uses it to generate the next random number. In the code above, the mistake was to create a new instance of the Random class in every iteration of the loop. So, before the time in the internal clock changes, the code is fully executed, and each instance of Random class is instantiated with the same seed value. This results in the same set of numbers generated every time.

Conclusion

In this article, we learnt about the random number generator in C# and how it internally works to generate random numbers. We also briefly learnt the concept of pseudo-random and secure-random numbers. This information is sufficient for developers to use the Random class in their applications. Deep dive, if interested to explore more on random numbers for passwords and one-time passwords.

以上是C# 中的隨機(jī)數(shù)產(chǎn)生器的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線(xiàn)上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話(huà)題

C# 中的隨機(jī)數(shù)產(chǎn)生器 C# 中的隨機(jī)數(shù)產(chǎn)生器 Sep 03, 2024 pm 03:34 PM

C# 隨機(jī)數(shù)產(chǎn)生器指南。在這裡,我們討論隨機(jī)數(shù)產(chǎn)生器的工作原理、偽隨機(jī)數(shù)和安全數(shù)的概念。

c#多線(xiàn)程和異步的區(qū)別 c#多線(xiàn)程和異步的區(qū)別 Apr 03, 2025 pm 02:57 PM

多線(xiàn)程和異步的區(qū)別在於,多線(xiàn)程同時(shí)執(zhí)行多個(gè)線(xiàn)程,而異步在不阻塞當(dāng)前線(xiàn)程的情況下執(zhí)行操作。多線(xiàn)程用於計(jì)算密集型任務(wù),而異步用於用戶(hù)交互操作。多線(xiàn)程的優(yōu)勢(shì)是提高計(jì)算性能,異步的優(yōu)勢(shì)是不阻塞 UI 線(xiàn)程。選擇多線(xiàn)程還是異步取決於任務(wù)性質(zhì):計(jì)算密集型任務(wù)使用多線(xiàn)程,與外部資源交互且需要保持 UI 響應(yīng)的任務(wù)使用異步。

C#與C:歷史,進(jìn)化和未來(lái)前景 C#與C:歷史,進(jìn)化和未來(lái)前景 Apr 19, 2025 am 12:07 AM

C#和C 的歷史與演變各有特色,未來(lái)前景也不同。 1.C 由BjarneStroustrup在1983年發(fā)明,旨在將面向?qū)ο缶幊桃隒語(yǔ)言,其演變歷程包括多次標(biāo)準(zhǔn)化,如C 11引入auto關(guān)鍵字和lambda表達(dá)式,C 20引入概念和協(xié)程,未來(lái)將專(zhuān)注於性能和系統(tǒng)級(jí)編程。 2.C#由微軟在2000年發(fā)布,結(jié)合C 和Java的優(yōu)點(diǎn),其演變注重簡(jiǎn)潔性和生產(chǎn)力,如C#2.0引入泛型,C#5.0引入異步編程,未來(lái)將專(zhuān)注於開(kāi)發(fā)者的生產(chǎn)力和雲(yún)計(jì)算。

C# 中的質(zhì)數(shù) C# 中的質(zhì)數(shù) Sep 03, 2024 pm 03:35 PM

C# 質(zhì)數(shù)指南。這裡我們討論c#中素?cái)?shù)的介紹和範(fàn)例以及程式碼實(shí)作。

xml怎麼改格式 xml怎麼改格式 Apr 03, 2025 am 08:42 AM

可以?huà)?cǎi)用多種方法修改 XML 格式:使用文本編輯器(如 Notepad )進(jìn)行手工編輯;使用在線(xiàn)或桌面 XML 格式化工具(如 XMLbeautifier)進(jìn)行自動(dòng)格式化;使用 XML 轉(zhuǎn)換工具(如 XSLT)定義轉(zhuǎn)換規(guī)則;或者使用編程語(yǔ)言(如 Python)進(jìn)行解析和操作。修改時(shí)需謹(jǐn)慎,並備份原始文件。

xml怎麼轉(zhuǎn)換成json xml怎麼轉(zhuǎn)換成json Apr 03, 2025 am 09:09 AM

將 XML 轉(zhuǎn)換為 JSON 的方法包括:使用編程語(yǔ)言(如 Python、Java、C#)編寫(xiě)腳本或程序進(jìn)行轉(zhuǎn)換;使用在線(xiàn)工具(如 XML 轉(zhuǎn)換為 JSON、Gojko's XML 轉(zhuǎn)換器、XML 在線(xiàn)工具)粘貼或上傳 XML 數(shù)據(jù)並選擇 JSON 格式輸出;使用 XML 到 JSON 轉(zhuǎn)換器(如 Oxygen XML Editor、Stylus Studio、Altova XMLSpy)執(zhí)行轉(zhuǎn)換任務(wù);使用 XSLT 樣式表將 XML 轉(zhuǎn)換為 JSON;使用數(shù)據(jù)集成工具(如 Informatic

c#多線(xiàn)程編程是什麼  c#多線(xiàn)程編程用處 c#多線(xiàn)程編程是什麼 c#多線(xiàn)程編程用處 Apr 03, 2025 pm 02:45 PM

C# 多線(xiàn)程編程是一種讓程序同時(shí)執(zhí)行多項(xiàng)任務(wù)的技術(shù),它可以通過(guò)提升性能、提高響應(yīng)能力和實(shí)現(xiàn)並行處理來(lái)提高程序效率。雖然 Thread 類(lèi)提供了直接創(chuàng)建線(xiàn)程的方法,但 Task 和 async/await 等高級(jí)工具可以提供更安全的異步操作和更簡(jiǎn)潔的代碼結(jié)構(gòu)。多線(xiàn)程編程中常見(jiàn)的難題包括死鎖、競(jìng)態(tài)條件和資源洩漏,需要仔細(xì)設(shè)計(jì)線(xiàn)程模型和使用適當(dāng)?shù)耐綑C(jī)制來(lái)避免這些問(wèn)題。

xml如何轉(zhuǎn)化為word xml如何轉(zhuǎn)化為word Apr 03, 2025 am 08:15 AM

有三種將 XML 轉(zhuǎn)換為 Word 的方法:使用 Microsoft Word、使用 XML 轉(zhuǎn)換器或使用編程語(yǔ)言。

See all articles