Jump to content
.EXO

Arrays problema

Recommended Posts

.EXO

estou a aprender java e quero criar uma função que dado um array me dá o valor máximo desse array.

eu tenho esta função... mas esta sempre a dar um erro java.lang.ArrayIndexOutOfBoundsException.

public static int max (int[] a){
            int m = 0;
            int i;
            int comp = a.length;
            for(i = 0; i <= comp; i++){
              if (a[i] >= a[i+1]) {m = a[i];}
              else {m = a[i+1];}
            }
            return m;
         }

Eu acho que sei porque acontece isto mas não sei como corrigir.

Alguem me pode ajudar?

Share this post


Link to post
Share on other sites
Knitter

Isso é um problema entre a noção de índice de vector e tamanho de um vector :thumbsup:

Se os vectores começam em zero, só podes percorrer o vector até ao seu tamanho - 1. Na condição do for altera a comparação para i < comp ou para i <= comp - 1 e deixas de ter esse problema.

Repara que se o vector tiver um tamanho 5, então têm índices de 0 a 4, mas no teu ciclo estás a tentar aceder à posição 5 que não existe.

Share this post


Link to post
Share on other sites
brunoais

Esse código trabalha em java com um conceito de C.

Ex:

Na linha:

int comp = a.length;

é completamente inútil.

Fica mais correcto assim (até poupas em memória e processamento):

Não esquecer: Pôe aqui uma indentação de jeito!!! ajuda tanto a ler...

public static int max (int[] a){
            int m = 0;
            for(int i = 0; i < a.length -1 ; i++){
              if (a[i] >= a[i+1]) {
                m = a[i];
              }else {
                m = a[i+1];
              }
            }
            return m;
         }

Isso é um problema entre a noção de índice de vector e tamanho de um vector :thumbsup:

Se os vectores começam em zero, só podes percorrer o vector até ao seu tamanho - 1. Na condição do for altera a comparação para i < comp ou para i <= comp - 1 e deixas de ter esse problema.

Repara que se o vector tiver um tamanho 5, então têm índices de 0 a 4, mas no teu ciclo estás a tentar aceder à posição 5 que não existe.

Dá para ver que não leste (pelo menos não percebeste) o código dele :confused: . O que sugeres aí não é suficiente pq ele tenta aceder à posição i + 1 no if e no else


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
jpedro20

Porque não utilizam o m para fazer as comparações? Mais fácil digo eu:

public static int maxInt (int[] a) {
        int m=Integer.MIN_VALUE;
        for(int i=0;i<a.length;i++) {
            if(m<a[i]) m=a[i];
        }
        return m;
}

EDIT: Alias, essas funções nem dão o maior valor do array. Dão o maior valor das duas ultimas posiçoes do array.

int[] a = {1,20,18,2,2,3};

Resultado: 3

Share this post


Link to post
Share on other sites
brunoais

Porque não utilizam o m para fazer as comparações? Mais fácil digo eu:

...

EDIT: Alias, essas funções nem dão o maior valor do array. Dão o maior valor das duas ultimas posiçoes do array.

int[] a = {1,20,18,2,2,3};

Resultado: 3

(eu não queria dar-lhe já toda a resposta... *wisper*)


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
jpedro20

(eu não queria dar-lhe já toda a resposta... *wisper*)

Apenas constatei um facto  :thumbsup:

Share this post


Link to post
Share on other sites
Baderous

ah... ok xD

só uma coisa... o que faz o Integer.MIN_VALUE?

A constant holding the minimum value an int can have, -2^31.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.