Algoritmo Construção Prédio

Estou em dúvida de como dar continuidade ao código na letra e, alguém pode me ajudar?

import java.util.Scanner;

public class Matriz6x6 {

    public static void main(String[] args) {

        String recursos[] = new String[]{"cimento", "area", "brita", "hp", "hs", "tijolo", "betoneira"}; // recursos
        double matrix4x7[][] = new double[4][7]; // matriz de 4 recursos e 7 atividades
        String atividades[] = new String[]{"Fundação", "Alvenaria", "Estrutura", "Acabamento"}; //atividades

        Scanner le = new Scanner(System.in);
        
        for (int i = 0; i < atividades.length; i++) {
            System.out.print("\n" + atividades[i] + "\n");
            for (int j = 0; j < recursos.length; j++) {
                System.out.print(recursos[j] + "-->");
                matrix4x7[i][j] = le.nextDouble();
            }
        }

        for (int j = 0; j < recursos.length; j++) {
            System.out.print("\t\t" + recursos[j]);
        }

        for (int i = 0; i < atividades.length; i++) {
            System.out.print("\n" + atividades[i]);
            for (int j = 0; j < recursos.length; j++) {
                System.out.print("\t" + matrix4x7[i][j] + "\t");
            }
        }

        System.out.println();
        
        //Lê o percentual de administração do mês:
        System.out.println("Qual o percentual de administração do mês");
        String admMes = le.next();
        System.out.println(admMes);

        // Lê os custos unitários dos sete recursos envolvidos
        int preco[] = new int[7]; // declaração do vetor de preços unitarios 
        System.out.println("Preço Cimento");
        preco[0] = le.nextInt();
        System.out.println("Preço Areia");
        preco[1] = le.nextInt();
        System.out.println("Preço Brita");
        preco[2] = le.nextInt();
        System.out.println("Preço Hora de pedreiro");
        preco[3] = le.nextInt();
        System.out.println("Preço Hora de servente");
        preco[4] = le.nextInt();
        System.out.println("Preço Tijolo");
        preco[5] = le.nextInt();
        System.out.println("Preço Betoneira");
        preco[6] = le.nextInt();

        // Lê as quantidades realizadas de cada atividade nesta obra neste mês 
        int qntatividade[] = new int[4]; //declaração do vetor de quantidades realizadas de cada atividade 
        System.out.println("Quantidades realizadas de FUNDAÇÃO nesta obra neste mês");
        qntatividade[0] = le.nextInt();
        System.out.println("Quantidades realizadas de ALVENARIA nesta obra neste mês");
        qntatividade[1] = le.nextInt();
        System.out.println("Quantidades realizadas de ESTRUTURA nesta obra neste mês");
        qntatividade[2] = le.nextInt();
        System.out.println("Quantidades realizadas de ACABAMENTO nesta obra neste mês");
        qntatividade[3] = le.nextInt();
    }
}

vc não esta pensando de forma Orientada a Objetos. mesmo de forma estruturada vc pode melhorar isso.

Qual é a semelhança entre o Cimento, o Tijolo e a Hora do Servente?

primeiro: vc tem um preço pela unidade ( kilo, unidade, hora )

Qual é a semelhante entre a Fundação e o Acabamento?

segundo que cada atividade vai demandar de determinados recursos para conseguir uma unidade.

Então vc tem pelo menos duas classes: a Recurso e a Atividade.

Para desempenhar uma unidade de uma Atividade vc precisa de diversos Recursos. e isso custa dinheiro.

Agora vc tem algumas opções:

  1. vc pode Simplesmente criar essas duas classes.

Um Recurso vai ter: identificação ( cimento ou tijolo ), unidade e valor por unidade.
Uma Atividade vai ter: identificação ( fundação ou acabamento), unidade e Recursos Necessarios. No caso vc precisa de um tipo auxiliar para colar o Recurso com a Quantidade necessaria.

como vc calcula o preço de 2 metros quadrados de acabamento?

ora vc sabe q precisa de 40 de cimento, 0.2 de areia, 9 de pedreiro, 5 de servente e 1 de betoneira.

se vc sabe os preços de cada coisa, basta fazer a matematica :slight_smile:

  1. vc pode ter classe Areia, Fundação, etc. acho desnecessario. os comportamentos são os mesmos.

  2. vc pode usar Enumerações. acho que o codigo fica desnecessariamente complexo.

vamos focar no 1. vamos dizer q vc tem uma atividade “Capinar” e pra capinar 1 m2 vc precisa de 1,5 hora de um servente que custa 90 centavos a hora. quanto custa capitar 3 m2?

public class Recurso {
   private String tipo;
   private String unidade;
   private double valorPorUnidade;
   public Recurso( String tipo, String unidade ) { ... }
   public void setValorPorUnidade( double valorPorUnidade) { ... }
} 
public class Demanda {
   private Recurso recurso;
   private float quantidade;
   public Demanda( Recurso recurso, float quantidade) { ... }
}
public class Atividade {
   private String tipo;
   private Demanda[] demandas; // pode ser List<Demanda> também
   // construtor ...
}

Recurso servente = new Recurso("servente", "hora");
Atividade capinar = new Atividade("capinar", new Demanda[] {
    new Demanda(servente, 1.5)
 })

servente.setValorPorUnidade( 0.9 );

double total = capitar.calcula(); /* magica */

estou escrevendo esse codigo de memoria, pode estar errado, mas essa é a ideia.