problema al intentar ejecutar un metodo cuando un boolean es true

Iniciado por robertofd1995, 1 Noviembre 2013, 00:22 AM

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

robertofd1995

el titulo no es muy bueno pero no se me ocurria otra cosa jaja ;D

mi problema es el siguiente , tengo que comprobar si el combustible del avion es 0 o menor , si es asi debe devolver false , de tener combustible , al ejecutar el boolean fly debe restarle uno a combustible , yo tengo esto

public boolean fly()
    {
   
     if (getCombustible() <=0)             
      return false ;
     
     else     
      return true ;
           
    }
   
    public void move(){
    if (fly()==true)
    combustible=combustible-1;
   
    }


cabe decir que combustible es un int , no copio todo el programa porque es extenso y no tiene que ver con mi problema , el problema es que para hacer lo que quiero tengo que ejecutar primero el metodo fly y luego el move , yo lo que quiero hacer es que si el boolean es true , directamente le reste uno a combustible, sin tener que usar el metodo move

espero que me podais ayudar , un saludo y gracias  ;-)

Mitsu

Si el método move lo estás usando para comparar el valor del combustible, para luego decrementar el mismo, y no lo usas para otra cosa, puedes simplemente hacer:

Código (=java) [Seleccionar]

public void fly()
    {
     if (getCombustible() >0) {
          combustible--;
     }     
}


Donde cada vez que se llama a fly(), se obtiene el combustible y se compara si es mayor a 0, de ser así, se le resta directamente 1.

robertofd1995

#2
el problema es que tengo que usar boolean porque me lo especifica el ej , estoy en primero de carrera , pero no se como hacer para modificar parametros dentro del boolean
ademas en el ejemplo solo puse lo del combustible , pero tambien tengo que cambiar mas valores de otros metodos  si el bolean es true ,

Mitsu

Citar
el problema es que para hacer lo que quiero tengo que ejecutar primero el metodo fly y luego el move , yo lo que quiero hacer es que si el boolean es true , directamente le reste uno a combustible, sin tener que usar el metodo move.

Código (=java) [Seleccionar]

public boolean fly()
boolean puedeVolar = false;
    {
     if (getCombustible() >0) {
          combustible--;
          puedeVolar = true;
     }

      return puedeVolar;
}



Citar
pero no se como hacer para modificar parametros dentro del boolean.

Modificar parámetros? Si necesitas adicionar parámetros a tus métodos simplemente adicionalos. O puedes sobrecargar un metodo para que acepte otros parámetros.

robertofd1995

a ver perdona pero no me estoy explicanco con claridad y no nos estamos entendiendo

yo tengo estas variables , combustible , xSpeed , ySpeed , xPos y yPos , todos son int

vale lo que quiero hacer es que si el metodo fly me devuelve true , este ha de restar uno a combustible y modificar la posicion sumandole la velocidad , voy a comer a ver si me respondes y sino subo el codigo entero y ya nos entenderemos mejor

y gracias por la ayuda  ;D

Paybck


Paybck

Yo pondría:

if(combustible=0)
     return false;
else
    {
       combustible=combustible-1;
       return true;
     }

Saludos!

Mitsu

#7
Cita de: danicuestasuarez en  1 Noviembre 2013, 15:22 PM
Yo pondría:

if(combustible=0)
     return false;
else
    {
       combustible=combustible-1;
       return true;
     }

1) combustible = 0 te dará un error de compilación. La forma de comparar es ==.

2) Como sabes en Java no se puede excluir los negativos de un entero. Por tal razón debe de colocarse:

Código (=java) [Seleccionar]

if (combustible<=0) {

}


Si te fijas, en el método que he puesto más arriba, capto la lógica:

Código (=java) [Seleccionar]

public boolean fly()
boolean puedeVolar = false;
    {
     // si el combustible es mayor a 0, se podra restar a combustible
     // ademas puedevolar se convierte en true, indicando que puede volar
     if (getCombustible() >0) {
          combustible--;
          puedeVolar = true;
     }
     // aqui puedes imaginar un else vacio, si combustible es < 0
     // no le resta a combustible, y devuelve false, ya no puede volar.

      return puedeVolar;
}


Cita de: robertofd1995 en  1 Noviembre 2013, 14:44 PM
yo tengo estas variables , combustible , xSpeed , ySpeed , xPos y yPos , todos son int

