Java - FALLO: Double cannot be converted to String

 
Vista:
sin imagen de perfil
Val: 15
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

FALLO: Double cannot be converted to String

Publicado por Clavillo (5 intervenciones) el 23/12/2020 10:33:34
Hola buenos días, un saludo a todos.

Tengo la siguiente tarea que hacer:


1. Crea un interface Supplier para que recoja un decimal por pantalla.
2. Crea un interface Function para decimales para calcular la función
(seno(x)2 + cos(x) 3)/5.
3. Crea un interface Function cifrasNumero para decimales que nos devuelva un entero con el número de cifras enteras tiene un número con la instrucción do While.
4. Crear un Consumer escribePantalla que escriba por pantalla los resultados. Recibirá un <String> como entrada.

El resultado de la ejecución sería:

Escriba un número decimal por pantalla
2456
El resultado de aplicar la función trigonométrica al numero 2456.0 es 0.17180821904080595
El numero total de cifras del numero 2456.0 es 4


El código que he realizado para ello es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.mycompany.estructurasdecontrolfuncional;
 
import java.util.Scanner;
import java.util.function.Supplier;
import java.util.function.Consumer;
import java.util.function.Function;
 
public class Ejercicio5 {
 
    public static void main(String[] args) {
 
    Scanner teclado = new Scanner(System.in);
 
    Supplier <Double> numeroPorPantalla = () ->{
         double n;
         System.out.println("Escriba un número decimal por pantalla");
         n=teclado.nextDouble();
         return n;
    };
 
    // (seno(x)2 + cos(x) 3)/5;
    Function <Double, Double> funcionTrigo = (n) -> Math.sin(Math.pow(n,2.0))+Math.cos(Math.pow(n,3.0))/5;
    Function <Double, Integer> cifrasNumero = (n) -> {
        int  cifras= 0;
        while(n >0 ){
          n /=10;
          cifras++;
        }
        return cifras;
     };
 
 
   Consumer <String> escribePantalla = (n) -> {
 
 
        System.out.println("El resultado de aplicar la función trigonométrica al número"+n+" es "+funcionTrigo.apply(numeroPorPantalla.get()));
        System.out.println("El número total de cifras del número"+n+" es "+cifrasNumero.apply(numeroPorPantalla.get()));
    };
 
 
    System.out.println(escribePantalla.accept(numeroPorPantalla.get()));
 
 
    }
 
}

Pero me sale el fallo del título, y no entiendo bien porqué ya que en todo caso debería decirme que INTEGER cannot be converted to String, he intentado la conversión mediante String.valueOf() pero no he debido hacerlo bien porque no me ha funcionado.

Por otro lado, la función de contar las cifras del número ingresado tampoco está funcionando correctamente y ya no sé muy bien por dónde tirar ni qué corregir.

Agradecería cualquier ayuda, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

FALLO: Double cannot be converted to String

Publicado por Rodrigo (623 intervenciones) el 23/12/2020 14:45:21
El ejemplo que te dan aparentemente se ingresa el valor 1 vez y luego se aplica a las funciones, no se pide el numero 3 veces.

Tal vez conviene que numerosPorPantalla, en vez de retornar un Double, retorne un string.

El error que tienes es porque el consumer espera un string, pero numerosPorPantalla provee un Double.
Para eliminar ese error especifico o bien cambias el supplier para que retorne un strring (lo que recomiendo), o bien haces la conversion a string en la invocacion de la linea 41, que hay que mejorar algo mas tambien.

El System.out.println de la linea 41, eliminalo, no quieres escribir (y creo que no puedes escribir lo que retorna un Consumer, porque creo que retorna nada).

Dejalo como

1
escribePantalla.accept(numeroPorPantalla.get());

