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
[code]import java.util.*;
public class VetoresExemplo
{
public static void main(String[]Args)
{
int total=0, medtotal=0, n4=0, cont=0;
int vet[] = new int[100];
Scanner n = new Scanner(System.in);
for ( int n1=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);
}
}
[/code]
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
[quote=felipexavier]ERRO: ArrayIndexOutOfBoundsException
100
[/quote]
o erro está na linha…
for ( int n1=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 ( int n1=0; n1<=99;n1+=1)
Oi…
Eu comecei a fazer esse exercicio para um amigo meu… talvez te ajude
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!! 
abraços
Quando postar códigos, use a tag code. Veja aqui como:
http://www.guj.com.br/posts/list/50115.java
Caso contrário, fica bem difícil para gente ler o que você escreveu.
for ( int n1=0; n1<=99;n1=+1)
Foi o que nossos amigos disseram, ao invés de colocar no laço for:
for ( int n1=0; n1<=99;n1=+1)
trocar por:
for ( int n1=0; n1<=99;n1+=1)
Então, seu código ficaria assim:
[code]import java.util.*;
public class VetoresExemplo
{
public static void main(String[]Args)
{
int total=0, medtotal=0, n4=0, cont=0;
int vet[] = new int[100];
Scanner n = new Scanner(System.in);
for ( int n1=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);
}
} [/code]
voce tambem pode usar o ++ que nicrementa um a sua variavel…
assim:
for(int i=0; i < 100; i++)
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.
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. "
[code]import java.util.*;
public class VetoresExemplo
{
public static void main(String[]Args)
{
int total=0, medtotal=0, n4=0, cont=1, MedVar=0;
int vet[] = new int[101];
Scanner n = new Scanner(System.in);
for ( int n1=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);
}
}[/code]
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
[code]import java.util.*;
public class VetoresExemplo{
public static void main(String[]Args){
int total=0, medtotal=0, n4=0, cont=1, MedVar=0, proximoMed=0, dife, menorDife;
int vet[] = new int[101];
Scanner n = new Scanner(System.in);
for ( int n1=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(int n1=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);
}
}[/code]
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.
poderia comentar as linhas por favor, fiquei meio confuso ao estudar elas …
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;
[code]import java.util.*;
public class VetoresExemplo{
public static void main(String[]Args){
int total=0, medtotal=0, proximoMed = 0, dife, menorDife;
int vet[] = new int[100]; // cria vetor de inteiros de 100 posisoes
Scanner n = new Scanner(System.in);
for ( int n1=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 media
System.out.println("a média é: "+medtotal);
if(vet[0]>medtotal){ //if para subitração dar sempre positiva
menorDife = vet[0]-medtotal; //inicialisa nenorDife com a diferença da primeiro posição
}else{
menorDife = medtotal-vet[0];
}
for(int n1=0; n1< vet.length;n1++){
if(vet[n1]>medtotal){ // novamente um if para subitração dar sempre positiva
dife = vet[n1]-medtotal;
}else{
dife = medtotal-vet[n1];
}
if( dife <= menorDife){ //ve se e diferença menor do que a menor diferença
//se for
menorDife = 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 media
System.out.println("o Mais proximo da media é "+proximoMed); //imprime proximoMed
}
} [/code]