Galera, estou com uma dúvida pra adicionar valores inteiros no meu vetor.
Ele aceita valores de 0 a 10.
E não pode se repetir.
Só que eu não estou conseguindo armazenar quando vem 0.
Não sei por que.
Abaixo está meu código:
public class Vetores {
private int valor[] = new int[50];
public void armazenaValor() {
// variavel que gera numero aleatório
Random aleatorio = new Random();
// laço que percorre 20 vezes
for (int i = 0; i <= 20; i++) {
int valorInserir = aleatorio.nextInt(10);
System.out.println("i = " + i + " valorInserir = " + valorInserir);
for (int j = 0; j <= i; j++) {
if (j == i) {
valor[i] = valorInserir;
System.out.println("insere " + valor[i]);
} else {
if (valor[j] == valorInserir) {
System.out.println("não insere " + valorInserir);
break;
}
}
}
}
}
}
Alguém poderia me ajudar?
Olá,
Pelo que pude ver no seu código você só vai conseguir inserir o 0 na primeira posição do seu Array. No entanto, vai haver vários número 0 nesse array.
Você não está conseguindo armazenar o 0 porque na sua comparação valor[j] == valorInserir está retornando true para uma posição que ainda não tenha sido preenchida. Isso ocorre porque o valor padrão para o tipo int é 0. Então um array de int tem todas as suas posições inicializadas com 0. Dessa forma, a sua comparação retorna true, você dá um print dizendo que não inseriu, mas o valor se encontra lá.
Outro detalhe que você deve se atentar: no seu for é possível que existam vários números zero dentro da faixa avaliada (já que as demais já estarão com valor 0 por padrão), pois você incrementa a posição em que vai inserir mesmo que o valor não satisfaça a sua condição.
Experimente fazer um print dos valores contidos nesse seu array e poderá ver os problemas que estou apontando.
Espero ter ajudado.
[]
Éberson
Ola voce tem que comparar todos os valores anteriores.
e voce esta sorteando numero de 0 a 10 num vetor de 50 posicoes certamente irao repetir os numeros para prencher o vetor inteiro… mesmo que seja ate 20 como no for.
vou estudar seu codigo posteriormente posto aqui
É verdade Eberson, vc tem razão.
Augusto, fiz do jeito que vc falou mas ainda continua com bug.
Porque ele não tá adicionando na sequencia.
vetor[0] = 6;
vetor[1] = 2;
vetor[2] = 5;
Porque quando o valor é repetido, o i aumenta.
E a posição vai ficar vazia, ou seja, será igual a 0.
Preciso de um contador, até pq vou ter que imprimir os valores depois.
Tentei fazer, mas não funcionou. Meu código ficou assim:
import java.util.Random;
public class Vetores {
private int valor[] = new int[50];
private int posicao = 0;
private int numerosRepetidos = 0;
public void armazenaValor() {
// variavel que gera numero aleatório
Random aleatorio = new Random();
// laço que percorre 20 vezes
for (int i = 0; i <= 20; i++) {
int valorInserir = aleatorio.nextInt(10);
for (int j = 0; j <= i; j++) {
if (j == i - numerosRepetidos) {
valor[posicao] = valorInserir;
System.out.println("insere " + valorInserir);
posicao++;
} else if (valor[j] == valorInserir) {
numerosRepetidos++;
System.out.println("não insere " + valorInserir);
break;
}
}
}
imprime();
}
private void imprime(){
System.out.println("------------------ IMPRIME -----------------");
for(int x=0; x<posicao; x++){
System.out.println("valor "+x+" = "+valor[x]);
}
}
}
Ele está repetindo valor.
Você deve, obrigatoriamente, utilizar Array?
Esse código deve inserir os valores ordenadamente?
Isso é um exercício de faculdade?
[]
Éberson
Vamos indo… estou tentando aqui;;… temos que comparar o numero aleatorio gerado com a posicao do vetor ate i-1.
Só estou com uma duvida…
estamos colocando valores ate a posicao 20 num vetor de 50 gerando numeros de 0 a 10 correto?
entao digamos que estamo na posicao 9 do vetor (posicao 10 pois inicia em 0) . até esta posicao ele prenche sem repetir e tabem aceita o
zero, mais apos esta posicao o nosso for esta impondo a condicao que tem q ser preenchido ate a posicao 19 (20), mas como iremos prencher mais
10 posicões sem repetir ou seja, temos que sortear numeros de 0 a 10 20 vezes sem repetir nenhum?
Sim Eberson, é um trabalho da faculdade.
Consegui fazer.
Só mudei o for para ser menor que posicao e coloquei um break no if tbm.
Meu código ficou assim:
import java.util.Random;
public class Vetores {
private int valor[] = new int[50];
private int posicao = 0;
private int numerosRepetidos = 0;
public void armazenaValor() {
// variavel que gera numero aleatório
Random aleatorio = new Random();
// laço que percorre 50.000 vezes
for (int i = 0; i <= 200; i++) {
int valorInserir = aleatorio.nextInt(10);
for (int j = 0; j <= posicao; j++) {
if (j == i - numerosRepetidos) {
valor[posicao] = valorInserir;
System.out.println("insere " + valorInserir);
posicao++;
break;
} else if (valor[j] == valorInserir) {
numerosRepetidos++;
System.out.println("não insere " + valorInserir);
break;
}
}
}
imprime();
}
private void imprime(){
System.out.println("------------------ IMPRIME -----------------");
for(int x=0; x<posicao; x++){
System.out.println("valor "+x+" = "+valor[x]);
}
}
}
Obrigado Augusto e Eberson =))
Abraço