Mochila.java 2.98 KB
Newer Older
Joel Florentin committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
import java.io.Console;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Mochila {
    private int capacidad;
    private List<Objeto> elementos;

    public Mochila(int capacidad) {
        this.capacidad = capacidad;
        this.elementos = new ArrayList<>();
    }

    public void setCapacidad(int capacidad) {
        this.capacidad = capacidad;
    }
    public int getCapacidad() {
        return capacidad;
    }
    public List<Objeto> getElementos() {
        return elementos;
    }
    public void addElemento(Objeto elemento) {
        this.elementos.add(elemento);
    }

    public void maximoBeneficio(Objeto [] cosas){
        Arrays.sort(cosas, (a,b) -> b.getRatio().compareTo(a.getRatio()));
        int libre=capacidad;
        int cantidadLlevarElemento = 0;
        for (Objeto objeto : cosas) {
            
            if( objeto.getPeso()<= libre){
                cantidadLlevarElemento = Math.floorDiv(libre, objeto.getPeso());
                for (int i = 0; i < cantidadLlevarElemento; i++) {
                    elementos.add(objeto);
                }
                libre -= (cantidadLlevarElemento * objeto.getPeso());
            }
            if(libre==0){
                break;
            }

        }
    }

    public static void main(String[] args) {
        Console cons = System.console();
        String pesosS = cons.readLine("Introduzca valores separados por coma de los pesos de los elementos\n");
        String valoresS = cons.readLine("Introduzca valores separados por coma de los valores de los elementos\n");
        String [] pesos = pesosS.split(",");
        String [] valores = valoresS.split(",");
        Objeto [] elementos = new Objeto[pesos.length];
        for (int i = 0; i < pesos.length ; i++) {
            elementos[i] = new Objeto(Integer.parseInt(valores[i]), Integer.parseInt(pesos[i]));
        }
        String capS = cons.readLine("Introduzca capacidad de la mochila\n");
        int cap = Integer.parseInt(capS);
        Mochila mochila = new Mochila(cap);
        mochila.maximoBeneficio(elementos);
        System.out.println("Se escogen estos elementos");
        mochila.getElementos().stream().forEach(e -> System.out.println(e));
        
        
        

    }
    
}

class Objeto{
    private int valor;
    private int peso;
    private Float ratio;
    public Objeto(int valor, int peso) {
        this.valor = valor;
        this.peso = peso;
        this.ratio = ((float)this.valor)/this.peso;
    }
    public int getPeso() {
        return peso;
    }
    public int getValor() {
        return valor;
    }
    public void setPeso(int peso) {
        this.peso = peso;
    }
    public void setValor(int valor) {
        this.valor = valor;
    }
    public Float getRatio() {
        return ratio;
    }
    public void setRatio(float ratio) {
        this.ratio = ratio;
    }
    @Override
    public String toString() {
        
        return "{Valor: " + valor + ",Peso: " + peso + ",Ratio:"+ratio+"}" ; 
    }
}