5
respostas

Logica de programação errada :(

Queria somar todas os valores dos salarios de todos funcionario em uma empresa, porem o resulado não sai do 0.0; Irei postar o codigo. Meu bean...

public Double getTotal() {
        double aux = 0.0D;
        List<Funcionario> funcionarios = new ArrayList<Funcionario>();
        for (Funcionario funcionario : funcionarios) {
            aux += funcionario.getSalario();
        }
        return aux;
    }

Oque estou errando na lógica? Depois meu html...

<p:commandButton value="Informações"
                    onclick="PF('informacao').show();" immediate="true" />
            </h:panelGrid>
        </h:form>

        <h:form>
            <p:dialog widgetVar="informacao" modal="true" appendTo="@(body)"
                closable="true" header="Despesas"
                resizable="false" >
                <h:panelGrid columns="2">
                    <p:outputLabel value="Gasto mensal por funcionarios: " for="gastos"/>
                    <p:inputText id="gastos" value="#{funcionarioBean.total}"/>
                </h:panelGrid>
            </p:dialog>
        </h:form>
5 respostas

Oi Alisson, o problema é que vc ta criando uma lista vazia e não está adicionando nenhum funcionario...

Oi Alberto então alterei o meu código para.

    public Double getTotal() {
        double aux = 0.0D;
        for (Funcionario funcionario : funcionarios) {
                funcionarios.add(funcionario);
                aux += funcionario.getSalario();
        }
        return aux;
    }

Coloquei a lista de funcionarios adicionar toda vez que o meu for ganhar um funcionario novo, faz sentido? se tiver 10 funcionarios, vai começar pelo 0, ai quando for 1 vai adicionar e quando for 2 vai adicionar, e depois na minha varavel aux recebe todos os valores somados da lista. Faz sentido? porem não saiu do 0 ainda :(

Para o código dentro do seu for ser executado a variável funcionarios precisa referenciar uma lista já preenchida.. não adianta preencher a lista dentro do for, pq como ela começa vazia, o for nunca vai ser executado.

Xará,

Antes do método getTotal ser chamado você precisa preencher a lista de funcionários, pelo seu primeiro exemplo vc não está preenchendo ela, talvez fosse melhor fazer algo assim:

public Double getTotal(List<Funcionario> funcionarios) {
        double aux = 0.0D;
        for (Funcionario funcionario : funcionarios) {
            aux += funcionario.getSalario();
        }
        return aux;
    }

E antes de chamá-la você deve criar os funcionários, por exemplo assim:

 List<Funcionario> funcionarios = new ArrayList<Funcionario>();
funcionarios.add(new Funcionario(nome="João", salario=10000));

Alysson obrigado pela dica!!!, mais estou pensando em fazer de um outro modo.... Alberto tive uma idéia e poderia ver se é valida? por exemplo no meu bean vou ter o medoto getTotal(). Depois vou instancia minha varivel list ficando mais ou menos assim...

List<Funcionario> funcionarios = new FuncionarioDao().listaTodos();

Dentro da classe dao irei ter o metodo lista, fazendo um select no banco e retornando uma lista de funcionarios. Como por exemplo um select mais ou menos assim.

public List<Funcionario> listaTodos() {
    //
    em.createQuery("Select f from Funcionario f join fecth f.endereco").getResultList();
return resultado;
// ta faltando um tanto do codigo mais só para ter uma noção para poder entender um pouco...
}

Ai la na minha classe bean ja instanciaria a minha lista com um valor correto? com uma lista de funcionario...
List<Funcionario> funcionarios = new FuncionarioDao().listaTodos();

dai só pegaria o saldo so funcionario mais ou menos assim...

public Double getTotal() {
    Double aux = 0.0;
    List<Funcionario> funcionarios = new              FuncionarioDao().listaTodos();
    for(Funcionario funcionario: funcionarios) {
    aux += funcionario.getSalario();
}
return aux;
}

É valida essa ação? estou sem minha ide :( e fiquei pensando em um jeito de resolver isso, e me veio essa forma na cabeça...