Hola de nuevo

Saludos amigos de Java México, primero que nada quiero agradecer la ayuda prestada por cfpmx en mi último post, y a la ayuda brindada por Benek de manera privada, se los agradezco muchismo, lo mismo para los demás (ezamudio y javier).
Les vengo con otra duda, sigo con esto de aprender Java, y me han dejado que haga un programa que resuelva lo siguiente:
Hay una licitacion para construir blablabla... y hay 5 empresas con sus respectivas cotizaciones, el programa me pide las 5 cotizaciones (eso es facil de hacer), pero ahora debo hacer que el programa descarte la cotización más barata y que promedie las 4 restantes, y que en pantalla muestre la cotización rechazada (la más barata) y el promedio de las otras 4. ¿Alguna idea de como hacerlo?
El chiste aqui es no usar un monton de if´s para ver cual es la más baja, eso si lo se hacer, el maestro quiere que encuentre otra solución. Les ruego a quienes se apiaden de mi alma haha que me expliquen con peritas y manzanas como se hace, acuerdense que soy nuevo en esto.

Espero sus prontas respuestas y gracias de antemano.

Saludos

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de cfpmx

Hola Ramipithecus, Lo que

Hola Ramipithecus,

Lo que podrías hacer es crear un algoritmo de ordenamiento, y le pasas un vector con los valores de las 5 cotizaciones. Luego haces una llamada al método de ordenamiento y te regresará el vector ordenado de mayor a menor ó de menor a mayor. Y ya con eso, lo demás es "pan comido". Esa es otra manera que se me ocurre, sin utilizar tanto if.

Java trae también sus propias colecciones, que traen métodos de ordenamiento, pero tal vez lo más apropiado para tí es que hagas las tuyas propias para que aprendas. Además, si luego llegaras a ver la materia de Estructura de Datos, lo mas seguro es que te pueda servir. El algoritmo de ordenamiento más común y básico es el de la burbuja.

Un problema

Me quedo claro eso de algoritmos de ordenamiento (de burbuja, burbuja bidireccional, etc.), el problema es que no se como usarlos, no se como ponerlos, cuando llamarlos, cuando acabarlos, y despues, cuando me queden los 4 restantes, ¿como los promedio? porque puede ser el n1 el menor y los demas mayores, pero tambien puede ser n2 y los demas ser más grandes, o n3 etc etc.. ¿cómo le hago saber al programa que tiene que promediar los mayores?....
Esto es lo que llevo, despues del else ya no se que hacer para no usar muchos if´s (Si puedo usarlos, que quede claro, pero no muchos, porque facilmente como yo lo se hacer me llevo 20).

import javax.swing.JOptionPane;

public class Cotizaciones{

