Como usar o var-arg? Veja meu exemplinho

sei q:

  • se tiver mais de um parâmetro o varg-arg deve ser o último
  • sintaxe (tipo … nomeVariavel)
  • só pode ter um var-arg por método

meu exemplinho, o uso do var-arg não mudou nada:

[code]class TestarVarArg{
public static void main (String… args){ //funciona normalmente
testaVarArg(3,3);
}

public static int testaVarArg(int a, int... b){  //erro de compilação
	int resultado =  a + b;
	System.out.println(resultado);
	return resultado;
}

}[/code]

dúvidas:

  • em q situação usar o var-arg?
  • pra q q ele realmente serve?
  • usado só com array?

O erro nao é onde vc apontou e sim na onde vc esta somando.

O correto e fazer:

[code]public static void main (String… args){ //funciona normalmente
testaVarArg(3,3);

    }   
  
    public static int testaVarArg(int a, int... b){  //erro de compilação   
        int resultado =  a + b[0];   
        System.out.println(resultado);   
        return resultado;   
    }   [/code]

oi everton, como vai meu camaradinha?

pode me responder por favor:

pq o -> zero? e pq o -> []

[quote=andredecotia]oi everton, como vai meu camaradinha?

pode me responder por favor:

pq o -> zero? e pq o -> [][/quote]

Pq o uso do varargs e como se fosse um array mesmo, quando vc passou o 3 pra ele, é como se vc tivesse fazendo b[0] = 3.

O correto mesmo seria:

int resultado = a;
for(int i : b)
  a += i;

Assim não haveria um ArrayIndexOutOfBoundsException caso ele chamasse a função assim:

testaVarArg(3);

Se você precisa de um elemento específico dentro do vararg, são grandes as chances de você não precisar do vararg no seu método.

Parece que você tem bastante dúvida sobre QUANDO usar ou POR QUE usar.

Ele não serve para se obter um único valor, como no seu exemplo. Nesse caso realmente não há nenhuma vantagem.
Como foi dito no post anterior, se você precisa de um parâmetro específico então não é uma situação adequada para usar var-args.

Como diz o próprio nome, serve para receber uma quantidade variável de argumentos.

Vamos imaginar o seguinte: uma classe de utilidades matemáticas, com alguns métodos de soma:

// Classe MatemaUtils
soma2Numeros(a,b) {
return a + b;
}

soma3Numeros(a,b,c) {
return a + b + c;
}

soma4Numeros(a,b,c,d) { ....

soma12Numeros(a,b,c,d,e,f,g,h,i,j,k,l) { ....

soma20Numeros(...........


// Classe chamadora:
resultado = MatemaUtils.soma2Numeros(5, 7);
resultado = MatemaUtils.soma3Numeros(50, 12, 40);
resultado = MatemaUtils.soma4Numeros(20, 17, 50, 120);

Tedioso, não?

Com var-args pode ser criado um único método:

[code]
// Classe MatemaUtils
somaNumeros(int… valores) {
int res = 0;
for(int v : valores){
res = res + v;
}
}

// Classe chamadora:
resultado = MatemaUtils.soma2Numeros(5, 7);
resultado = MatemaUtils.soma3Numeros(50, 12, 40);
resultado = MatemaUtils.soma4Numeros(20, 17, 50, 120);[/code]

caramba gomesrod , q didática!

valeu mesmo 100% entendido…

abraço,
AS