Foros del Web » Programación para mayores de 30 ;) » Java »

Si hago println(), funciona y si asigno a variable, no.

Estas en el tema de Si hago println(), funciona y si asigno a variable, no. en el foro de Java en Foros del Web. Hola amigos. Ahora estaba con este programa: float decimal; float SolDec; int Pot=2; int Fijo; for(int x=0 ; x<50 ; x++){ for(int y=0 ; y<50 ...
  #1 (permalink)  
Antiguo 16/02/2012, 18:17
Turriano
Invitado
 
Mensajes: n/a
Puntos:
Si hago println(), funciona y si asigno a variable, no.

Hola amigos.

Ahora estaba con este programa:

float decimal;
float SolDec;
int Pot=2;
int Fijo;



for(int x=0 ; x<50 ; x++){

for(int y=0 ; y<50 ; y++){

int z=((Math.pow(x,Pot))+(Math.pow(y,Pot)));


}

}

Y no me funciona.
Me da error (en Processing):"cannot convert from double to int".

Y si cambio:
int z=((Math.pow(x,Pot))+(Math.pow(y,Pot)));

por:
println((Math.pow(x,Pot))+(Math.pow(y,Pot)));

Me da las cantidades, así que el problema está en la asignación a la variable "Z", pero no sé porqué...

Lo que estoy haciendo, es un experimento que hice en Basic hace tiempo con un Spectrum, sobre el teorema de Fermat, que conseguí hacer un gráfico con los decimales que salían.

Os estaría muy agradecido que me ayudarais.
  #2 (permalink)  
Antiguo 16/02/2012, 21:13
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 3 meses
Puntos: 57
Respuesta: Si hago println(), funciona y si asigno a variable, no.

Si Math.pow regresa un double, porque lo quieres asignar a un int ?
  #3 (permalink)  
Antiguo 16/02/2012, 21:25
Turriano
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Si hago println(), funciona y si asigno a variable, no.

Vaya...
Entones era eso.
Que burro soy. :-p

Gracias, no había caído.

Ahora a es tarde, pero mañana lo miro.
Saludos y muchas gracias.
  #4 (permalink)  
Antiguo 18/02/2012, 07:03
Turriano
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Si hago println(), funciona y si asigno a variable, no.

Buenoo...
Este código de aquí abajo, ya le he terminado prácticamente del todo, la parte matemática:

float SolDec;
int n=2;
int Fijo;



for(int x=0 ; x<50 ; x++){

for(int y=0 ; y<50 ; y++){

Double z=((Math.pow(x,n))+(Math.pow(y,n)));


double decimal=( Math.pow(z,(1/n) );
int entero=floor(decimal);

print (int((decimal-entero)*100));


}

}


El problema ahora, es que al asignar double, no me funciona (el resto si).
double decimal=( Math.pow(z,(1/n) );

¿Dónde está la metedura de pata ahora?
  #5 (permalink)  
Antiguo 19/02/2012, 04:08
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: Si hago println(), funciona y si asigno a variable, no.

Falta cerrar un paréntesis.

¿Que entorno de programación usas?? los errores que estás mostrando te los informa cualquiera... o incluso un compilador por línea de comandos.

Saludos
  #6 (permalink)  
Antiguo 19/02/2012, 06:03
Turriano
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Si hago println(), funciona y si asigno a variable, no.

Es "Processing":
[URL="http://processing.org/"]http://processing.org/[/URL]

Y el error me dice:
unexpected token: double

Y luego en la consola, me sale todo esto:
processing.app.SketchException: unexpected token: double
at processing.mode.java.JavaBuild.preprocess(JavaBuil d.java:326)
at processing.mode.java.JavaBuild.preprocess(JavaBuil d.java:197)
at processing.mode.java.JavaBuild.build(JavaBuild.jav a:156)
at processing.mode.java.JavaBuild.build(JavaBuild.jav a:135)
at processing.mode.java.JavaMode.handleRun(JavaMode.j ava:176)
at processing.mode.java.JavaEditor$20.run(JavaEditor. java:481)
at java.lang.Thread.run(Thread.java:662)


Gracias por responder y ayudarme.

Última edición por Turriano; 19/02/2012 a las 06:20
  #7 (permalink)  
Antiguo 19/02/2012, 12:13
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: Si hago println(), funciona y si asigno a variable, no.

No tengo ni idea de que es este programa, pero parece que estás empezando en Java, ¿no es así?

Te aconsejo Eclipse, facilita enormemente la tarea de la programación, te salen los errores según escribes, sólo tienes que ponerte encima y te lo explica clarito, en este te habría dicho algo como "añade un paréntesis para completar la sentencia" (en inglés)

Saludos
  #8 (permalink)  
Antiguo 19/02/2012, 18:44
Turriano
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Si hago println(), funciona y si asigno a variable, no.

En realidad, yo soy más de diseño que de programación.
Processing, más que un entorno de programación, es un entorno de diseño gráfico y que se programa en java, aunque una forma más sencilla.
Por ello, tiene sentencias orientadas especialmente hacia el diseño. Como "void setup" y "void draw". Sin embargo en el resto es exactamente igual, en cuanto a uso de operadores lógicos, matemáticas, etc...
[URL="http://processing.org/"]http://processing.org/[/URL]
  #9 (permalink)  
Antiguo 19/02/2012, 18:57
Avatar de Sirius381  
Fecha de Ingreso: abril-2006
Mensajes: 129
Antigüedad: 18 años
Puntos: 12
Respuesta: Si hago println(), funciona y si asigno a variable, no.

Muchas gracias! el post me sirvió para conocer "Processing" según entiendo es como un graficador cierto?
__________________
Don Ramón Fan
  #10 (permalink)  
Antiguo 19/02/2012, 19:21
Turriano
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Si hago println(), funciona y si asigno a variable, no.

Aunque aún no me funciona, pero todavía tengo algún problema.
Pongo el código, con la parte que no me acaba de funcionar del todo:

int n=3;

for(int y=0 ; y<50 ; y++){
int x=y;
Double z=((Math.pow(x,n))+(Math.pow(y,n)));


double decimal=( Math.pow(z,1/n) );


print(" Z: "); print(z); print(" Decimal: "); print(decimal);

}


El problema debe estar aquí:
double decimal=( Math.pow(z,1/n) );

Que yo sepa, la inversión de una potencia, es su raíz y sin embargo me da de valor "1.0".
¿Será que no se puede hacer eso en java?.

Si es así: ¿Hay alguna manera de hacer cualquier tipo de raíz sin demasiado código?.
Más que nada, por sencillez y rapidez.
  #11 (permalink)  
Antiguo 19/02/2012, 19:37
Turriano
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Si hago println(), funciona y si asigno a variable, no.

Cita:
Iniciado por Sirius381 Ver Mensaje
Muchas gracias! el post me sirvió para conocer "Processing" según entiendo es como un graficador cierto?
Si.
Y es muy divertido.
Es lo que me gusta de la programación:
La posibilidad de hacer experimentos con las matemáticas y los gráficos.
Lo que pasa, es que es bastante reciente por lo visto y hay poco Processing hispano.
Pero si quieres, estoy dispuesto a compartir contigo la información que tenga.
¡Saludos!.
  #12 (permalink)  
Antiguo 19/02/2012, 19:41
Avatar de Sirius381  
Fecha de Ingreso: abril-2006
Mensajes: 129
Antigüedad: 18 años
Puntos: 12
Respuesta: Si hago println(), funciona y si asigno a variable, no.

Excelente amigo, mil gracias! te tomo la palabra, no esta demás ir leyendo información, suena muy bueno ya que podría separarme de matlab un poco jejejeje

Saludos!
__________________
Don Ramón Fan
  #13 (permalink)  
Antiguo 19/02/2012, 21:48
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 3 meses
Puntos: 57
Respuesta: Si hago println(), funciona y si asigno a variable, no.

En lugar de esto

Código Java:
Ver original
  1. double decimal=( Math.pow(z,1/n) );

utiliza esto

Código Java:
Ver original
  1. float decimal = (float)(Math.pow(z,1f/n));

La correccion de tu codigo consiste en hacer que la division (la potencia a la que hay que elevar) regrese un float. Si divides un entero entre otro entero, el resultado tambien es entero. Lo que hace el codigo corregido es transformar el numerador a un float. Asi, la division no va a regresar un entero. Otra posibilidad para corregir tu codigo seria dejar 1/n pero la variable n tendrias que declararla como float.

Tambien, hay que declarar la variable decimal como float. Hice la prueba declarandola como double y el resultado no es exacto. Por ejemplo trate la raiz cubica de 27 y el resultado me regresaba 3.0000000982235946

Última edición por posman; 19/02/2012 a las 21:56
  #14 (permalink)  
Antiguo 20/02/2012, 07:21
Turriano
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Si hago println(), funciona y si asigno a variable, no.

¡Muy interesante, Posman!. Luego lo pruebo.

Sirius381:
Te lo puse todo en esta carpeta:
http://dl.dropbox.com/u/20000382/Processing.rar

No obstante, voy a abrir un post nuevo, por si hay más gente interesada.
  #15 (permalink)  
Antiguo 20/02/2012, 14:27
Avatar de Sirius381  
Fecha de Ingreso: abril-2006
Mensajes: 129
Antigüedad: 18 años
Puntos: 12
Respuesta: Si hago println(), funciona y si asigno a variable, no.

Mil gracias Turriano, descargando y leyendo! ;)
__________________
Don Ramón Fan

Etiquetas: programa, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:52.