AFF Education Construa seu Futuro

Aula 48 - Métodos Personalizados

Métodos com Número Variável de Argumentos (varargs)

Parâmetros vs Argumentos: parâmetros são definidos na assinatura do método; argumentos são os valores concretos passados na chamada do método.

varargs (variable arguments) é um recurso do Java que permite criar métodos capazes de receber um número variável de argumentos, usando a sintaxe de reticências (...). Internamente, o Java trata esses argumentos como um array.

Sintaxe: tipo... nomeDoParâmetro

O nomeDoParâmetro representa o array que contém todos os argumentos passados na chamada. O varargs é útil quando não se sabe de antemão quantos argumentos serão fornecidos.

for-each aprimorado e método com varargs

O for-each aprimorado é uma estrutura da linguagem usada para percorrer arrays e coleções de forma simples. Já o varargs é um recurso usado na assinatura de métodos para permitir o recebimento de uma quantidade variável de argumentos.

Esses dois recursos podem ser usados em conjunto: o método recebe os valores com varargs, e dentro dele esses valores podem ser percorridos com um for-each.

// Exemplo: método varargs usando loop for-each aprimorado
// O loop "for (int numero : numeros)" é o for-each aprimorado — NÃO é o método forEach().
// O método somarNumeros usa varargs (int... numeros) para aceitar qualquer quantidade de argumentos.
public class MetodoVarargs {
    public static void main(String[] args) {
        int[] numeros = {10, 20, 30, 40, 50};

        // Loop for-each aprimorado percorrendo o array
        int soma = 0;
        for (int numero : numeros) {
            System.out.println(numero);
            soma += numero;
        }
        System.out.println("Soma: " + soma);

        // Chamando o método varargs com argumentos individuais (sem criar array)
        int resultado = somarNumeros(10, 20, 30, 40, 50);
        System.out.println("Resultado da soma: " + resultado);
    }

    // Método com varargs: recebe quantidade variável de int e percorre com for-each aprimorado
    public static int somarNumeros(int... numeros) {
        int soma = 0;
        for (int numero : numeros) {
            System.out.println(numero);
            soma += numero;
        }
        return soma;
    }
}
        

10

20

30

40

50

Soma: 150

10

20

30

40

50

Resultado da soma: 150

Varargs e arrays funcionam de forma equivalente dentro do método — a vantagem é que na chamada você passa os valores diretamente, sem precisar criar o array explicitamente.

Exemplo de Método com Varargs

Veja um exemplo de método que aceita um número variável de parâmetros inteiros e calcula a soma:

public class MetodosComVarargs {
    public static void main(String[] args) {
        // Chamando o método com diferentes quantidades de parâmetros
        int soma1 = somarNumeros(5, 10);
        int soma2 = somarNumeros(1, 2, 3, 4, 5);
        int soma3 = somarNumeros(7);
        int soma4 = somarNumeros(); // É possível chamar sem parâmetros!
        
        System.out.println("Soma 1: " + soma1);
        System.out.println("Soma 2: " + soma2);
        System.out.println("Soma 3: " + soma3);
        System.out.println("Soma 4: " + soma4);
        
        // Outro exemplo: imprimir strings
        imprimirStrings("Java", "é", "uma", "linguagem", "poderosa");
        imprimirStrings("Olá", "Mundo");
    }
    
    // Método que aceita um número variável de parâmetros inteiros
    public static int somarNumeros(int... numeros) {
        int soma = 0;
        
        // Percorre o array de números (internamente, varargs são tratados como arrays)
        for (int numero : numeros) {
            soma += numero;
        }
        
        return soma;
    }
    
    // Método que aceita um número variável de strings
    public static void imprimirStrings(String... textos) {
        System.out.print("\nTextos: ");
        
        // Percorre o array de strings
        for (String texto : textos) {
            System.out.print(texto + " ");
        }
        
        System.out.println();
    }
}

Soma 1: 15

Soma 2: 15

Soma 3: 7

Soma 4: 0

Textos: Java é uma linguagem poderosa

Textos: Olá Mundo

Exercícios

Teste seus conhecimentos sobre varargs e loop forEach em Java:

1. O que é varargs em Java?

2. Como o Java trata internamente os argumentos passados para um método varargs?

3. Qual regra deve ser seguida ao usar varargs junto com outros parâmetros em um método?

4. Qual é a saída do programa abaixo?

public static int somarNumeros(int... numeros) {
    int soma = 0;
    for (int numero : numeros) {
        soma += numero;
    }
    return soma;
}
System.out.println(somarNumeros(1, 2, 3));

5. Qual das seguintes assinaturas está correta para um método que aceita número variável de Strings?

6. O que o programa abaixo imprime?

public static int somarNumeros(int... numeros) {
    int soma = 0;
    for (int numero : numeros) {
        soma += numero;
    }
    return soma;
}
System.out.println(somarNumeros());

Exercícios de Aplicação AFF Education

Reforce o conteúdo desta aula com mais dois exercícios práticos:

1. Dado public static double media(double a, double b){ return (a + b) / 2; }, quanto vale media(6, 10)?

2. Se um método declara return int mas há um caminho de execução sem return, o resultado é: