Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Dave17 en 08 de Noviembre 2016, 01:05

Título: Java. If else, if else if, decisión condicional. Ejercicio (CU00636B)
Publicado por: Dave17 en 08 de Noviembre 2016, 01:05
Buenas estoy aprendiendo a programar y haciendo este ejercicio la función me compilo bien sin errores, pero al intentar  pedir datos por teclado para probar la función me sale un error  "error: non-static variable diametro cannot be referenced from a static context  "

agradezco su ayuda de antemano.

Código: [Seleccionar]
import java.util.Scanner;

public class Rueda
 {
private String tipo,marca;
private double grosor,diametro;


public  setDiametro(double diametro){this.diametro=diametro;}       
    public setGrosor(double grosor){this.grosor=grosor;}               
    public double getDiametro(){return diametro;}                           
    public double getGrosor(){return grosor;}
   
   
    public static void comprobarDimensiones(double di, double gr)
     
  {
 
if (di > 1.4)
{
System.out.println("La rueda es para un vehiculo grande");
}
else if (di <= 1.4 && di> 0.8)
{
      System.out.println("La rueda es para un vehiculo mediano");
}
else
{
System.out.println("La rueda es para un vehiculo pequeño");
}
 
if (di > 1.4 && gr < 0.25 || di <= 1.4 && di > 0.8 && gr < 0.25)
{
System.out.println("El grosor para esta rueda es inferior al recomendado");
}

  }
 public static void main(String[] args)
  { 
tipo = " ";
marca = " ";
grosor = 0;
diametro = 0;
   Scanner keyboard = new Scanner(System.in);

   System.out.println("Cual es el diametro ?");
   diametro = keyboard.nextDouble();
   System.out.println("Cual es el grosor ?");
   grosor = keyboard.nextDouble();
   comprobarDimensiones(diametro,grosor);

}
   
}

Título: Re:If else, if else if Java.decisión condicional. Ejercicio (CU00636B)
Publicado por: ESOJ en 09 de Noviembre 2016, 07:12
Buenos días.

Tu código tiene varios errores:

1º.Crea un constructor para inicializar los atributos.
2º.Los métodos setter son de tipo procedimiento (se usan para dar un valor al atributo y no devuelven ningún valor),por lo que tienes que declararlos como void.
3º.Al método comprobarDimensiones no es necesario que le pases parámetros.
4º.En el método main ya no tienes que declarar los atributos de nuevo sino que debes crear un objeto del tipo Rueda:   
Código: [Seleccionar]
Rueda rueda = new Rueda(); y usar los métodos de la clase con el objeto.

El programa quedaría:

Código: [Seleccionar]
import java.util.Scanner;

public class Rueda
{
    private String tipo,marca;
    private double grosor,diametro;

    public Rueda () {       
        tipo = "";
        grosor = 0;
        diametro = 0;
        marca = "";
    }

    public void setDiametro(double diametro){this.diametro=diametro;}       

    public void setGrosor(double grosor){this.grosor=grosor;}               

    public double getDiametro(){return diametro;}                           

    public double getGrosor(){return grosor;}

    public void comprobarDimensiones()
    {
        if (diametro > 1.4)
        {
            System.out.println("La rueda es para un vehiculo grande");
        }
        else if (diametro <= 1.4 && diametro> 0.8)
        {
            System.out.println("La rueda es para un vehiculo mediano");
        }
        else
        {
            System.out.println("La rueda es para un vehiculo pequeño");
        }

        if (diametro > 1.4 && grosor < 0.25 || diametro <= 1.4 && diametro > 0.8 && grosor < 0.25)
        {
            System.out.println("El grosor para esta rueda es inferior al recomendado");
        }
    }

    public static void main(String[] args)
    { 
        Rueda rueda = new Rueda();
        Scanner keyboard = new Scanner(System.in);

        System.out.println("Cual es el diametro ?");
        double entradaDeTeclado = keyboard.nextDouble();
        rueda.setDiametro(entradaDeTeclado);
        System.out.println("Cual es el grosor ?");
        entradaDeTeclado = keyboard.nextDouble();
        rueda.setGrosor(entradaDeTeclado);
        rueda.comprobarDimensiones();

    }
}

Un saludo
Título: Re:If else, if else if Java.decisión condicional. Ejercicio (CU00636B)
Publicado por: Dave17 en 09 de Noviembre 2016, 16:52
Muchas gracias , si esa era mi mayor duda si necesitaba pasarle datos por parámetro o no pero ahora lo entiendo bien , gracias.