Random sem repetir numero

@staroski
Estou tentando usar um código quase igual ao que você postou e não estou conseguindo
No lugar desse
System.out.println(numero);
Para
aqui.setText ()
Seria o que?
Bom o primeiro resultado
aqui.setText ()
O segundo
aquia.setText()
.
.
.
Seria assim
Bom eu estou tentado colocar seu código e não estou conseguindo você poderia colocar o código mais explicado ?
Bom eu sei que já está bastante explicado kk.
Mas não estou conseguindo.

@staroski
Por enquanto está assim…
Eu sei que esta errado, mas o que eu tenho que mudar.?

public class MainActivity extends Activity {
TextView aqui;
TextView aquia;
TextView aquib;

int quantidade = 20;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}
public final class NumerosAleatorios {

private final List<Integer> numeros;

public NumerosAleatorios(int quantidade) {
    if (quantidade < 1) {
        throw new IllegalArgumentException("Não faz sentido sortear " + quantidade + " números");
    }
    numeros = new LinkedList<>();
    for (int numero = 0; numero < quantidade; numero++) {
        numeros.add(numero);
    }
    Collections.shuffle(numeros);
}

public int proximo() {
    if (numeros.isEmpty()) {
        throw new IllegalStateException("Todos os números já foram sorteados");
    }
    return numeros.remove(0);
}

}

public void Aleatorio(View view) {
int quantidade = 20;
NumerosAleatorios sorteio = new NumerosAleatorios(quantidade);
for (int i = 0; i < quantidade; i++) {
int numero = sorteio.proximo();
aqui.setText(Integer.toString(numero));
aquia.setText(Integer.toString(numero));
aquib.setText(Integer.toString(numero));
}
}

}

aqui.setText(String.valueOf(sorteio.proximo()));
aquia.setText(String.valueOf(sorteio.proximo()));
aquib.setText(String.valueOf(sorteio.proximo()));

Tem gente que quer desenvolver em android sem saber o básico, ai vai ser díficil… Boa sorte

1 curtida

@staroski
Desculpa por perguntar de novo.
Bom eu acho que esse código pode ser usado em muitas coisa. Por isso que estou tentando aprender.
Bom coloquei esse código …

public class MainActivity extends Activity {
TextView aqui;
TextView aquia;
TextView aquib;
int quantidade = 20;
NumerosAleatorios sorteio = new NumerosAleatorios(quantidade);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}
public final class NumerosAleatorios {

private final List<Integer> numeros;

public NumerosAleatorios(int quantidade) {
    if (quantidade < 1) {
        throw new IllegalArgumentException("Não faz sentido sortear " + quantidade + " números");
    }
    numeros = new LinkedList<>();
    for (int numero = 0; numero < quantidade; numero++) {
        numeros.add(numero);
    }
    Collections.shuffle(numeros);
}

public int proximo() {
    if (numeros.isEmpty()) {
        throw new IllegalStateException("Todos os números já foram sorteados");
    }
    return numeros.remove(0);
}

}

public void Aleatorio(View view) {

for (int i = 0; i < quantidade; i++) {
int numero = sorteio.proximo();

aqui.setText(String.valueOf(sorteio.proximo()));
aquia.setText(String.valueOf(sorteio.proximo()));
aquib.setText(String.valueOf(sorteio.proximo()));
}
}

}
Ele executa mas na hora que vou apertar o botão ele o aplicativo para …
Você que é mais experiente pode dizer onde estou errando .
Pega a parte que está errada e contra como deveria ficar
@Mike
Eu estou aprendendo aos poucos o básico.
Comecei a pouco tempo.

Então não deveria estar no android

@Mike
Estou aprendendo por esse livro: Google Android.

Você tem que setar o TextView com base o id que estar no seu arquivo xml

TextView aqui = (TextView)
        layout.findViewById(R.id.aqui);// não sei o id

Depois passe o valor

  aqui.setText(sorteio.proximo());