Pero cambia el tipo del Supplier a String (y cambia la implementacion interna para que solo lea un string y sea escribePantalla quien reciba ese string, lo convierta en double y lo use para la invocacion de las otras funciones.

O bien dejalo como String y cambia la invocacion a

1
escribePantalla.accept(String.valueOf(numeroPorPantalla.get()));

o tambien

1
escribePantalla.accept("" + numeroPorPantalla.get());

y luego en la funcion escribePantalla transforma el string en double y usa ese valor para invocar las funciones, no vuelvas a invocar a numeroPorPantalla.get()

Tienes un error en la funcion que calcula la suma de sin y cos, a menos que lo escribiste mal aqui

sin(x)^2 no es lo mismo que sin(x^2), en un caso elevas al cuadrado el resultado del sin, en el otro elevas al cuadrado a x.
Mismo problema con el cos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 15
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

FALLO: Double cannot be converted to String

Publicado por Clavillo (5 intervenciones) el 23/12/2020 16:31:48
Hola Rodrigo,

En primer lugar muchísimas gracias por responder y tomarte tu tiempo en solucionarme los fallos, has sido muy muy amable.

Respecto al ejercicio, finalmente he dejado el supplier como Double y he hecho la conversión a String posteriormente, me ha servido de gran ayuda.

Respecto al punto 3 del ejercicio, sigo sin encontrar el fallo cuando realiza la cuenta de números, no obstante voy a seguir peleándome con ello a ver si doy con la tecla.

De nuevo muchísimas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

FALLO: Double cannot be converted to String

Publicado por Rodrigo (623 intervenciones) el 23/12/2020 17:01:48
Respecto al punto 3, cual es la falla que observas? que numero ingresas?, que valor esperas?, que valor obtienes?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

FALLO: Double cannot be converted to String

Publicado por Clavillo (5 intervenciones) el 23/12/2020 17:11:30
Por ejemplo, ingreso el mismo número del ejemplo: 2456, debería retornar que el número de cifras son 4, sin embargo recibo 327.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

FALLO: Double cannot be converted to String

Publicado por Rodrigo (623 intervenciones) el 23/12/2020 17:32:50
El problema que tienes es que comparas un double, que estas dividiendo, contra 0, lo que hace una secuencia del estilo:

2456
245.6
24.56
2.456
0.2456
0.02456
0.002456
...
etc

No se que es lo que tienes que contar, los digitos al lado izquierdo del punto decimal?
Si fuera 2456.4, tendrias que retornar 4 tambien, o 5?

Tal vez podrias experimentar con estas opciones:

- Transformar en string y hacer logica con este tipo de dato (remover los ceros a la derecha, no considerar el punto, etc)
- En vez de comparar con 0, comparar contra 1 y usar logica especifica si el numero ingresado es 1
- Hacer un ciclo y multiplicar por 10 hasta que no haya decimales, convertirlo en entero y contar los numeros despues de esa operacion de la manera que lo haces ahora
- Usar el logaritmo en base 10 haciendo algo de logica para considerar casos especiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 15
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

FALLO: Double cannot be converted to String

Publicado por Clavillo (5 intervenciones) el 23/12/2020 17:41:28
La verdad que no entiendo bien el ejercicio ahora que lo pienso, dice expresamente "Crea un interface Function cifrasNumero para decimales que nos devuelva un entero con el número de cifras enteras tiene un número con la instrucción do While." así que supongo que se referirá a lo que está a la izquierda de la coma, es decir, si fuese 2456.4, retornaría 4 únicamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

FALLO: Double cannot be converted to String

Publicado por Rodrigo (623 intervenciones) el 23/12/2020 17:59:01
Si es asi, conviertelo en int antes de hacer el ciclo, y convierte el ciclo en do-while, ahora tienes while.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

FALLO: Double cannot be converted to String

Publicado por Clavillo (5 intervenciones) el 25/12/2020 10:45:30
Estupendo, intentaré hacer lo que me dices, muchas gracias por tu tiempo :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

FALLO: Double cannot be converted to String

Publicado por Dani (3 intervenciones) el 13/01/2021 17:14:46
Hola, no consigo solucionar que pida las 3 veces el numero, ¿me podrias ayudar con este punto? Clavillo o Rodrigo, he probado pero no consigo dar con la solucion

muchas gracias a los 2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

FALLO: Double cannot be converted to String

Publicado por Rodrigo (623 intervenciones) el 13/01/2021 22:41:14
Estas resolviendo el mismo problema?
Por que quieres pedir 3 veces el numero? Eso no parece ser lo que se pide en este problema.

Tienes algo de codigo para mostrar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

FALLO: Double cannot be converted to String

Publicado por Dani (3 intervenciones) el 14/01/2021 09:17:34
Si, es el mismo problema pero he intentado hacer lo que decias pero no lo consigo
mira es asi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package newpackage;
 
import java.util.Scanner;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
 
public class Ejercicio5 {
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
 
		Supplier <Double> numeroPorPantalla = () ->{
			double n = 0;
		    System.out.println("Escriba un número decimal por pantalla");
		    n=teclado.nextInt();
		    return n;
 
		    };
 
		    Function<Double,Double> funcionTrigo = x -> {
		    	double resul;
		    	return resul=(Math.sin(x)*Math.sin(x) + Math.cos(x)*Math.cos(x)*Math.cos(x))/5;
 
		    };
 
		    Function <Double, Integer> cifrasNumero = (n2) -> {
 
		    	int iCantidad = 0;
		    	double iTemp = n2;
 
		    	while (iTemp>=1){
		    	  iTemp = iTemp/10;
		    	  iCantidad++;
		    	}
 
		        return iCantidad;
		     };
 
		     Consumer <String> escribePantalla = (n) -> {
 
 
		         System.out.println("El resultado de aplicar la función trigonométrica al número"+n+" es "+funcionTrigo.apply(numeroPorPantalla.get()));
		         System.out.println("El número total de cifras del número"+n+" es "+cifrasNumero.apply(numeroPorPantalla.get()));
 
		     };
 
		     escribePantalla.accept(String.valueOf(numeroPorPantalla.get()));
 
	}
 
}

muchas gracias por tu tiempo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

FALLO: Double cannot be converted to String

Publicado por Rodrigo (623 intervenciones) el 14/01/2021 14:30:28
En escribePantalla se recibe n, pero solo se usa para el print inicial, usa a n como parametro en la invocacion de las otras funciones tambien.

Encierra el codigo usando el boton </>Codigo cuando publiques codigo. Es mas facil leerlo cuando esta indentado que cuando no.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

FALLO: Double cannot be converted to String

Publicado por Dani (3 intervenciones) el 14/01/2021 16:46:27
Hola Rodrigo, muchas gracias, funciona perfecto, muchas gracias por tu tiempo
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar