[Resolvido] Duvida em Binary Search

ao analizar este codigo do mei livro do Deitel, me deparei denovo com uma duvida que ja tinha a um bom tempo, eu ja entendi o codigo, e como funciona uma pesquisa binaria, mas, sempre fique intrigado, por que ao definir o ponto maximo do array, é usado " -1 " depois da chamado do metodo length da array ?
desde ja, obrigado

import java.util.Random;
import java.util.Arrays;

public class BinaryArray
{
   private int[] data; // array de valores
   private static Random generator = new Random();

   
   public BinaryArray( int size )
   {
      data = new int[ size ];

      for ( int i = 0; i < size; i++ )
         data[ i ] = 10 + generator.nextInt( 90 );

      Arrays.sort( data );
   } 

 
   public int binarySearch( int searchElement )
   {
      int low = 0; 
      int high = data.length - 1; 
      int middle = ( low + high + 1 ) / 2;    
      int location = -1;    

      do 
      {
        
         System.out.print( remainingElements( low, high ) );

     
         for ( int i = 0; i < middle; i++ )
            System.out.print( "   " );
         System.out.println( " * " ); // indica o meio atual

             
         if ( searchElement == data[ middle ] )                 
            location = middle; // a localização é o meio atual

                
         else if ( searchElement < data[ middle ] )        
            high = middle - 1; // elimina a metade mais alta
         else   
            low = middle + 1; // elimina a metade mais baixa

         middle = ( low + high + 1 ) / 2; // recalcula o meio
      } while ( ( low <= high ) && ( location == -1 ) );           

      return location;
   }                      

  
   public String remainingElements( int low, int high )
   {
      StringBuffer temporary = new StringBuffer();

     
      for ( int i = 0; i < low; i++ )
         temporary.append( "   " );

      for ( int i = low; i <= high; i++ )
         temporary.append( data[ i ] + " " );

      temporary.append( "\n" );
      return temporary.toString();
   }

  
   public String toString()
   {
      return remainingElements( 0, data.length - 1 );
   }
} 

Por que os arrays sempre começam sua posição em zero e a última posição do array é sempre (tamanho máximo - 1). Vamos supor que você tenha um array com 10 elementos. Portanto sua variável “high” seria 10, certo? Se você tentasse fazer isso:

data[high] = numero;

seria lançada uma exceção, pois a posição máxima do seu array é 9.
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

Pegou?

Abraços!

opa, Agora sim, nao tinha olhado por esse ponto… Obrigado