Especificador de formato

Olá pessoal, sou iniciante em programação, eu já pesquisei na net e nao encontrei resposta para minha dúvida entao vim aqui, minha dúvida é a seguinte, na saida do printf, existem especificadores de formato para os tipos primitivos, como %f, %s, $d e etc, mas no caso se eu quiser uma saída de um tipo por referência, existe algum formatador para isso?

AQUI O CÓDIGO

[code]public class Metodo {

double total = 0;

public Metodo soma(double ... numeros){
    
    for(double n : numeros){
        total += n;
    }
    return this;
}

}[/code]

[code]public class Metodotest {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    
    Metodo m = new Metodo();
    m.soma(10, 30).soma(100, 500);
    System.out.printf("%.2f, %.2f", m.total, m.total);
    
    Metodo mm = new Metodo();
    System.out.printf("%.2f, %.2f", mm.soma(50, 100).soma(500));
    
}

}[/code]
No caso o primeiro System.out.printf("%.2f, %.2f", m.total, m.total); quando compila ele aparece o valor porque total é do tipo double.
Mas no segundo System.out.printf("%.2f, %.2f", mm.soma(50, 100).soma(500)); ele da erro porque o especificador é double e o tipo é método, por isso gostaria de saber se há algum especificador de formato para tipos por referência.

Rodrigo, não entendi o que você quis dizer com “saída de um tipo por referência”.

Você quer imprimir o valor de uma variável mas não sabe exatamente o tipo dela?

[quote=tondatto]Rodrigo, não entendi o que você quis dizer com “saída de um tipo por referência”.

Você quer imprimir o valor de uma variável mas não sabe exatamente o tipo dela?[/quote]

Mais ou menos isso, eu quero imprimir uma variável, eu sei o tipo dela, é do tipo metodo, eu conheço os especificadores de formato de tipo primitivo como eu tinha dito %f se fosse um double, %s se fosse uma String, e assim por diante, mas no caso se eu quiser imprimir uma variável desse tipo por referência do tipo método que eu criei na classe acima, existe algum espeficicador pra esse caso?
O problema que eu me refiro está nessa parte do código “System.out.printf[color=red]("%.2f, %.2f", [/color]mm.soma(50, 100).soma(500));” o especificador que eu coloquei é do tipo float e double o %f, mas os valores que eu quero mostrar sao do tipo metodo, da classe que eu passei o código acima do código main.

Ainda não compreendi o que você está dizendo por tipo método. No Java, os métodos não são objetos. Eles retornam um tipo primitivo ou um Objeto.

Hun, eu tentei coloca o %s mas não pensei no método toString, xD, eu ainda não estudei sobre esse método, mas vou da uma pesquisada, talve assim realmente funcione.
Referente a isso que vc falou do método realmente eu me embolei msm rsrsrs, ainda to engatinhando na programação, talvez tenha causado confusão maior porque eu criei uma classe com o nome metodo, da uma olhada no código que eu postei aqui e no método, o tipo de retorno que eu coloquei não foi nenhum tipo primitivo, foi do tipo metodo que é o nome da classe que retorna this, por isso que eu tava perguntando se tinha algum especificador de formato para tipo por referência.(Tipo por referência que eu me refiro nesse caso é um objeto do tipo de uma classe que eu criei, diferente de um tipo primitivo do java como o char, double e etc…)

[code]public class Metodo {

double total = 0;

public Metodo soma(double ... numeros){
    
    for(double n : numeros){
        total += n;
    }
    return this;
}

}[/code]

Se o código estivesse desse jeito, retornando um double como é o caso da variável total do tipo double, era so colocar um %f.

[code]public class Metodo {

public double soma(double ... numeros){
    double total = 0;
    for(double n : numeros){
        total += n;
    }
    return total;
}

}[/code]

Mas vlw ai cara, ce realmente ajudou muito, como eu disse não estudei sobre o método toString, mas ja li algo dizendo que ele pode ser sobrescrito, talvez essa seja a forma solucionar minha dúvida xD

Agora ficou claríssimo. :slight_smile:

Sobre o toString()
Todos as classes em Java herdam a classe Object implicitamente. Isto quer dizer que toda a classe que criamos, os métodos da classe Object são herdados.
Um destes métodos é o public String toString().
Ele traz uma representação do objeto no formato String.

Quando passamos um objeto no parâmetro do método println, print ou printf("%s"), o método toString() do objeto é chamado.

Então, podemos dizer que você pode “configurar” como seu objeto é representado no formato String.

Se você quiser que quando você dar o comando
[color=blue]System.out.println(mm.soma(10,30).soma(100,500));[/color]
ele imprima
[color=blue]640.00[/color]
Você deve implementar o método toString()

[code]public class Metodo {
double total = 0;

public Metodo soma(double ... numeros){  
    for(double n : numeros){  
        total += n;  
    }  
    return this;  
}  

public String toString(){
	return String.format("%.2f", total);
}

}[/code]