@Eduardo_Maranata10
Coloquei
TextView aqui;
TextView aquia;
TextView aquib;
aqui = (TextView)findViewById(R.id.aqui);
aquia = (TextView)findViewById(R.id.aquia);
aquib = (TextView)findViewById(R.id.aquib);
Mas também não deu certo…

Coloca o código do sua activity

@Eduardo_Maranata10
public class MainActivity extends Activity {
TextView aqui;
TextView aquia;
TextView aquib;
int quantidade = 20;
NumerosAleatorios sorteio = new NumerosAleatorios(quantidade);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}
public final class NumerosAleatorios {

private final List<Integer> numeros;

public NumerosAleatorios(int quantidade) {
    if (quantidade < 1) {
        throw new IllegalArgumentException("Não faz sentido sortear " + quantidade + " números");
    }
    numeros = new LinkedList<>();
    for (int numero = 0; numero < quantidade; numero++) {
        numeros.add(numero);
    }
    Collections.shuffle(numeros);
}

public int proximo() {
    if (numeros.isEmpty()) {
        throw new IllegalStateException("Todos os números já foram sorteados");
    }
    return numeros.remove(0);
}

}

public void Aleatorio(View view) {

aqui = (TextView)findViewById(R.id.aqui);
aquia = (TextView)findViewById(R.id.aquia);
aquib = (TextView)findViewById(R.id.aquib);

for (int i = 0; i < quantidade; i++) {
int numero = sorteio.proximo();

aqui.setText(String.valueOf(sorteio.proximo()));
aquia.setText(String.valueOf(sorteio.proximo()));
aquib.setText(String.valueOf(sorteio.proximo()));
}
}

}

<?xml version="1.0" encoding="utf-8"?>

<TextView
    android:id="@+id/aqui"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="aqui" />
    
    <TextView
    android:id="@+id/aquia"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="aquia" />
    
    <TextView
    android:id="@+id/aquib"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="aquib" />
    
      <Button 
 android:id="@+id/button_outratela" 
 android:layout_height="wrap_content" 
 android:layout_width="wrap_content" 
 android:text="Aleatório" 
 android:onClick="Aleatorio" />

Tenta isso

 NumerosAleatorios sorteio = new NumerosAleatorios(quantidade);
@Override
protected void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     
    TextView aqui = (TextView)findViewById(R.id.aqui);
   TextView  aquia = (TextView)findViewById(R.id.aquia);
   TextView aquib = (TextView)findViewById(R.id.aquib);
   
   aqui.setText(String.valueOf(sorteio.proximo()));
   aquia.setText(String.valueOf(sorteio.proximo()));
   aquib.setText(String.valueOf(sorteio.proximo()));
}

@Eduardo_Maranata10
Quando tira o
for (int i = 0; i < quantidade; i++) {
Da certo até certa quantidade de vezes que aperta o botão
Por que isso acontece é porque os números ja sairam ?

O certo seria aprender Java antes

@Mike
Qual livro você recomenda?

@Eduardo_Maranata10
Obrigado por sua atenção.

1 curtida

Esse for era só um exemplo de como gerar os 20 números aleatoriamente, sem repetir, você não precisa dele pois você já atribui o numero aleatório diretamente ao seus campos de texto com as seguintes linhas:

aqui.setText(String.valueOf(sorteio.proximo()));
aquia.setText(String.valueOf(sorteio.proximo()));
aquib.setText(String.valueOf(sorteio.proximo()));

Se quer usar laço no seu código, pode fazer algo do tipo:

NumerosAleatorios sorteio = new NumerosAleatorios(quantidade);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView aqui  = (TextView)findViewById(R.id.aqui);
    TextView aquia = (TextView)findViewById(R.id.aquia);
    TextView aquib = (TextView)findViewById(R.id.aquib);

    TextView[] todosMeusTextViews = new TextView[] { aqui, aquia, aquib };
    for (TextView meuTextView : todosMeusTextViews) {
        meuTextView.setText(String.valueOf(sorteio.proximo()));
    }
}
1 curtida