Lepiej czytać /dev/urandomz Fileklasą, jeśli chcesz kryptograficznie silne liczby losowe.
Wieża
A co z ujemnymi liczbami losowymi (podwójnymi)? Próbuję zaimplementować metodę randomRange, która generowałaby na przykład od -0,8 do 0,9 ... wynik byłby na przykład -0,32
just_a_dude
2
@just_a_dude, które brzmi jak idealne pytanie do stackoverflow. Rozważ utworzenie nowego pytania :)
Seth Ladd
1
metoda, która wygeneruje na przykład od -0,8 do 0,9 jest prosta. Wystarczy zmapować wartości. Twój zakres to 0,8 + 0,9 = 1,7. Więc jeśli wstawisz rng.nextInt (1700), otrzymasz liczbę od 0 do 1700. Podziel przez 100 i zmniejsz -0,8. Czyli yourRnd = rng.nextInt (1700) / 100,0-0,8. Jest więcej opcji, których możesz użyć, na przykład nawet nie używając nextInt, ale raczej podwójne 0-1, mnożone przez 1,7 i przesunięte o -0,8
Veljac
28
Możesz to osiągnąć poprzez Randomobiekt klasy random.nextInt(max)znajdujący się w dart:mathbibliotece. nextInt()Metoda wymaga maksymalnego limitu. Liczba losowa zaczyna się od, 0a sam maksymalny limit jest wyłączny.
import'dart:math';Random random =newRandom();int randomNumber = random.nextInt(100);// from 0 upto 99 included
Jeśli chcesz dodać limit minimalny, dodaj limit minimalny do wyniku
int randomNumber = random.nextInt(90)+10;// from 10 upto 99 included
czy twoja odpowiedź nie zawiera liczb od 10 do 109?
Tim
@Tim dzięki, że zauważyłeś, właśnie skopiowałem kod z poprzedniego wiersza. Rozwiązałem to.
Samir Rahimy
17
Jeśli potrzebujesz zabezpieczonych kryptograficznie liczb losowych (np. Do szyfrowania) i korzystasz z przeglądarki, możesz skorzystać z DOM Cryptography API :
int random(){final ary =newInt32Array(1);
window.crypto.getRandomValues(ary);return ary[0];}
Działa to w Dartium, Chrome i Firefox, ale prawdopodobnie nie w innych przeglądarkach, ponieważ jest to eksperymentalny interfejs API.
Bezpieczny losowy interfejs API został właśnie dodany do dart:math
newRandom.secure()
dart:mathRandomdodano securekonstruktor zwracający bezpieczny kryptograficznie generator losowy, który czyta ze źródła entropii dostarczonego przez program osadzający dla każdej wygenerowanej wartości losowej.
który deleguje window.crypto.getRandomValues()w przeglądarce i do systemu operacyjnego (jak urandomna serwerze)
Ten nowy interfejs API jest dostępny w wersji 1.14-dev lub nowszej.
Seth Ladd
7
Nie mogę komentować, ponieważ właśnie utworzyłem to konto, ale chciałem się upewnić, że rozwiązanie @ eggrobot78 działa, ale jest wyłączne w dart, więc nie zawiera ostatniej liczby. Jeśli zmienisz ostatnią linię na "r = min + rnd.nextInt (max - min + 1);", to powinna również zawierać ostatnią liczbę.
Wyjaśnienie:
max =5;
min =3;Random rnd =newRandom();
r = min + rnd.nextInt(max - min);//max - min is 2//nextInt is exclusive so nextInt will return 0 through 1//3 is added so the line will give a number between 3 and 4//if you add the "+ 1" then it will return a number between 3 and 5
Alternatywnym rozwiązaniem mogłoby być użycie następującego kodu DRandom . Ta klasa powinna być używana z nasionem. Zapewnia znajomy interfejs do tego, czego można oczekiwać w .NET, został przeniesiony z Random.cs firmy mono. Ten kod może nie być bezpieczny dla kryptografii i nie został przetestowany statystycznie.
Właśnie napisałem tę małą klasę do generowania liczb Normal Random ... to był przyzwoity punkt wyjścia do sprawdzenia, które muszę zrobić. (Te zestawy będą rozłożone na krzywej w kształcie „dzwonu”.) Ziarno zostanie ustawione losowo, ale jeśli chcesz mieć możliwość ponownego wygenerowania zestawu, możesz po prostu przekazać określone ziarno, a ten sam zestaw zostanie wygenerowany.
Następnie możesz po prostu użyć tego w ten sposób, aby sprawdzić średnią z zestawów 1000 num wygenerowanych między dolnym a górnym limitem. Wartości są przechowywane w klasie, dzięki czemu można uzyskać do nich dostęp po utworzeniu instancji.
Pozwólcie, że rozwiążę to pytanie za pomocą praktycznego przykładu w postaci prostej aplikacji do rzucania kostkami, która po dotknięciu wywołuje losowe obrazy twarzy 1 z 6 kości na ekranie.
najpierw zadeklaruj zmienną, która generuje liczby losowe (nie zapomnij zaimportować dart.math). Następnie zadeklaruj zmienną, która analizuje początkową liczbę losową w ramach ograniczeń od 1 do 6 jako liczbę całkowitą.
Obie zmienne są statycznie prywatne, aby można je było zainicjować raz. Nie jest to wielka sprawa, ale byłaby to dobra praktyka, gdybyś musiał zainicjalizować całą grupę liczb losowych.
Odpowiedzi:
Użyj
Random
klasy zdart:math
:Ten kod został przetestowany z Dart VM i dart2js, w momencie pisania tego tekstu.
źródło
/dev/urandom
zFile
klasą, jeśli chcesz kryptograficznie silne liczby losowe.Możesz to osiągnąć poprzez
Random
obiekt klasyrandom.nextInt(max)
znajdujący się wdart:math
bibliotece.nextInt()
Metoda wymaga maksymalnego limitu. Liczba losowa zaczyna się od,0
a sam maksymalny limit jest wyłączny.Jeśli chcesz dodać limit minimalny, dodaj limit minimalny do wyniku
źródło
Jeśli potrzebujesz zabezpieczonych kryptograficznie liczb losowych (np. Do szyfrowania) i korzystasz z przeglądarki, możesz skorzystać z DOM Cryptography API :
Działa to w Dartium, Chrome i Firefox, ale prawdopodobnie nie w innych przeglądarkach, ponieważ jest to eksperymentalny interfejs API.
źródło
Oto fragment służący do generowania listy liczb losowych
Spowoduje to wygenerowanie listy 12 liczb całkowitych od 0 do 99 (włącznie).
źródło
Bezpieczny losowy interfejs API został właśnie dodany do
dart:math
który deleguje
window.crypto.getRandomValues()
w przeglądarce i do systemu operacyjnego (jakurandom
na serwerze)źródło
Nie mogę komentować, ponieważ właśnie utworzyłem to konto, ale chciałem się upewnić, że rozwiązanie @ eggrobot78 działa, ale jest wyłączne w dart, więc nie zawiera ostatniej liczby. Jeśli zmienisz ostatnią linię na "r = min + rnd.nextInt (max - min + 1);", to powinna również zawierać ostatnią liczbę.
Wyjaśnienie:
źródło
spróbuj tego, możesz kontrolować wartość min / max:
źródło
Alternatywnym rozwiązaniem mogłoby być użycie następującego kodu DRandom . Ta klasa powinna być używana z nasionem. Zapewnia znajomy interfejs do tego, czego można oczekiwać w .NET, został przeniesiony z Random.cs firmy mono. Ten kod może nie być bezpieczny dla kryptografii i nie został przetestowany statystycznie.
źródło
Właśnie napisałem tę małą klasę do generowania liczb Normal Random ... to był przyzwoity punkt wyjścia do sprawdzenia, które muszę zrobić. (Te zestawy będą rozłożone na krzywej w kształcie „dzwonu”.) Ziarno zostanie ustawione losowo, ale jeśli chcesz mieć możliwość ponownego wygenerowania zestawu, możesz po prostu przekazać określone ziarno, a ten sam zestaw zostanie wygenerowany.
Baw się dobrze...
Następnie możesz po prostu użyć tego w ten sposób, aby sprawdzić średnią z zestawów 1000 num wygenerowanych między dolnym a górnym limitem. Wartości są przechowywane w klasie, dzięki czemu można uzyskać do nich dostęp po utworzeniu instancji.
_swarmii
źródło
użyj tej biblioteki http://dart.googlecode.com/svn/branches/bleeding_edge/dart/lib/math/random.dart zapewnił dobry generator losowy, który myślę, że zostanie wkrótce dołączony do sdk Mam nadzieję, że to pomoże
źródło
Dla mnie najłatwiej jest zrobić:
Dzięki wyjaśnieniu @ adam-singer tutaj.
źródło
to zadziałało dla mnie
new Random().nextInt(100); // MAX = number
da liczbę losową od 0 do 99
Eample ::
źródło
Pozwólcie, że rozwiążę to pytanie za pomocą praktycznego przykładu w postaci prostej aplikacji do rzucania kostkami, która po dotknięciu wywołuje losowe obrazy twarzy 1 z 6 kości na ekranie.
najpierw zadeklaruj zmienną, która generuje liczby losowe (nie zapomnij zaimportować dart.math). Następnie zadeklaruj zmienną, która analizuje początkową liczbę losową w ramach ograniczeń od 1 do 6 jako liczbę całkowitą.
Obie zmienne są statycznie prywatne, aby można je było zainicjować raz. Nie jest to wielka sprawa, ale byłaby to dobra praktyka, gdybyś musiał zainicjalizować całą grupę liczb losowych.
Teraz utwórz widżet wykrywania gestów z ClipRRectem jako dziecko, aby po dotknięciu przywrócić jeden z sześciu obrazów twarzy kości na ekran.
Za każdym dotknięciem ekranu generowana jest nowa liczba losowa, która służy do wyboru obrazu twarzy kości.
Mam nadzieję, że ten przykład pomógł :)
Aplikacja do rzucania kostkami przy użyciu liczb losowych w rzutce
źródło