DUVIDA sobre como funciona o "array.length"

2 respostas
F

Então, nesse código, se eu mudar o if do meio para “i==A[0].length-1” ele para de ler a ultima coluna. por que isso acontece? Alguém me explica como funciona o .length… Eu sei que ele retorna o tamanho da linha/coluna, mas quando eu uso o -1?

public class Exercicio3{
   public static void main(String[] args){  
      double[][] A = {{7,2,2,10},
                     {3,5,8,4},
                     {5,6,1,6}};
      verificarElemento(A,10);
   }
   
   public static boolean verificarElemento(double[][] A, double elemento){
      boolean tof = true;
      int i=0,j=0;
      while(i<A.length-1 && A[i][j] != elemento){
         j++;
         if(j==A[0].length){//**ESSE IF**
            i++;            
            j=0;
         }
         
      }
      if(i==A.length-1)tof=false;
      System.out.println(tof);
      return tof;
   }
}

2 Respostas

K

O length lhe da o tamanho de caracteres de uma determinada string.

O array.length-1 lhe da o tannho de uma array, quando se usa e para informar a posição, pois a primeira posição de uma array é zero.
exemplo:

Uma array de 5 posições o length vai informar o valor 5, e no array a quinta posição é 4 e não 5, por este motivo que é array.length-1.

P

esse estilo de Array se chama C-Array, em oposição ao Pascal-Array que tem indice 1.

em C arrays são “basicamente” areas de memoria. a variavel array é um ponteiro para o elemento 0 e para acessar o elemento 1 vc pega o tipo, descobre o tamanho em bytes, soma com o endereço de 0 ( faz o famoso offset ) e pimba. quer pegar o elemento 5 ? facil tb.

array -> endereco memoria 1234
tipo -> 2 bytes ( inteiro )

array[0] esta em 1234
array[5] esta em 1244 ( somou 2 bytes vezes 5)

por isso quando se fala ( o tamanho do array é 10, ele vai de 0 a 9 e contem 10 elementos )

pq pegar o tamanho e subtrair um é ridiculamente mais facil do que corrigir o offset caso o array comece em 1.

Java apenas seguiu esse padrão.

( em C as strings são arrays terminadas em \0 ou seja alem de tudo tem sempre um byte a mais pra confundir a galera, mas Java abstrai isso e vc não precisa saber desses fatos. Alias Strings são imutaveis e vc nao imagina como a sua vida é mais facil com isso :slight_smile:

Criado 28 de outubro de 2016
Ultima resposta 29 de out. de 2016
Respostas 2
Participantes 3