Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/09/2014, 23:09
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: simplificar este código

Hola,

Cita:
Iniciado por AGmzT Ver Mensaje
Hola gente! escribi este código y quisiera saber como simplificarlo muchas gracias!! ...
Posiblemente podrías obtener exactamente el mismo resultado pero con un código mas simplificado de esta forma:

Código Java:
Ver original
  1. int i = desctos.length - 1;
  2. while (i >= 0 && desctos[i] == 0.0f) {
  3.   i--;
  4. }
  5. costoDesc = costo;
  6. while (i >= 0) {
  7.   costoDesc *= desctos[i--];
  8. }
  9. return costoDesc;

La pregunta ahora sería ... ¿estás seguro que eso es lo que quieres obtener?

Evidentemente hay problemas que se notan a simple vista, como el hecho que si dos valores dentro del vector 'desctos' son iguales a 0 entonces el resultado siempre va a ser 0.

Adicionalmente que si los valores son, por ejemplo, 50 tendrías (50^10), 50 elevado a la potencia 10 es un número muy grande. Evidentemente no son porcentajes.

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Código:
int numDescs = desctos.length;

if (numDescs == 0) {
    costoDesc = costo;
else {
    for (int i = numDescs; i>=0; i--) {
        costoDesc *= desctos[i-1];
    }
    costoDesc *= costo;
}
Hay un error de lógica con un ArrayOutOfBounds Exception. Si cualquier valor es 0 el resultado siempre va a ser 0, en su caso solo multiplica los valores iniciando desde el primero que sea diferente a 0 descendentemente; eso para realizar exactamente la misma funcionalidad del código inicial, que estoy casi seguro que no realiza la funcionalidad que le solicitaron.

Igual el problema ha de ser otro,
Saludos,