Duda Java

M

Buenas,

Antes de nada, tengo que decir que acabo de empezar el aprendizaje del lenguaje java. Se que seguramente lo que pregunte es muy basico, pero llevo un par de horas y no encuentro la solucion.

Tengo el siguiente codigo:

public class PAC1Ex2 {

public static double calculateValuationByMileage(double price, int mileage) {
    //TODO
    if (mileage >= 0 & mileage <= 59999) {
        return (price * 30) / 100 - price;
    } else if (mileage >= 60000 & mileage <= 99999) {
        return (price * 35) / 100 - price;
    } else if (mileage >= 10000 & mileage <= 199999) {
        return (price * 40) / 100 - price;
    } else {
        return (price * 50) / 100 - price;
    }
    System.out.println("El precio del coche es: " + calculateValuationByMileage(5000, 50)); // call function
}

}

La idea es pasarle el precio y km y que me saque el precio devaluado del coche.
Cuando intento hacer un run me sale el siguiente error: java: unreachable statement

El problema viene a la hora de mostrar en pantalla el resultado. Seguramente no lo estaré declarando bien, pero no entiendo el porqué.

¿Alguien podría indicarme donde erradica el problema?
Gracias

L

((mileage >= 0) && (mileage <= 59999))

o

(0 >= mileage >= 59999)

Sinso

No he dicho nada xdd

1 respuesta
Legault

El println es inutil ahi por que nunca se va a ejecutar, ya que si no entra en ningun if o else if, entrará en el último else y hará un return, asi que todo lo que hay debajo de ese return es unreachable

Kaledros
#1MissFortune:

Cuando intento hacer un run me sale el siguiente error: java: unreachable statement

Te lo da en el System.out, ¿verdad? Esa línea no se va a ejecutar nunca porque hay una cláusula return para cada caso del if-else, de manera que siempre sale del método sin pasar por ahí. Guarda el price en una variable local y pon un único return al final del método, después del System.out.

1 respuesta
M

#5 Te refieres a esto?

public static double calculateValuationByMileage(double price, int mileage) {
        //TODO
        double total;
        calculateValuationByMileage(50000, 400);
        if ((mileage >= 0) && (mileage <= 59999)) {
            total = (price * 35) / 100 - price;
        } else if ((mileage >= 60000) && (mileage <= 99999)) {
            total = (price * 35) / 100 - price;
        } else if ((mileage >= 10000) && (mileage <= 199999)) {
            total = (price * 40) / 100 - price;
        } else {
            total = (price * 50) / 100 - price;
        }
        return total;
    }

La funcion se puede llamar al final del metodo o se tiene que hacer al principio?

1 respuesta
Kaledros

#6 Sí, me refiero a eso.

#6MissFortune:

La funcion se puede llamar al final del metodo o se tiene que hacer al principio?

¿A qué te refieres? No entiendo la frase.

1 respuesta
M

#7 Me refiero a la llamada de la función:

calculateValuationByMileage(50000, 400);

Si hay que ponerlo al principio del metodo:

public static double calculateValuationByMileage(double price, int mileage) {
        //TODO
        double total;
        calculateValuationByMileage(50000, 400);
        if ((mileage >= 0) && (mileage <= 59999)) {
            total = (price * 35) / 100 - price;
        } else if ((mileage >= 60000) && (mileage <= 99999)) {
            total = (price * 35) / 100 - price;
        } else if ((mileage >= 10000) && (mileage <= 199999)) {
            total = (price * 40) / 100 - price;
        } else {
            total = (price * 50) / 100 - price;
        }
        return total;
    }
La funcion 

O al final

public static double calculateValuationByMileage(double price, int mileage) {
        //TODO
        double total;
        if ((mileage >= 0) && (mileage <= 59999)) {
            total = (price * 35) / 100 - price;
        } else if ((mileage >= 60000) && (mileage <= 99999)) {
            total = (price * 35) / 100 - price;
        } else if ((mileage >= 10000) && (mileage <= 199999)) {
            total = (price * 40) / 100 - price;
        } else {
            total = (price * 50) / 100 - price;
        }
        return total;
calculateValuationByMileage(50000, 400);
    }
La funcion 
1 respuesta
B

#8 Fuera.. ni antes, ni después. La llamas desde el "main" o donde veas.

1 respuesta
M

#9 Genial! muchas gracias!

Pirla

Y te falta un 0 en la primera parte de la condición del segundo else if, entiendo que debería ser 100.000 y no 10.000 como pusiste

beltez

#3 que fumas

Colgajo

Mira ese código solo por decir que es kilometraje y la variable se llame millaje ya me da el TOC

M

Aprovechadno el hilo.

Me encuentro atascado en un ejercicio que no sé cómo implementar. Tengo que calcular la devaluación del precio de un coche según los años. Por una parte tengo los trienios y la devaluación por cada rango de trienio.

[0, 1) - 0%
[1, 3) - 10%
[3, 5) - 15%
(5, ∞) - 18%

Ejemplo:

Coche de 1/2 años: Mismo valor porque no tiene un trienio completo

Coche de 3/4/5 años: 5.000€ * (1 - 0.1) = 4.500€

Coche de 6/7/8 años:

precio = 5.000€ * (1 - 0.1) = 4.500€ //primer tramo de 3 años [1,3)
precio = 4.500€ * (1 - 0.1) = 4.050€ //segundo tramo de 3 años [1,3)

Coche de 9/10/11 años:
precio = 5.000€ * (1 - 0.1) = 4.500€ //primer tramo de 3 años [1,3)
precio = 4.500€ * (1 - 0.1) = 4.050€ //segundo tramo de 3 años [1,3)
precio = 4.050€ * (1 - 0.15) = 3.442,5€ //tercer tramo de 3 años [3,9)

Y asi hasta el infinito.

No tengo la minima idea de como enfocarlo. Se que seria con un for, pero no acabo de verlo.

Alguien me puede ayudar?

1 respuesta
Kaledros

#14 ¿Qué recibes por parámetro?

1 respuesta
M

#15 precio y años que tiene el coche

1 respuesta
Kaledros

#16 Por no hacerte los deberes del todo te daré una pista: los trienios no son números, son otro tipo de variable.

1 comentario moderado

Usuarios habituales