vale lo que quiero hacer es que si el metodo fly me devuelve true , este ha de restar uno a combustible y modificar la posicion sumandole la velocidad.

Antes que todo, te recomendaría que para el combustible uses un byte (-127 / +128). Un Int tiene un rango de  -2,147,483,648 y +2,147,483,647. Un Short -32,768 y +32,767.

Lo más sencillo que me imagino, es crear mis métodos para mover el avión:

Código (=java) [Seleccionar]

private void mover() {
  xPos++;
  yPos++;
}


Código (=java) [Seleccionar]

private void acelerar() {
  xSpeed++;
  ySpeed++;
}


Luego, desde el método fly:

Código (=java) [Seleccionar]

public boolean fly()
boolean puedeVolar = false;
    {
     // si el combustible es mayor a 0, se podra restar a combustible
     // ademas puedevolar se convierte en true, indicando que puede volar
     if (getCombustible() >0) {
          combustible--;
          mover(); // como hay combustible, llamamos inmediatamente al metodo mover
          acelerar(); // lo mismo con acelerar
          puedeVolar = true;
     }
     // aqui puedes imaginar un else vacio, si combustible es < 0
     // no le resta a combustible, y devuelve false, ya no puede volar.

      return puedeVolar;
}


Otra forma, que es casi lo mismo:

Código (=java) [Seleccionar]

public boolean fly()
boolean puedeVolar = false;
    {
     // si el combustible es mayor a 0, se podra restar a combustible
     // ademas puedevolar se convierte en true, indicando que puede volar
     if (getCombustible() >0) {
          puedeVolar = true;
     }
     // aqui puedes imaginar un else vacio, si combustible es < 0
     // no le resta a combustible, y devuelve false, ya no puede volar.

      return puedeVolar;
}


Luego, desde un método captamos el valor que devuelve fly, si es true, restamos combustible, aumentamos posicion, y aumentamos velocidad:

Código (=java) [Seleccionar]

private void movilizar() {

   if (fly() ) {
     combustible--;
     mover();
     acelerar();
   }
   else {
     JOptionPane.showMessageDialog(null,"El avion se quedo sin combustible, aterrizara...");
   }
}

robertofd1995

Cita de: JavaBrain en  1 Noviembre 2013, 16:23 PM
1) combustible = 0 te dará un error de compilación. La forma de comparar es ==.

2) Como sabes en Java no se puede excluir los negativos de un entero. Por tal razón debe de colocarse:

Código (=java) [Seleccionar]

if (combustible<=0) {

}


Si te fijas, en el método que he puesto más arriba, capto la lógica:

Código (=java) [Seleccionar]

public boolean fly()
boolean puedeVolar = false;
    {
     // si el combustible es mayor a 0, se podra restar a combustible
     // ademas puedevolar se convierte en true, indicando que puede volar
     if (getCombustible() >0) {
          combustible--;
          puedeVolar = true;
     }
     // aqui puedes imaginar un else vacio, si combustible es < 0
     // no le resta a combustible, y devuelve false, ya no puede volar.

      return puedeVolar;
}


Lo más sencillo que me imagino, es crear mis métodos para mover el avión:

Código (=java) [Seleccionar]

private void mover() {
  xPos++;
  yPos++;
}


Código (=java) [Seleccionar]

private void acelerar() {
  xSpeed++;
  ySpeed++;
}


Luego, desde el método fly:

Código (=java) [Seleccionar]

public boolean fly()
boolean puedeVolar = false;
    {
     // si el combustible es mayor a 0, se podra restar a combustible
     // ademas puedevolar se convierte en true, indicando que puede volar
     if (getCombustible() >0) {
          combustible--;
          mover(); // como hay combustible, llamamos inmediatamente al metodo mover
          acelerar(); // lo mismo con acelerar
          puedeVolar = true;
     }
     // aqui puedes imaginar un else vacio, si combustible es < 0
     // no le resta a combustible, y devuelve false, ya no puede volar.

      return puedeVolar;
}



vale gracias los metodos de mover y acelerar ya los tengo creados , yo el problema que tenia es que al meter combustible -=1 debajo de return no me  funcionaba , ya veo como hay que estructurarlo gracias