Boa tarde a todos.
Estou trabalhando na minha primeira função recursiva e estou com um problema.
Essa função percorre uma tabela do banco em seus vários níveis para montar a estrutura de um Produto (igual à arvore do Windows Explorer).
Minha dúvida é:
O código percorre a tabela e faz alguns ifs para identificar se os itens tem uma estrutura. Quando esse item tem uma estrutura, eu pego a quantidade dele e salvo na variável quantSubEstrutura. Porém supomos que uma estrutura tenha 3 níveis, o produto A com a quantidade de 10, o produto B com 20 e o produto C que é o último nível com a quantidade de 30.
O que fica salvo na variável é apenas o 30. Como faço pra manter salvo os outros dois níveis? Pois preciso usá-los mais a frente?
Segue o código:
package pkg.fonte;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import pkg.dao.Banco;
public class Recursividade {
//variáveis de controle de conteúdo publicas à classe Recursividade:
private static float custo = 0;
private static String quantSubEstrutura;
//encapsulamento get da variável custo:
public static float getCusto() {
return custo;
}
//encapsulamento set da variável custo:
public static void setCusto(float custo) {
Recursividade.custo = custo;
}
public static void retornaCusto(String par) throws SQLException {
//objeto de comunicação com a base de dados:
Banco dao = new Banco();
//lista do tipo <Encapsulamento> de retorno das consultas do banco:
ArrayList<Encapsulamento> list;
//verifica se existe estrutura para o parâmetro (par) informado:
if (!dao.verificaEstrutura(par).equals("")) {
//caso tenha estrutura, cria o objetos de formatação decimal "df":
DecimalFormat df = new DecimalFormat("#######.#######");
//populando o objeto "list" com o retorno da consulta ao banco:
list = dao.listEstrutura(par);
//for para varrer a lista "list" e tratar o conteúdo:
for (int i = 0; i < list.size(); i++) {
//verifica se o item da posição get(i).getB1_UM() é igual aos insumos de Matéria Prima (KG, ML, G):
if (list.get(i).getB1_UM().equals("KG") || list.get(i).getB1_UM().equals("ML") || list.get(i).getB1_UM().equals("G")) {
//verifica se o item na posição list.get(i).getG1_COMP() não tem estrutura:
if (dao.verificaEstrutura(list.get(i).getG1_COMP()).equals("")) {
//exibo na tela os insumos em forma de relatório de estrutura:
System.out.println(list.get(i).getG1_COD() + "|"
+ list.get(i).getG1_COMP() + "|"
+ df.format(Float.parseFloat(list.get(i).getB1_UPRC())) + "|"
+ df.format(list.get(i).getG1_QUANT()) + "|"
+ df.format(list.get(i).getG1_QUANT() * Float.parseFloat(quantSubEstrutura.replace(",", "."))) + "|"
+ quantSubEstrutura);
} else {//caso tenha:
//se ele tiver uma estrutura, pego a quantidade dessa subestrutura e adiciono na variável "quant" para uso posterior:
quantSubEstrutura = df.format(list.get(i).getG1_QUANT());
//exibo na tela os insumos em forma de relatório de estrutura:
System.out.println(list.get(i).getG1_COD() + "|"
+ list.get(i).getG1_COMP() + "|"
+ df.format(Float.parseFloat(list.get(i).getB1_UPRC())) + "|"
+ df.format(list.get(i).getG1_QUANT()) + "|"
+ quantSubEstrutura);
}
//calculo para encontrar o custo desse item tomando como base sua quantidade em % convertendo em quantidade e multiplicando por seu último preço.
//essa variável "custo" irá acumular todos os custos de todos os produtos "custo += ..." que passarem pelo for e forem do tipo MP:
custo += (Float.parseFloat(list.get(i).getB1_UPRC()) * (list.get(i).getG1_QUANT() * Float.parseFloat(quantSubEstrutura.replace(",", "."))));
//função recursiva, chamo novamente o metodo retornaCusto() e envio o código do insumo componente "get(i).getG1_COMP()" para verificar se o mesmo também em extrutura:
retornaCusto(list.get(i).getG1_COMP());
} else {
//caso o item seja um insumo de EB ou BM do tipo UN (unidade), verifico se ele também tem uma estrutura:
if (!dao.verificaEstrutura(list.get(i).getG1_COMP()).equals("")) {
//se ele tiver uma estrutura, pego a quantidade dessa subestrutura e adiciono na variável "quant" para uso posterior:
quantSubEstrutura = df.format(list.get(i).getG1_QUANT());
}
//exibo na tela os insumos em forma de relatório de estrutura:
System.out.println(list.get(i).getG1_COD() + "|"
+ list.get(i).getG1_COMP() + "|"
+ df.format(Float.parseFloat(list.get(i).getB1_UPRC())) + "|"
+ df.format(list.get(i).getG1_QUANT()) + "|"
+ quantSubEstrutura);
//calculo para encontrar o custo desse item tomando como base sua quantidade em % convertendo em quantidade e multiplicando por seu último preço.
//essa variável "custo" irá acumular todos os custos de todos os produtos "custo += ..." que passarem pelo for e forem do tipo EB e BM:
custo += (Float.parseFloat(list.get(i).getB1_UPRC()) * list.get(i).getG1_QUANT());
//função recursiva, chamo novamente o metodo retornaCusto() e envio o código do insumo componente "get(i).getG1_COMP()" para verificar se o mesmo também em extrutura:
retornaCusto(list.get(i).getG1_COMP());
}
}
}
}
}
Fico no aguardo e a disposição para mais esclarecimentos.