Ejercicio de métodos que no devuelven el valor al main

Iniciado por wung, 28 Diciembre 2018, 12:46 PM

0 Miembros y 1 Visitante están viendo este tema.

wung

Buenas, el tema es que quiero hacer un programa con el que pueda calcular la longitud de una circunferencia cuyo radio se introduce por teclado, y quiero hacerlo usando dos métodos, uno para coger el radio por teclado y otro para hacer la operación del cálculo de la longitud. No soy capaz de hacer que los datos sean devueltos correctamente al método main, el resultado da siempre 0 (es decir el valor con el lo inicializo). Si alguien me explica qué falla lo agradecería, aquí está el código que tengo:


Código (java) [Seleccionar]

public class Ejercicio1 {
   
    static Scanner teclado = new Scanner(System.in);
   
    public static void main(String[] args) {
        double radio=0, longitud=0;
        introducirRadio(radio);
        calcularLongitud(radio, longitud);
        System.out.println("La longitud de la circunferencia es " + longitud);
    }
   
    public static void introducirRadio(double radio){
        System.out.println("Introduzca el radio de la circunferencia");
        radio = teclado.nextDouble();
    }
   
    public static double calcularLongitud(double radio, double longitud){
        longitud = 2 * radio * (Math.PI);
        return longitud;
    }
   
}

rub'n

#1
Debes definir variables de clase, que tienen alcance en todo el cuerpo de la clase, tal cual como hiciste con Scanner
Y tú método calcularLongitud te retorna un valor, no lo estas usando...


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

wung

Hola, gracias por responder.

Vale, he puesto static double radio=0, longitud=0; fuera de main, pero no sé como hacer para usar el valor que retorna calcularLongitud. Mi idea era que al devolver longitud luego la siguiente línea de main lo usara para imprimirla (aunque ahora que lo pienso por ese mismo razonamiento debería haberlo hecho también con radio). He probado haciéndolos ambos void y haciendo que ambos retornen valores pero nada.

HardC0d3

#3
Citar...pero no sé como hacer para usar el valor que retorna calcularLongitud.

Al llamar al método calcularLongitud, en la línea 8 de tu código, no estás asignando el valor devuelto a ninguna variable.
Código (java) [Seleccionar]

calcularLongitud(radio, longitud);


El valor que devuelve el método calcularLongitud lo  tienes que guardar/asignar en tu variable longitud
Código (java) [Seleccionar]

longitud = calcularLongitud(radio, longitud);


A partir de ahí, si la variable longitud es global, podrás usarla en cualquier parte del código.

wung


rub'n

#5
Cita de: wung en 28 Diciembre 2018, 21:46 PM
Entiendo, ya me funciona, muchas gracias!

Esta linea también te funcionaba o hacer la asignación con = , pero previamente definiendolas como variables de clase con static para que puedar usarlas en el main (revisa diferencias entre variables de instancia, variables de clase)

Código (java) [Seleccionar]
System.out.println("La longitud de la circunferencia es " + calcularLongitud(radio, longitud));


@wung emplea el uso de  constructores en vez de hacer toda la lógica en el main doc, y te servirían ambos tipos de variables tanto de clase como de instancia, en este ejemplo no tienes que crear la variables estáticas, aunque también puede hacerlo



Código (java) [Seleccionar]
package foro;

import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;



public class Ejercicion1 {


   /**
    * usando variables de instancia, cuando son static se llaman de clase
    * usando modificador de acceso private por convension en java un standar
    */
   private Scanner leer = new Scanner(System.in);
   private double radio;
   private double longitud;

   /*uso de logger, es mejor que usar un vulgar System.out.println() que exponer información sensitiva de la app */
   private static final Logger LOGGER = Logger.getLogger(Ejercicio1.class.getName());
   public Ejercicion1() {

       instroducirRadio();
       //final double resultado = calcularLongitud(radio);
       //LOGGER.log(Level.INFO, "La longitud es " + resultado );


       LOGGER.log(Level.INFO, "La longitud es " + calcularLongitud(radio));
   }

   private double calcularLongitud(double radio) {
       this.longitud = ((radio * 2) * Math.PI);
       return longitud;
   }

   /**
    * No es la mejor manera de usar esta metodo , se podria hacer sin el parametro double radio
    *
    */
   private void instroducirRadio() {
       System.out.println("Instroduce radio ");


       /*puedes tambien usar el puntero this para diferenciar la variable de instancia al parametros*/
       this.radio = leer.nextDouble();
   }

   public static void main(String ...blablalba) {
       new Ejercicion1();
   }
}



que tal @HardC0d3, en java no existen variables globales, se les llaman variables de instancia y variables de clase cuando son static


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen