Escreva um programa que leia 100 valores inteiros da entrada e identifique o valor mais proximo da média dos valores do vetor.
esse foi o exercicio, tem como analisar meu codigo? pq ta dando um erro na linha em negrito, qual é esse erro?
ERRO: ArrayIndexOutOfBoundsException
100
comentem as linhas por favor,se puderem claro
importjava.util.*;publicclassVetoresExemplo{publicstaticvoidmain(String[]Args){inttotal=0,medtotal=0,n4=0,cont=0;intvet[]=newint[100];Scannern=newScanner(System.in);for(intn1=0;n1<=99;n1=+1){System.out.println("Entre com o "+cont+"º número");[b]vet[cont]=n.nextInt();[/b]total=total+vet[cont];cont=cont+1;}medtotal=total/100;System.out.println("a média é: "+medtotal);}}
Você tem um array de 100 posições… indo de vet[0] até vet[99]
no seu loop tem uma hora que ele tenta acessar o vet[100] que não é alcançado.
Logo lança a exception ArrayIndexOutOfBoundsException
wbdsjunior
felipexavier:
ERRO: ArrayIndexOutOfBoundsException
100
o erro está na linha…
for(intn1=0; n1<=99;n1=+1)
fazendo n1=+1 você apenas atribui o valor 1 positivo para a variável n1.
para somar, você dever utilizar o operador +=.
mude para…
for(intn1=0; n1<=99;n1+=1)
beowulf
Oi…
Eu comecei a fazer esse exercicio para um amigo meu… talvez te ajude
Masterfenix
felipexavier
O unico problema que voce fez no seu programa é que no laço for [size=18]( int n1=0; n1<=99;n1=+1)[/size] voce inverteu os sineis de = e +
Ao invéz de ser =+1 voce deve utilizar +=1
faz o testes, qualquer duvida posta ai para gente tertar te ajudar!!
Caso contrário, fica bem difícil para gente ler o que você escreveu.
andredemelo
for(intn1=0; n1<=99;n1=+1)
Foi o que nossos amigos disseram, ao invés de colocar no laço for:
for(intn1=0; n1<=99;n1=+1)
trocar por:
for(intn1=0; n1<=99;n1+=1)
Então, seu código ficaria assim:
importjava.util.*;publicclassVetoresExemplo{publicstaticvoidmain(String[]Args){inttotal=0,medtotal=0,n4=0,cont=0;intvet[]=newint[100];Scannern=newScanner(System.in);for(intn1=0;n1<=99;n1+=1){System.out.println("Entre com o "+cont+"º número");vet[cont]=n.nextInt();total=total+vet[cont];cont=cont+1;}medtotal=total/100;System.out.println("a média é: "+medtotal);}}
Lucas_Abbatepaolo
voce tambem pode usar o ++ que nicrementa um a sua variavel…
assim:
for(inti=0; i < 100; i++)
andredemelo
Lucas Abbatepaolo,
não coloquei o incremento na variável, pois ele criou uma variável “contador”, que no entanto, la no final do laço ele está fazendo o seguinte comando:
cont=cont+1;
Então não é necessário incrementar a variável “i”, apesar de ser o mais correto a se fazer.
felipexavier
mudei tudo e mesmo assim tava dando erro, ai eu consegui encontrar era no vet como o primeiro que corrigiu viu, obrigado, mas até ai tudo bem..
...o problema agora é comparar, preciso saber qual dos númros do vetor chega mais proximo à média de tudo! =) ajudem?!
"identifique o valor mais proximo da média dos valores do vetor. "
importjava.util.*;publicclassVetoresExemplo{publicstaticvoidmain(String[]Args){inttotal=0,medtotal=0,n4=0,cont=1,MedVar=0;intvet[]=newint[101];Scannern=newScanner(System.in);for(intn1=1;n1<=100;n1+=1){System.out.println("Entre com o "+cont+"º número");vet[n1]=n.nextInt();System.out.println("Valor vet "+vet[cont]);total=total+vet[cont];/* if (n1==100) { if (vet[n1]==total/100) { System.out.println("O "+cont+"º número é igual a média"); } } */System.out.println("valor total "+total);cont=cont+1;}medtotal=total/100;System.out.println("a média é: "+medtotal);}}
Victor_Duarte_da_Sil
Você pode criar um novo laço for que percorra seu vetor e se a diferença é a menor ja encontrada atualiza os valores de proximoMed e de menorDife
seguindo seu código ficaria assim
importjava.util.*;publicclassVetoresExemplo{publicstaticvoidmain(String[]Args){inttotal=0,medtotal=0,n4=0,cont=1,MedVar=0,proximoMed=0,dife,menorDife;intvet[]=newint[101];Scannern=newScanner(System.in);for(intn1=1;n1<=100;n1+=1){System.out.println("Entre com o "+cont+"º número");vet[n1]=n.nextInt();System.out.println("Valor vet "+vet[cont]);total=total+vet[cont];System.out.println("valor total "+total);cont=cont+1;}medtotal=total/5;System.out.println("a média é: "+medtotal);if(vet[1]>medtotal){menorDife=vet[1]-medtotal;}else{menorDife=medtotal-vet[1];}for(intn1=1;n1<=100;n1+=1){if(vet[n1]>medtotal){dife=vet[n1]-medtotal;}else{dife=medtotal-vet[n1];}if(dife<=menorDife){menorDife=dife;proximoMed=vet[n1];}}System.out.println("o Mais proximo da media é "+proximoMed);}}
outro jeito é ordenar o vetor e pegar as posições do meio (no seu caso 50 e 51) e ver qual a mais próxima da da media total
acho que esse jeito seria o eficiente mais esse eu deixo pra vc implementar
OBS: do jeito que vc criou o seu vetor o posição 0 existe e vc esta deixando ele com o valor padrão. o certo seria percorrer do 0 ao 99 e não do 1 ao 100
Testei meio por cima não sei se vai funcionar muito bem.
felipexavier
poderia comentar as linhas por favor, fiquei meio confuso ao estudar elas …
Victor_Duarte_da_Sil
prontinho comentei e já que é pra você estudar dei um melhorada no código para não ficar com a posição 0 do vet vazia e retirei algumas variáveis desnecessárias
a só pra deixar claro vet.length retorna o tamanho do vetor usei bastante ele pra deixar o código mais fácil para manutenção ou uso futuro faça o teste você mesma troque 100 da 7 linha e você vera que o código continuara funcionando com menos ou mais posições no vetor;
importjava.util.*;publicclassVetoresExemplo{publicstaticvoidmain(String[]Args){inttotal=0,medtotal=0,proximoMed=0,dife,menorDife;intvet[]=newint[100];// cria vetor de inteiros de 100 posisoesScannern=newScanner(System.in);for(intn1=0;n1<vet.length;n1++){//loop para precorer o vetor vet System.out.println("Entre com o "+(n1+1)+"º número");vet[n1]=n.nextInt();System.out.println("Valor vet "+vet[n1]);total=total+vet[n1];System.out.println("valor total "+total);}medtotal=total/vet.length;//divitindo-se o total pelo tamanho do vetor se tem a mediaSystem.out.println("a média é: "+medtotal);if(vet[0]>medtotal){//if para subitração dar sempre positivamenorDife=vet[0]-medtotal;//inicialisa nenorDife com a diferença da primeiro posição}else{menorDife=medtotal-vet[0];}for(intn1=0;n1<vet.length;n1++){if(vet[n1]>medtotal){// novamente um if para subitração dar sempre positivadife=vet[n1]-medtotal;}else{dife=medtotal-vet[n1];}if(dife<=menorDife){//ve se e diferença menor do que a menor diferença //se formenorDife=dife;// a menor diferença pega a valer a diferença proximoMed=vet[n1];// atualiza o valor de proximoMed }}//ao sair do loop todas as diferenças foram verificada e proximoMed esta com o valor mais proximo a mediaSystem.out.println("o Mais proximo da media é "+proximoMed);//imprime proximoMed}}