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

目錄
C# 中的隨機類
偽且安全
RNGCryptoServiceProvider 類
C# 中的隨機數(shù)生成器函數(shù)
C# 中的整數(shù)隨機數(shù)生成器
示例#1
在 C# 中生成浮點數(shù)
A Very Common Mistake
Example #1
How Random Numbers are all the same and Why did this happen?
Conclusion
首頁 后端開發(fā) C#.Net教程 C# 中的隨機數(shù)生成器

C# 中的隨機數(shù)生成器

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

隨機數(shù)生成器是 C# 中的內(nèi)置庫,可隨機生成整數(shù)和浮點數(shù)。每次調(diào)用庫的相關方法時,它都會返回一個隨機數(shù)。一系列隨機數(shù)是一組不遵循任何模式的數(shù)字。 C# 中的隨機數(shù)生成器在每次調(diào)用時都會生成這樣的序列。

C# 中的隨機類

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

偽且安全

我想到的下一個問題是為什么他們將其稱為偽隨機數(shù)生成器類?讓我們通過現(xiàn)實生活中的人類行為來理解這一點。當一個人被要求選擇一種隨機顏色時,他會選擇某種顏色。假設他選擇了黃色。是什么讓他選擇了黃色?這可能是他最喜歡的顏色或周圍環(huán)境的顏色,或者他當時可能正在考慮一些黃色的東西。這種驅(qū)動隨機選擇某物的決定的人類行為被稱為隨機世界中的種子。種子是隨機性的觸發(fā)器或起點。

現(xiàn)在,當種子是可預測的時,隨機數(shù)變得不那么隨機。然后它們被稱為偽隨機數(shù)。當不可預測時,它們被稱為安全隨機數(shù)。

C# Random Class 使用當前時間戳作為種子,這是非??深A測的。因此,術語偽隨機數(shù)生成器類。

RNGCryptoServiceProvider 類

System.Security.Cryptography 命名空間中的 RNGCryptoServiceProvider 類能夠生成安全隨機數(shù),這些隨機數(shù)可用作密碼。

C# 中的隨機數(shù)生成器函數(shù)

在C#中生成隨機數(shù)的第一件事是初始化Random類。這可以通過類的兩個構(gòu)造函數(shù)中的任何一個來完成:

  • Random():使用基于時間的種子值初始化 Random 類的對象。種子值是機器的當前時間戳。不過,在后來的版本中,這被更改為基于 GUID。
  • Random(Int32):使用指定的種子值初始化 Random 類的對象。為了從該系列中獲取下一個隨機數(shù),我們調(diào)用 Random 類的 Next() 方法。
  • Next():?返回一個非負偽隨機 Int32 整數(shù)。
  • Next(Int32):返回小于指定整數(shù)的非負偽隨機 Int32 整數(shù)。
  • Next(Int32, Int32):?返回指定范圍內(nèi)的非負偽隨機 Int32 整數(shù)。

C# 中的整數(shù)隨機數(shù)生成器

讓我們看一個如何生成隨機整數(shù)的示例:

示例#1

下面的示例生成隨機 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# 中的隨機數(shù)生成器

示例#2

下面的示例生成 0 到 100 范圍內(nèi)的隨機 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# 中的隨機數(shù)生成器

示例 #3

下面的示例生成 50 到 100 范圍內(nèi)的隨機 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# 中的隨機數(shù)生成器

在 C# 中生成浮點數(shù)

讓我們看一個如何生成隨機浮點數(shù)的示例:

示例#1

下面的示例生成隨機 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# 中的隨機數(shù)生成器

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# 中的隨機數(shù)生成器

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# 中的隨機數(shù)生成器的詳細內(nèi)容。更多信息請關注PHP中文網(wǎng)其他相關文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
c#多線程和異步的區(qū)別 c#多線程和異步的區(qū)別 Apr 03, 2025 pm 02:57 PM

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

C#與C:歷史,進化和未來前景 C#與C:歷史,進化和未來前景 Apr 19, 2025 am 12:07 AM

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

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

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

c#多線程編程是什么  c#多線程編程用處 c#多線程編程是什么 c#多線程編程用處 Apr 03, 2025 pm 02:45 PM

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

C#.NET:使用.NET生態(tài)系統(tǒng)構(gòu)建應用程序 C#.NET:使用.NET生態(tài)系統(tǒng)構(gòu)建應用程序 Apr 27, 2025 am 12:12 AM

如何利用.NET構(gòu)建應用?使用.NET構(gòu)建應用可以通過以下步驟實現(xiàn):1)了解.NET基礎知識,包括C#語言和跨平臺開發(fā)支持;2)學習核心概念,如.NET生態(tài)系統(tǒng)的組件和工作原理;3)掌握基本和高級用法,從簡單控制臺應用到復雜的WebAPI和數(shù)據(jù)庫操作;4)熟悉常見錯誤與調(diào)試技巧,如配置和數(shù)據(jù)庫連接問題;5)應用性能優(yōu)化與最佳實踐,如異步編程和緩存。

從網(wǎng)絡到桌面:C#.NET的多功能性 從網(wǎng)絡到桌面:C#.NET的多功能性 Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

c#多線程的好處有哪些 c#多線程的好處有哪些 Apr 03, 2025 pm 02:51 PM

多線程的好處在于能提升性能和資源利用率,尤其適用于處理大量數(shù)據(jù)或執(zhí)行耗時操作。它允許同時執(zhí)行多個任務,提高效率。然而,線程過多會導致性能下降,因此需要根據(jù) CPU 核心數(shù)和任務特性謹慎選擇線程數(shù)。另外,多線程編程涉及死鎖和競態(tài)條件等挑戰(zhàn),需要使用同步機制解決,需要具備扎實的并發(fā)編程知識,權(quán)衡利弊并謹慎使用。

.NET框架與C#:解碼術語 .NET框架與C#:解碼術語 Apr 21, 2025 am 12:05 AM

.NETFramework是一個軟件框架,C#是一種編程語言。1..NETFramework提供庫和服務,支持桌面、Web和移動應用開發(fā)。2.C#設計用于.NETFramework,支持現(xiàn)代編程功能。3..NETFramework通過CLR管理代碼執(zhí)行,C#代碼編譯成IL后由CLR運行。4.使用.NETFramework可快速開發(fā)應用,C#提供如LINQ的高級功能。5.常見錯誤包括類型轉(zhuǎn)換和異步編程死鎖,調(diào)試需用VisualStudio工具。

See all articles