Exercicio de JAVA[vetor]

12 respostas
felipexavier

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

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);    
}
}

12 Respostas

C

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

abraços

ViniGodoy

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.

andredemelo
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:

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); 
} 
}
Lucas_Abbatepaolo

voce tambem pode usar o ++ que nicrementa um a sua variavel…
assim:

for(int i=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. "

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);    
    }
}
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

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);  
    }    
}

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;
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
    }    
}
Criado 5 de outubro de 2010
Ultima resposta 15 de out. de 2010
Respostas 12
Participantes 9