Execução de loop

Cara, seja sincero, você rodou o código que eu postei?

Entendeu bem o que ele faz?

Só pra gente entender mesmo, porque o que eu tenho percebido é que todo mundo está se confundindo, seja no que você quer, seja no que a gente mostra, seja nos nomes da variáveis, seja no problema a ser resolvido… o que eu entendi quando te mostrei isso usando aquele exemplo de cálculo que você mostrou…

valorEntrada = 78, valorVenda 23, 55, …

float totalEntrada = Float.parseFloat(this.tfValorEntrada.getText()); // digitou 78 uma unica vez...
int linhas = tbContasReceberCliente.getRowCount(); // aumenta performance...

for (int i = 0; i < linhas; i++) {
    float valor = (float) tbContasReceberCliente.getValueAt(i, 5); // 23
    totalEntrada -= valor; // 78 - 23

    System.out.println("Total entrada: " + totalEntrada); // 55
}

Ou seja, creio ser o que você precisa, questão de ver o comportamento do código… na próxima vez que o for rodar, na segunda linha da tabela

for (int i = 0; i < linhas; i++) {
    float valor = (float) tbContasReceberCliente.getValueAt(i, 5); // 45
    totalEntrada -= valor; // 55 - 45

    System.out.println("Total entrada: " + totalEntrada); // 10
}

E assim em diante é isso que você quer?

Porque antes lá no seu primeiro código, você colocou essa linha dentro do for…

float totalEntrada = Float.parseFloat(this.tfValorEntrada.getText());

O que muda todo o cálculo, porque ele pega uma valor que nunca muda…

O totalEntrada seria seu valorTotal…

E eu coloquei essa linha dentro do for só pra você ver o que está acontecendo…

System.out.println("Total entrada: " + totalEntrada);

Mas quando o for parar, você terá ela para usar à vontade já que ela foi declarada antes do for…

Se você quiser retirar essa linha de dentro do for e colocá-la depois, verá o valor final de toda a subtração feita… algo nesse sentido…

for (int i = 0; i < linhas; i++) {
    float valor = (float) tbContasReceberCliente.getValueAt(i, 5);
    totalEntrada -= valor; // 55 - 45

    System.out.println("Subtraindo... " + totalEntrada);
}

System.out.println("Valor final subtraído, total entrada, valor total, etc... " + totalEntrada);

Obrigado rodevops, o senhor tem razão, o erro é pq estava rodando o tudo dentro do for!

1 curtida

Por favor, quando disse se você entendeu e tal, não leve para o pessoal ok?

Queremos te ajudar e sabemos o quanto é dificil no começo, mas continue firme que você pega o jeito, sucesso e bons estudos!

E se mesmo assim tiver dificuldades, não deixe de postar, o fórum só tem a crescer com isso, tenha certeza que damos muito valor, muito melhor alguém com dificuldade mas está ali tentando, correndo atrás do que muitos fazendo “corpo mole” e querendo tudo de mão beijada, continue nesses esforço e vamos que vamos! abraço!

Mestre é o seguinte, esta que eu não tinha percebido que ele esta puxando apenas o valor do calculo e preciso que ele puxe o valor inicial e o calculo, o meu código é esse!

// totalEntrada é 78

float valor = (float) tbContasReceberCliente.getValueAt(i, 5); // 23 e 54

totalEntrada -= valor;
if (valor<=totalEntrada){ 
JOptionPane.showMessageDialog(this, "Total entrada: " + totalEntrada); // 55

}else{
JOptionPane.showMessageDialog(this, "fora do if Total entrada: " + totalEntrada); // 1
}

o deseja era assim:
// totalEntrada é 78

float valor = (float) tbContasReceberCliente.getValueAt(i, 5); // 23 e 54

totalEntrada -= valor;
if (valor<=totalEntrada){ 
JOptionPane.showMessageDialog(this, "Total entrada: " + totalEntrada); // 78
JOptionPane.showMessageDialog(this, "Total entrada: " + totalEntrada); // 55

}else{
JOptionPane.showMessageDialog(this, "fora do if Total entrada: " + totalEntrada); // 1
}

espero ter deixado claro a minha dificuldade.

Quando eu rodo dentro de um
System.out.println(totalEntrada);
ele mostra do jeito que eu quero!
Mais quando rodo dentro de um
JOptionPane.showMessageDialog(this, totalEntrada);
Ele não da sequencia no for!

Se você deixar o popup (JOptionPane…) dentro do for, sempre vai ter que apertar ok para o proximo aparecer (chamamos isso de método “blockante” ou bloqueante, porque ele pára e espera a ação do usuário), não tem jeito.

Também não faz muito sentido você imprimir um popup para cada “rodada”, já que ele é mais indicado para apresentar mensagens do tipo “Logado com sucesso”, “Aconteceu um problema no sistema”, coisas para serem exibidas uma única vez entende?

Boa Noite Mestre, é o seguinte, eu tenho um formulário de conta a receber, em uma tabela tenho os valores da venda, que é o valor da linha 5! o totalEntrada vai ser recebida de um JTextField que é o valor que o cliente vai pagar da sua divida, o JOptionPane é para mostrar a mensagem de confirmação que a venda foi paga, e passa para a outra venda, ao mesmo tempo vou esta salvando cada venda na tabela duplicata e alterando o status da tabela venda para pago, o restante do totalEntrada eu quero salvar na tabela duplicata sem alterar o status na tabela venda! por isso eu coloquei o if else!

// totalEntrada é 78

float valor = (float) tbContasReceberCliente.getValueAt(i, 5); // 23 e 54

totalEntrada -= valor;
if (valor<=totalEntrada){
JOptionPane.showMessageDialog(this, "Total entrada: " + totalEntrada); // 55
}else{
JOptionPane.showMessageDialog(this, "fora do if Total entrada: " + totalEntrada); // 1
}

com ajuda de todos estou aprendendo e tentando resolver esses probleminhas!kkk

O else é para jogar o restante do valor da totalEntrada na tabela duplicata e não alterar o status na tabela venda!