Com inserir o pagamento usando um Loop

Bom dia, estou com um problema que não sei como fazer para inserir um pagamento de varias duplicata ao mesmo tempo.
Estou usando o NetBeans IDE 8.2 e o Banco de dado é MySQL

Ex:
Tenho duas tabelas
Primeira tabela - tabelaDuplicata //Onde fica o dados de todas as duplicata id, idCliente, dataVencimento, ValorDaDuplicata, Status
Segunda tabela - tabelaDuplicataRecebida // Onde fica o dados de todas as duplicataRecebidas id, idDuplicata, dataRecebimento, valorDoRecebimento, tipoPagamento, detalhePagamento, juros, multas, descontos

Tenho duas JTable com os mesmo campos das tabelas citada acima onde mostra na tela do pagamento.

Tenho as seguintes JTextField
txtSubTotal // é a soma do valor de todas as duplicatas a receber
txtValorJuros // é o juros aplicado encima das duplicatas vencidas
txtValorMultas // é a multas aplicada encima das duplicatas vencidas
txtValorDescontos // é o desconto aplicado encima das duplicatas
txtValorRecebimento // é o valor do pagamento

e tenho o botão para efetuar o pagamento

private void bt_adicionarActionPerformed(java.awt.event.ActionEvent evt) {

        for (int i = 0; i < tabela_despesa.getRowCount(); i++) { 
        Boolean ck = (Boolean)tabela_despesa.getValueAt(i, 5);
        if (ck == null){
            ck = false; 
        }else if((Boolean) tabela_despesa.getValueAt(i, 5)==true) {    
        bdr.codigoDuplicata = Integer.parseInt(String.valueOf(tabela_despesa.getValueAt(i, 0))); 
        ValorDuplicata = Double.parseDouble(parametrosNS.TransStrDou.TransformaValorStringeDouble(String.valueOf(tabela_despesa.getValueAt(i, 4)), 1));


        SubTotal                  = Double.parseDouble(parametrosNS.TransStrDou.TransformaValorStringeDouble(txt_subTotal.getText(), 1));   // pega o valor do SubTotal
        bdr.valorRecebimento      = Double.parseDouble(parametrosNS.TransStrDou.TransformaValorStringeDouble(txt_valorPagamento.getText(), 1));   // pega o valor do pagamento
        bdr.juros                 = Double.parseDouble(parametrosNS.TransStrDou.TransformaValorStringeDouble(txt_valorJuro.getText(), 1));    // pega o valor dos juros
        bdr.multas                = Double.parseDouble(parametrosNS.TransStrDou.TransformaValorStringeDouble(txt_valorMulta.getText(), 1));  // pega o valor da multas
        bdr.desconto              = Double.parseDouble(parametrosNS.TransStrDou.TransformaValorStringeDouble(txt_valorDesconto.getText(), 1));   //pega o valor do desconto
    
                 
      
    }
}                              

Este é o inicio do código para inserir os dados no banco do dados.
minha duvida começa aqui para fazer os cálculos para inserir os dados!

1º como eu faço os cálculos de subtração para lançar os dados, se precisa criar outro loop?
2º como eu faço para pegar os valores que falta ser pago das duplicatas?

vamos trabalhar encima destes dois problema, dia cordo com o que for sendo solucionado vamos trabalhando outros problemas.

Bom amigos é o seguinte, meu conhecimento em programação é muito pouco, estou tentando aprender, se esforçando, mim dedicando, as vezes passando aos noite em claro, e sei que não esta sendo fácil e nem vai ser fácil, mais tenho muita força de vontade e dedicação nos meus objetivos, sei que com uma pouco mais de esforço conseguirei chega onde desejo, que é finalizar meu programa, estava refletindo que alguns meses atrás, não sabia nada de programação, e neste período tive uma pequena evolução, percebi que programação não é algo impossível, mais tem que ter dedicação, com ajuda dos amigos aqui deste fórum já aprendi e foi solucionado vários problemas de códigos que tinha que implementar no meu sistemas, como sitado acima não tenho muito conhecimento em programação, sou apaixonado por programação e adiro os programadores pelas suas foça de vontade, dedicação, persistência e etc…
Quando tenho um problema como este que criei como tópico, espero que alguém que tenha mais conhecimento na programa mim ajude, se disponibilize, as vezes para quem tem conhecimento na área é uma coisa simples, alias deve ser uma coisa simples para quem tem conhecimento, para mim que sou iniciante é muito complicado, não tenho a minima ideia de como fazer, por isto que peço, podem se manisfestarem, se não fui muito claro, perguntem, a partir do momento que alguém passar as suas ideias quem saber conseguimos ver uma luz no final.
Desde já agradeço que se disponibilizar a ajudar!

vamos la

Se eu entendi bem, vc tem uma Duplicata ( que seria um valor a receber ) e uma DuplicataRecebida ( ou um Pagamento de uma Duplicata ), certo?

Eu não entendi a razão para ter um loop. a pessoa esta inserindo varios valores manualmente e uma hora ela clica em “Feito” ?

se sim, o que é cada linha? é um pagamento diferente? vc pode ter varios pagamentos para a mesma duplicata?

eu gostaria de ajudar, mas não entendi como o codigo se encaixa nas regras de negocio. talvez se vc desse exemplos a gente pensaria em como fazer

Certo, é isso ai!

Amigo, a ideia do loop era para ir dando baixa automaticamente
ex:
Duplicata 1 - R$ 20,00 ab
Duplicata 2 - R$ 15,00 ab
Duplicata 3 - R$ 10,00 ab
Duplicata 4 - R$ 15,00 ab
Duplicata 5 - R$ 25,00 ab
Duplicata 6 - R$ 22,00 ab
Duplicata 7 - R$ 18,00 ab

Vai ser pago R$ 50,00
a intenção de loop é para da baixa ate os R$ 50,00

Duplicata 4 - R$ 65,00 ab R$ 60,00 ab e R$ 5,00 pg
Duplicata 5 - R$ 25,00 ab
Duplicata 6 - R$ 22,00 ab
Duplicata 7 - R$ 18,00 ab

pg - valor pago
ab - valor aberto a ser pago
se tiver outra forma ficarem muito grato se você demostrar!

Sim, pode acontecer de ter vários pagamento para a mesma duplicata, vou tentar explicar usando o exemplo acima!

Duplicata 4 - R$ 65,00 ab - R$ 60,00 ab - R$ 5,00 pg
Duplicata 5 - R$ 25,00 ab
Duplicata 6 - R$ 22,00 ab
Duplicata 7 - R$ 18,00 ab

Ai vai ser pago mais R$ 20,00

Duplicata 4 - R$ 65,00 ab - R$ 40,00 ab - R$ 5,00 pg - R$ 20,00 pg
Duplicata 5 - R$ 25,00 ab
Duplicata 6 - R$ 22,00 ab
Duplicata 7 - R$ 18,00 ab

Ai vai ser pago mais R$ 25,00

Duplicata 4 - R$ 65,00 ab - R$ 15,00 ab - R$ 5,00 pg - R$ 20,00 pg - R$ 25,00 pg
Duplicata 5 - R$ 25,00 ab
Duplicata 6 - R$ 22,00 ab
Duplicata 7 - R$ 18,00 ab

e assim ate zera o pagamento da duplicata, quando zera passa para a outra duplicata, lembrando que o valor pago vai para a tabela duplicatarecebida

espero ter deixado mais claro, se o senhor não tiver entendido eu tentarei explicar de outra forma!

Isso é irrelevante, você poderia estar usando bloco de notas que não mudaria nada a forma como você vai aplicar uma lógica.

Você tem essas duplicatas em algum lugar, certo? Se sim, você vai deixá-las em uma estrutura como vetor ou lista, certo?
Se sim, você pode fazer assim:

for(int i = 0; i < listaDeDuplicatas.size() && valorPago > 0; i++){
    Duplicata dup = listaDeDuplicatas.get(i);
    if(dup.getValorAPagar() > valorPago) {
        valorPago -= dup.getValorAPagar();
        dup.setPago(true);
    } else {
        dup.setValorAPagar(dup.getValorAPagar() - valorPago);
    }
}

Algo assim deve resolver;

Você precisa definir isso. Qual o código das duplicatas?

Obrigado amigos, vou tenta implementa, vou ver como fica.
tenho que ver com vai ficar a parte de juros, multas e descontos e fazer os cálculos.

Uso um Arrai para puxa os valores pagos!

Cara, eu gostaria de ver a classe que representa as duplicatas, se é que você criou.

public class BeanDuplicata {

public int    idDplicata                    = 0;    //0
public int    idEmpresa                     = 0;    //1
public int    codigoGrupo                   = 0;    //2
public int    codigoEmpresa                 = 0;    //3
public int    codigoVendaPagamentoCredito   = 0;    //4
public String dataVencimento                = "";   //5
public String dataVencimentoVolatio         = "";   //5
public int    qtdParcela                    = 0;    //6
public double valorParcela                  = 0;    //7
public int    tipoPagamento                 = 0;    //8
public int    status                        = 0;    //9

}

public class BeanDuplicataReceber {

public int    idDuplicataReceber             = 0;    //0
public int    idEmpresa                      = 0;    //1
public int    codigoGrupo                    = 0;    //2
public int    codigoEmpresa                  = 0;    //3
public int    codigoDuplicata                = 0;    //4
public String dataVencimento                 = "";   //5
public int    qtdParcela                     = 0;    //6
public double valorRecebimento               = 0;    //7
public int    tipoPagamento                  = 0;    //8
public String detalheRecebimento             = "";   //9
public String dataRecebimento                = "";   //9
public String horaRecebimento                = "";   //10
public double juros                          = 0;    //11
public double multas                         = 0;    //12
public double desconto                       = 0;    //13
public int    status                         = 0;    //14

}

Adapte o trecho de código que sugeri.
Se vai fazer num vetor, creio eu que seja algo como

BeanDuplicata[] duplis = new BeanDuplicata[10]; //Vetor com 10 duplicatas.

Itere sobre ele e vá calculando com base na quantidade de parcelas e valor parcela.

   for(int i = 0; i < dadosContaRecebida.size() && SubTotal >= 0; i++){
  bdr = new BeanDuplicataReceber();
  bdr.valorRecebimento     = Double.parseDouble((String) dadosContaRecebida.get(i).get(6));
 if(bdr.valorRecebimento > SubTotal) {
    SubTotal -= bdr.valorRecebimento;
 } else {
    bdr.valorRecebimento = (bdr.valorRecebimento - SubTotal);
}

}

Seria mais ou menos assim?

O que é bdr?
Por que get(6)?

bdr é chamada de classe BeanDuplicataReceber.
get(6) é onde pega o valorRecebimento do array.

Eu não gosto dessas abordagens.
Para mim (e seguindo o clean code) você deve dar nomes auto explicativos às variáveis.
E, essa coisa de array, você lê de um buffer?