dúvida vetor

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

=D era isto… RESOLVIDO