Para combinar String con double, una forma de solucionarlo es convertirlo todo a String.
Para ello puedes aprovechar el método llamado toString(), que habitualmente se usa para devolver un String con el que mostrar en pantalla los atributos que consideremos más descriptivos de dicha clase.
Este método lo heredan TODAS las clases escritas en Java y viene de la clase Object (Object es la superclase suprema de todas las clases Java)
Dicho método, podemos usarlo o no, según nos convenga. En caso de querer usarlo, nos conviene "sobreescribirlo" (override) para que se comporte según las necesidades de la clase que estamos creando.
Para una clase Producto con atributos
nombre y
precio, podemos querer construir y devolver un String con ambos datos.
Por ejemplo:
Eso ya nos devuelve un String con ambos datos juntos para ser mostrados en pantalla.
Si además queremos que sea presentado en pantalla con un mínimo de elegancia, podemos aplicar algo de formato a ese String.
Podemos hacer que el nombre siempre ocupe en pantalla una misma cantidad de caracteres, así cuando saquemos un listado de productos los datos salen tabulados a un mismo ancho.
Y también podemos hacer que el valor double salga redondeado siempre a dos decimales, así evitamos que por ejemplo nos salgan precios en pantalla tipo 23,666666667
Esto lo podemos hacer ayudándonos con el método String.format()
String.format() es muy útil para mostrar datos formateados y tiene muchas posibilidades. Si buscar por Internet verás decenas de ejemplos mostrando sus posibilidades.
En este caso, el símbolo % es un comodín donde se insertarán por orden las variables que ponemos a continuación de la cadena.
Con %s le decimos que ahí vamos a meter un String, la variable nombre en este caso.
Con %20s además le estamos diciendo que queremos que ese String ocupe 20 espacios. Si el String tiene menos letras, lo rellenará con espacios.
Con %f le decimos que ahí pondremos un valor real con decimales (floating point), ya sea double o float
Con %.2f además le indicamos que queremos que lo redondee a dos decimales.
Así que nuestra clase Producto, versión simplificada para este ejemplo, podría ser esta:
Luego, en la clase principal main, podemos crear un ArrayList de objetos Producto y luego mostrar un listado de ellos.
El listado en pantalla puede tener un título/cabecera al que aplicaremos también formato (con printf() en este caso ) similar al aplicado a la clase Producto, para que todo salga bien tabulado en pantalla.
Si ejecutamos este código, sale esto en pantalla:
Esta podría ser una forma de hacerlo, ya depende de las clases que tenga tu programa.
Si por ejemplo tuvieras otra clase intermedia que se encargase de gestionar los objetos de la clase Producto, sería esta clase quien debería construir el listado y encargase ella de aplicar formato, en cuyo caso, le iría mejor pedirle a la clase Producto que le devolviera los atributos por separado (getNombre(), getPrecio()) y con ellos construir el String formateado.
Siempre hay varias formas de alcanzar un mismo objetivo, espero que este ejemplo te sirva al menos para tener nuevas ideas.
Un saludo.