[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: Dúvidas nos códigos: Main e Place



On Sat, 6 Apr 2002, Tiago Motta Jorge wrote:

> Caro Professor e Colegas,
> 
>     Estive dando uma estudada nos códigos que o professor disponibilizou para 
> nós e encontrei duas coisas que não entendi:  

Vou aproveitar sua pergunta para fazer vocês começarem a olhar a 
documantação online das interfaces e classes da biblioteca Java.

O ponto de partida é a página 

  http://www.linux.ime.usp.br/java/docs/jdk1.3/api/overview-summary.html

A partir dessa página você alcança a documentação dos vários pacotes da
biblioteca Java. As suas duas perguntas tem a ver com o pacote java.util.

> 1º) No código Main.java: 
>     A linha  "Place place = (Place)world.values().iterator().next();" não me
> pareceu muito familiar. Imagino que deve ser algum jeito de pegar o lugar
> inicial do mapa de Mundos. Ficaria mais claro se soubéssemos exatamente o que
> se passa ao chamar os métodos value(), iterator() e next() da classe
> Map. Alguém sabe o que fazem esses métodos?

Sim, é para pegar um lugar do mapa de mundos. Esse lugar será usado como
lugar inicial.

- O método values() da interface java.util.Map retorna a coleção de valores 
  na tabela. Veja a documentação da interface java.util.Map, em

    http://www.linux.ime.usp.br/java/docs/jdk1.3/api/java/util/Map.html

  A descrição desse método está em

  http://www.linux.ime.usp.br/java/docs/jdk1.3/api/java/util/Map.html#values()

- O metodo iterator() da interface java.util.Collection retorna um iterator
  com o qual você pode percorrer (obter um a um) os elementos da coleção.
  Veja a documentação da interface java.util.Collection, em

    http://www.linux.ime.usp.br/java/docs/jdk1.3/api/java/util/Collection.html

  Note que você pode chegar aqui a partir da descrição do método values(),
  clicando no valor de retorno.

- O método next() da interface java.util.Iterator retorna o próximo elemento
  da coleção à qual o iterador está associado. Na primeira chamada a next()
  é retornado o "primeiro elemento" da coleção. (As aspas são porque a
  coleção não é necessáriamente ordenada, por isso ela pode não ter um 
  primeiro elemento. O que interessa é que assim você pega algum elemento da
  coleção.) Veja a documentação da interface java.util.Iterator, em
  
    http://www.linux.ime.usp.br/java/docs/jdk1.3/api/java/util/Iterator.html

> 2º) No código Place.java:
>     A linha "return (String[])exits.keySet().toArray(new String[0]);" fez
> surgir uma dúvida. O que se passa no argumento do método toArray() ? Neste
> caso particular, gostaria de saber por que foi passado o argumento 'new
> String[0]'. Seria um vetor de Strings com apenas uma String? Em um caso mais
> geral, gostaria de saber como interpretar os argumentos 'new Xxxx' passados
> para funções. Não imagino como isso é interpretado.    

Essa chamada ao método toArray() é mesmo estranha... O argumento só serve
para dizer ao toArray() o tipo de array que você quer que ele retorne. 
No caso, passei ao toArray() um array de Strings, pois eu quero que ele me
retorne um array de Strings. Note que o array de Strings passado ao toArray()
tem comprimento zero. Ele só serve para informar ao toArray() qual o tipo 
(não o tamanho) do array que ele deve retornar.

Veja a descrição do método toArray(Object[] a) na documentação da interface
java.util.Collection.

Quanto ao 'new Xxxx': isto é uma chamada ao construtor de 'Xxxx', que retorna
um objeto recém-construído da classe 'Xxxx'. Em geral não acontece nada de
diferente quando se passa um 'new Xxxx' para um método. O toArray() é que é
especial. 

Reverbel