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:
publicclassVetores{privateintvalor[]=newint[50];publicvoidarmazenaValor(){// variavel que gera numero aleatórioRandomaleatorio=newRandom();// laço que percorre 20 vezesfor(inti=0;i<=20;i++){intvalorInserir=aleatorio.nextInt(10);System.out.println("i = "+i+" valorInserir = "+valorInserir);for(intj=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;}}}}}}
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
A
augustosilverio
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.
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:
importjava.util.Random;publicclassVetores{privateintvalor[]=newint[50];privateintposicao=0;privateintnumerosRepetidos=0;publicvoidarmazenaValor(){// variavel que gera numero aleatórioRandomaleatorio=newRandom();// laço que percorre 20 vezesfor(inti=0;i<=20;i++){intvalorInserir=aleatorio.nextInt(10);for(intj=0;j<=i;j++){if(j==i-numerosRepetidos){valor[posicao]=valorInserir;System.out.println("insere "+valorInserir);posicao++;}elseif(valor[j]==valorInserir){numerosRepetidos++;System.out.println("não insere "+valorInserir);break;}}}imprime();}privatevoidimprime(){System.out.println("------------------ IMPRIME -----------------");for(intx=0;x<posicao;x++){System.out.println("valor "+x+" = "+valor[x]);}}}
Ele está repetindo valor.
eberson_oliveira
Você deve, obrigatoriamente, utilizar Array?
Esse código deve inserir os valores ordenadamente?
Isso é um exercício de faculdade?
[]
Éberson
A
augustosilverio
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?
Chuvinha
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:
importjava.util.Random;publicclassVetores{privateintvalor[]=newint[50];privateintposicao=0;privateintnumerosRepetidos=0;publicvoidarmazenaValor(){// variavel que gera numero aleatórioRandomaleatorio=newRandom();// laço que percorre 50.000 vezesfor(inti=0;i<=200;i++){intvalorInserir=aleatorio.nextInt(10);for(intj=0;j<=posicao;j++){if(j==i-numerosRepetidos){valor[posicao]=valorInserir;System.out.println("insere "+valorInserir);posicao++;break;}elseif(valor[j]==valorInserir){numerosRepetidos++;System.out.println("não insere "+valorInserir);break;}}}imprime();}privatevoidimprime(){System.out.println("------------------ IMPRIME -----------------");for(intx=0;x<posicao;x++){System.out.println("valor "+x+" = "+valor[x]);}}}