Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Aula 4 - Dúvida em um dos itens do texto de Arrays

No final do texto da aula 4 - Arrays aparece um tópico chamado "Um pouco mais..." e o último item desse tópico está reproduzido abaixo:


O método main recebe uma array de Strings como argumento. Essa array é passada pelo usuário quando ele invoca o programa:

$ java Teste argumento1 outro maisoutro

E nossa classe:

class Teste {

public static void main (String[] args) { for(String argumento: args) {

System.out.println(argumento);

}

}

}

Isso imprimirá:

argumento1

outro

maisoutro


Confesso que não entendi muito bem a explicação dada no texto. O que seriam o "argumento 1", o "outro" e o "maisoutro" que aparecem na invocação do programa "Teste"?

Tentei fazer um teste com um loop de "for" no programa desenvolvido no vídeo da aula - igual ao "for" mostrado acima - mas aparece os erros abaixo quando faço o comando javac Turma.java para compilar o programa:

λ javac Turma.java

Turma.java:51: error: illegal start of type

for(String argumento: args) {

^

Turma.java:51: error: ')' expected

for(String argumento: args) {

^

Turma.java:51: error: expected

for(String argumento: args) {

^ 3 errors

Por favor, gostaria de uma explicação mais clara sobre do que se trata essa parte do texto. Do jeito como foi passado achei nebulosa a explicação. Além disso no vídeo da aula 4 não há menção a esse tópico do texto.

3 respostas
solução!

Rafael, você deve ter visto como se declara um array no Java. Algo tipo:

float[] notas = {10.0, 9.5, 9.2, 8.2, 8.9};

e viu como iterar nesse array. Algo tipo:

for(float nota : notas) {
    System.out.println(nota);
}

Se você observar bem, verá que o método main contém a declaração de um array:

String[] args

Nesse ponto, ele está dizendo que o método main receberá um array de objetos do tipo String.

Você deve estar se perguntando: Tá, mas por quê? Simples! Pra gente poder passar um parâmetro para o método main logo no início do programa.

Imagine que um programa que só imprime uma mensagem de boas vindas com o nome do usuário passado como parâmetro. Seria algo tipo:

class Ola {
    public static void main (String[] args) {
        System.out.println("Olá, " + args[0] + "!");
    }
}

Se rodarmos esse programa (após compilarmos), teremos:

$ java Ola Rafael

Teremos na saída:

Olá, Rafael!

Veja que rodamos o programa Ola passando a String "Rafael" como parâmetro para o programa. Onde o nome "Rafael" é armazenado? Dentro do array de Strings "args". Assim, quando fazemos args[0], ele diz que dentro da posição 0 (zero) do array "args", declarado dentro do método main, tem a String "Rafael".

Como "args" é um array de Strings, podemos iterar esse array também. Como passaremos os parâmetros para o array args? Informando-os na linha de chamada do programa, similarmente ao que fizemos com o programa Ola.

Teremos uma chamada assim:

$ java Ola Rafael Gomes Nogueira

Cada uma das Strings (Rafael, Gomes e Nogueira) são parâmetros que estamos passando para o método main. Assim, ele armazenará cada um desses nomes nas posições do array "args" declarado no main. O atributo "args" terá na posição args[0] = "Rafael", na posição args[1] = "Gomes e, na posição args[2] = "Nogueira".

Como "args" é um array e recebeu alguns parâmetros, podemos iterar essa array também. Daí:

class Ola {
    public static void main (String[] args) {
        for (String nome : args) { /** lê cada um dos argumentos passados para args e coloca no atributo "nome" **/
            System.out.println(nome); /** imprime o atributo "nome" **/
        }
        /** o laço acima será repetido 3 vezes (0, 1 e 2), porque passamos 3 parâmetros (Rafael Gomes Nogueira) para o método main, que os armazenou no atributo "args" **/
    }
}

E, chamando o programa:

$ java Ola Rafael Gomes Nogueira

Teremos na saída:

Rafael
Gomes
Nogueira

Espero ter ajudado. Qualquer dúvida, só avisar!

Abraço.

Muito obrigado, Manoel. Sua explicação foi bem detalhada. Consegui fazer o programa compilar. Tinha colocado o loop do "for" fora do main e por isso não compilava. Testei conforme a sua explicação e funcionou. Valeu!

Beleza, Rafael!

Boa sorte nos estudos!