        public static void main(String[] args){
                String cotiza1, cotiza2, cotiza3, cotiza4, cotiza5;
                Double cot1, cot2, cot3, cot4, cot5;
               
                cotiza1= JOptionPane.showInputDialog("¿Cuál es la primera cotizacion?");
                cotiza2= JOptionPane.showInputDialog("¿Cuál es la segunda cotizacion?");
                cotiza3= JOptionPane.showInputDialog("¿Cuál es la tercera cotizacion?");
                cotiza4= JOptionPane.showInputDialog("¿Cuál es la cuarta cotizacion?");
                cotiza5= JOptionPane.showInputDialog("¿Cuál es la quinta cotizacion?");
       
        try{
                cot1= Double.parseDouble(cotiza1);
                cot2= Double.parseDouble(cotiza2);
                cot3= Double.parseDouble(cotiza3);
                cot4= Double.parseDouble(cotiza4);
                cot5= Double.parseDouble(cotiza5);
       
        if( cot1 < 0 || cot2 < 0 || cot3 < 0 || cot4 < 0 || cot5 <0 )
                JOptionPane.showMessageDialog(null, "Introduzca valores válidos (Números mayores que 0");
        else{
               
        }
        }

Saludos

Ya se como

Ideé una forma (un tanto rudementaria, pero solo usa 6 if´s, en vez de los 20 ó 30 de la forma larga, el problema ahora es que me dice que no puede encontrar el "symbol method" showMessageDialog:

import javax.swing.JOptionPane;

public class Cotizaciones{
       
        public static void main(String[] args){
                String cotiza1, cotiza2, cotiza3, cotiza4, cotiza5;
                Double cot1, cot2, cot3, cot4, cot5;
                Double prom1, prom2, prom3, prom4, prom5;
               
                cotiza1= JOptionPane.showInputDialog("¿Cuál es la primera cotizacion?");
                cotiza2= JOptionPane.showInputDialog("¿Cuál es la segunda cotizacion?");
                cotiza3= JOptionPane.showInputDialog("¿Cuál es la tercera cotizacion?");
                cotiza4= JOptionPane.showInputDialog("¿Cuál es la cuarta cotizacion?");
                cotiza5= JOptionPane.showInputDialog("¿Cuál es la quinta cotizacion?");
       
        try{
                cot1= Double.parseDouble(cotiza1);
                cot2= Double.parseDouble(cotiza2);
                cot3= Double.parseDouble(cotiza3);
                cot4= Double.parseDouble(cotiza4);
                cot5= Double.parseDouble(cotiza5);
       
        if( cot1 < 0 || cot2 < 0 || cot3 < 0 || cot4 < 0 || cot5 <0 )
                JOptionPane.showMessageDialog(null, "Introduzca valores válidos (Números mayores que 0");
        else{
                prom1= (cot2 + cot3 + cot4 + cot5)/4;
                if( cot1 < cot2 & cot1 < cot3 & cot1 < cot4 & cot1 < cot5 )
                JOptionPane.showMessageDialog ("Se descarta "+cot1+" y el promedio de las restantes es "+prom1+"");
        }
        }catch (Exception e){
                JOptionPane.showMessageDialog (null, "No coloque letras en los datos");
        }
}
}

Aun me faltan toneladas de cosas y variables por usar, pero me gusta ir verificando conforme avanzo, y no puedo darme una explicación, ¿me pueden dar alguna idea?.

ACTUALIZACION: ERROR DE NOVATO!! hahaha me faltaba poner null ...

Saludos

Imagen de mathemathician

respuesta

package Capitulo7;
import javax.swing.JOptionPane;
/**
 *
 * @author sacacorcho
 */

public class Prueba {
   

     public static void main(String[] arg){
                String cotiza1, cotiza2, cotiza3, cotiza4, cotiza5;
                cotiza1= JOptionPane.showInputDialog("¿Cuál es la primera cotizacion?");
                cotiza2= JOptionPane.showInputDialog("¿Cuál es la segunda cotizacion?");
                cotiza3= JOptionPane.showInputDialog("¿Cuál es la tercera cotizacion?");
                cotiza4= JOptionPane.showInputDialog("¿Cuál es la cuarta cotizacion?");
                cotiza5= JOptionPane.showInputDialog("¿Cuál es la quinta cotizacion?");
         double cot[]= new double[5];
                cot[0]= Double.parseDouble(cotiza1);
                cot[1]= Double.parseDouble(cotiza2);
                cot[2]= Double.parseDouble(cotiza3);
                cot[3]= Double.parseDouble(cotiza4);
                cot[4]= Double.parseDouble(cotiza5);
         for(int i=1;i<5;i++)
             if(cot[0]>cot[i])cot[0]=cot[i];
         
         double prom=(cot[1]+cot[2]+cot[3]+cot[4])/4;
         
         System.out.println("cotizción rechazada= "+cot[0]);
         System.out.println("cotizcion promedio= "+prom);
    }

}

Me falta el try-catch, añádelo. Por otra parte quiero decirte que un diseño más adecuado sería en donde tuvieras métodos para lectura, para obtención del mínimo, para cálculo del promedio y para escritura de resultados. En vez de tener todo dentro del método main(). Saludos