Estou trabalhando com um pedaço de código onde quero gerar um código aleatório de 4 dígitos. Mas, infelizmente, não consegui obter a saída exata que desejava.
Eu estava usando este trecho de código:
import 'dart:math';
void _generateCode() {
Set<int> setOfInts = {};
setOfInts.add(Random().nextInt(9999));
for (var num in setOfInts) {
if (num.toString().length == 4) {
developer.log('Code: $num');
} else {
developer.log('Code: not a 4 digit code');
}
}
}
@override
void initState() {
super.initState();
_generateCode(); // for testing purposes only
}
O código estava gerando principalmente um código aleatório de 4 dígitos, pensei que poderia conseguir isso incluindo esta declaração de condição,
if (num.toString().length == 4) {
//fortunately, I could get what I want here
}
Mas o problema é que, de acordo com o que está impresso nos logs (toda vez que realizo um hot reload):
Reiniciou o aplicativo em 218 ms.
[log] Código: 8308
Reiniciou o aplicativo em 221 ms.
[log] Código: 6342 Reiniciou o
aplicativo em 209 ms. [log] Código: 3404 Reiniciou o aplicativo em 208 ms. [log] Código: 9468 Reiniciou o aplicativo em 246 ms. [log] Código: 1101 Reiniciou o aplicativo em 127 ms. [log] Código: 8230 Reiniciou o aplicativo em 133 ms. [log] Código: 4104 Reiniciou o aplicativo em 220 ms. [log] Código: 6558 Reiniciou o aplicativo em 213 ms. [log] Código: não é um código de 4 dígitos 👈 aqui está a parte do problema que ele produz Reiniciou o aplicativo em 223 ms. [log] Código: 6234
Se eu removesse a instrução else de:
if (num.toString().length == 4) {
developer.log('Code: $num');
} else {
developer.log('Code: not a 4 digit code');
}
Não consegui obter o código de 4 dígitos, pensei apenas que, ao usar essa instrução if (num.toString().length == 4)
, garantiria a geração do código de 4 dígitos, mas não foi o que aconteceu.
Como posso resolver para não gerar um valor de código de 3 dígitos?
Se olharmos a documentação
Random.nextInt
dele diz:Então você
Random().nextInt(9999)
pode gerar qualquer número de 0 a 9998 (nota: não 9999). Não há garantia de que o código será >999, pode muito bem ser 1, 2 ou 3 dígitos.Uma solução simples é começar com 1.000 e então adicionar um número de 0 a 8.999 a ele:
Observação: 9000
nextInt
nunca retornará o valor máximo real que você passar.