Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: pbljnglz en 29 de Agosto 2014, 04:39
-
Hola, he escrito este código yno consigo detectar los fallos. Lo curioso es que si desde la ventana de BlueJ clico con el boton derecho sobre la Clase CirculoConUsuario y ejecuto el metodo main no se me abre la máquina virtual de java. Sin embargo si ya la tengo abierta si se ejecuta el método adecuadamente. Con el resto de clases no me apsa esto.
import java.util.Scanner;
public class CirculoConUsuario{
public static void main(String[] args){
Circulo usuCirculo;
Scanner tecleado = new Scanner(System.in);
String num = tecleado.nextLine();
double radio = Double.parseDouble(num);
usuCirculo = new Circulo(radio);
System.out.print("El area de su circulo es: " + usuCirculo.getArea() + ". El perimetro de su circulo es: " + usuCirculo.getPerimetro() + ".");
}
}
public class Circulo{
//atributos
private static final double PI = 3.1418;
private double radio;
public Circulo(){
radio=1;
}
public Circulo(double miRadio){
radio=miRadio;
}
public void setRadio(double miRadio){
radio=miRadio;
}
public double getRadio(){
return radio;
}
public double getArea(){
return PI*Math.pow(radio,2);
}
public double getPerimetro(){
return PI*2*radio;
}
}
-
Ciertamente es un problema curioso, porque siendo el código sencillo, se revisa rápido y aparentemente no hay ningún error. Además compila sin problemas, pero como tú dices la ejecución se queda bloqueada... Aparentemente se debe a un detalle del compilador en lo que al uso de Scanner se refiere y se soluciona introduciendo un mensaje por consola para petición de un dato. Fíjate que tú estás usando scanner sin haber abierto la consola (no has mostrado un mensaje de petición de datos). Parece como si Scanner por sí mismo no fuera capaz de abrir la consola.
Lo solucionas simplemente introduciendo un mensaje de petición de datos:
import java.util.Scanner;
public class CirculoConUsuario{
public static void main(String[] args){
Circulo usuCirculo;
Scanner tecleado = new Scanner(System.in);
System.out.print("Introduzca el radio del circulo: ");
String num = tecleado.nextLine();
double radio = Double.parseDouble(num);
usuCirculo = new Circulo(radio);
System.out.print("El area de su circulo es: " + usuCirculo.getArea() + ". El perimetro de su circulo es: " + usuCirculo.getPerimetro() + ".");
}
}
Saludos
-
jajajajjajaja esto me a recordado a el scanf del C jejejeje
Debe ser cosa del blueJ, en otros ides no sucede... buena cuestión, estaría bien mandarles a los de blueJ un mensaje con la incidencia... Lo hago?? que pensais??
Bueno un saludo!!
-
Hombre, si tienes ganas hazlo... a ver qué te responden ;)
-
Bueno, pues ya me lo resolvieron, jejeje a ver pongo el mensaje que le mande y su respuesta...XDD
Duda presentada:
hello, i am using bluej but i look a problem.
When i create a Scanner object and you ask to user for a keyboard input whithout any output before, the console dont show up when i execute my program with bluej...i wait i wait but dont appear... it´s this normal??
for this i think that it's a bug... and finally i must to reset the java virtual machine and write an output(System.out) to make its work...
for example:
public class TestInput{
public static void main(String[] args){
Scanner tecleado = new Scanner(System.in);
String chain = tecleado.nextLine();
System.out.print("The chain value is "+chain);
}
}
Respuesta:
Hi Luis,
This is covered in the FAQ:
http://www.bluej.org/faq.html#faq_I_wrote_a_program_that_asks_for_input__using_Scanner_class__System_in_read_______java_io___classes___When_I_run_it__it_does_nothing__and_just_keeps_running_forever_ (http://www.bluej.org/faq.html#faq_I_wrote_a_program_that_asks_for_input__using_Scanner_class__System_in_read_______java_io___classes___When_I_run_it__it_does_nothing__and_just_keeps_running_forever_)
The terminal window does not automatically open unless something is output to it. BlueJ cannot tell when your program is expecting input.
You simply need to make the terminal window visible (using the menu), as is described in the link that I sent you. There is no need to reset the virtual machine or perform output if you really do not wish to.
regards,
Davin
Para los que no controlan inglés, viene a decir que la consola no se abre automáticamente hasta que no se produzca una salida. Y que simplemente la hagamos visible usando el menú: View --> Show Terminal.
Bueno la verdad es que es extraño solicitar una entrada sin ningún mensaje previo...
así que nada, cuando soliciteis una entrada sin realizar ninguna salida antes, debéis abrir la terminal manualmente, entonces ya podréis meter la entrada.
Bueno un saludo.
-
Sí, es extraño solicitar entradas sin mensaje previo. Y también es extraño que te hayan respondido tan rápido, aunque sea algo que tengan en las faq
Saludos!
-
Muchas gracias por la ayuda a todos !