Exercicio de JAVA[vetor]

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!! :smiley:

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]