Execução de loop

27 respostas
I

Estou com um problema de loop, se alguém poder contribuir com os seus ensinamentos ficarei muito grato!
Estou precisando que o for efetue a subtração do valorEntrada – valorvenda = valorSubEntrada, e cada linha que ele percorrer ele leve o valor da subtração da última minha até que esse valor chegue a zero.

float valorEntrada;    // Valor que o cliente esta pagando a conta a receber
float valorvenda;    // Valor da venda, é o valor da conta a receber
float valorSubEntrada;    // subtração da entrada valorEntrada - valorvenda
 

for (int i = 0; i < tbContasReceberCliente.getRowCount(); i++) {

float Valor = (float) tbContasReceberCliente.getValueAt(i, 5);            
                float totalEntrada = Float.parseFloat(this.tfValorEntrada.getText());
                float totalSubEntrada = totalEntrada - Valor;

            System.out.println(in);  
}

O objetivo é:
Que o for efetue a subtração da entrada – valor e ele leve para a próxima linha o
Valor da subtração ate esse valo chegue a zero, o for acima está fazendo a subtração, mais ao leva o valor para a próxima linha ele leva o valor inicial da entrada.

27 Respostas

4

É simples, existe o comando “break;”. Ele cancela um looping, pode ser usado como no código abaixo. Quanto ao subtrair o valor repetidas vezes, é necessário que ele seja declarado antes de entrar no looping:

float valorTotal; // Tem que ter um valor a ser substituido


for (int i = 0; i < tbContasReceberCliente.getRowCount(); i++) {

    float Valor = (float) tbContasReceberCliente.getValueAt(i, 5); 
    float totalEntrada = Float.parseFloat(this.tfValorEntrada.getText());
    float valorTotal= valorTotal - totalEntrada - Valor;
    if (valorTotal<=0){
        break;
    }
}
I

4mega, quando tentei executar deu um problema no codigo!
float valorTotal= valorTotal - totalEntrada - Valor;

4

@ismaelmartinsds
As variáveis devem ser iniciadas, se não for isso, mande a mensagem do erro.

C

Problema é que tá declarando pela segunda vez… então mesmo se vc iniciar antes, vai dar erro.
tenta
valorTotal = valorTotal = totalEntrada - Valor.
ao invés de float valorTotal = valorTotal-totalEntrada-Valor.

I

Essa forma ainda não é o desejado, Pois o que desejo é o seguinte:
ex:
totalEntrada vai receber 78
Valor vai receber 23 e 54

valorTotal 78 - 23
valorTotal na primeira linha vai ser 55
valorTotal 55 - 54
valorTotal na segunda linha vai ser 1

R

O total de entrada precisa ser definido uma unica vez (fora do for)…

float totalEntrada = Float.parseFloat(this.tfValorEntrada.getText());
int linhas = tbContasReceberCliente.getRowCount(); // aumenta performance...

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

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

Obs: float não é o mais indicado para cálculos monetários, o ideal seria usar double ou melhor ainda BigDecimal

I

como ficaria o seu for dentro do meu for?

float valorEntrada; // Valor que o cliente esta pagando a conta a receber
float valorvenda; // Valor da venda, é o valor da conta a receber
float valorSubEntrada; // subtração da entrada valorEntrada - valorvenda

for (int i = 0; i < tbContasReceberCliente.getRowCount(); i++) {

float Valor = (float) tbContasReceberCliente.getValueAt(i, 5);

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

float totalSubEntrada = totalEntrada - Valor;
System.out.println(in);

}

pois é um for dentro do outro for!

R

E porque você precisa de um for dentro de outro?

O próprio código que você postou só tem 1 for…

I

Ok rodevops, acabei de entender como vai ficar so um for, mais ainda não resolveu meu problema, pois estou precisando que ao executar ele pegue o:
valorEntrada - Valor = valorTotal
78 - 23 = 55

agora em vez dele pegar o valorEntrada, queria que ele pega-se o valorTotal ficando assim:
55 - 45 = 11
o valorTotal 55 é a subtração da ultima linha, e o 45 é o Valor que ele recebe da segunda linha da tabela

agora ele passa para a terceira linha, agora ele pegar novamente o valorEntrada, e faz novamente a subtração ficando assim:
11 - 10 = 1
o valorTotal 11 é a subtração da segunda linha, e o 10 é o Valor que ele recebe da terceira linha da tabela

espero ter deixado bem claro, para que os colegas consigam mim ajudar!

I

Esse é o meu problema, mestre se vc poder mim ajudar ficarei muito grato!

M

Por que você está declarando pela segunda vez a mesma variável ? E há alguns erros neste código, você precisa iniciar as variáveis, se não elas não serão utilizadas da maneira correta.

I

Mav3r1ck, qual variável estou declarando pela a segunda vez?

M

Na verdade não foi você, só agora eu percebi, foi o @4mega. O exemplo dele está iniciando a mesma variável duas vezes.

No seu caso, você tem que inicializar as variáveis com valor 0 pois se não pode dar erro no compilador.

A variável valor seria uma espécie de array ?

E você disse que será valorEntrada - valor = valorTotal, isto não faz sentido, não tem como fazer este tipo de conta, você terá que ir pegar o valorTotal, neste caso 78, e subtrair pelo valorEntrada ou pelo valor, se você tentar subtrair valorEntrada - valor irá lhe dar resultados negativos, pois o valorTotal ao invés de ser 78 menos outro valor, ficará na verdade, 23 - 55 que resultará o valorTotal.

Na verdade você terá que ter pelo menos 4 variáveis, pois o valorTotal você ainda irá reutilizar, então crie uma variável auxiliar que irá pegar o valorTotal menos o valor da linha da tabela, eu testei aqui com 4 variáveis e deu certo, mas não sei se é exatamente o que você quer.

O resultado final na verdade irá ficar o seguinte :

78 - 23 = 55
55 - 45 = 10
10 - 11 = -1

Deu assim no meu código, estou levando em conta de que a variável valor é na verdade um array, pois é uma linha da tabela, e deu certo desta maneira. Se não for assim que queiras, tem outros modos de fazer isto.

OBS : Quantas linhas há na sua tabela ?

I

Mav3r1ck, a quantidade de linha varia na tabela, vc poderia postar como ficou o seu calculo?

M

O usuário que coloca a quantidade de linhas na tabela através de um input ? Ou elas já vem com um valor determinado ? Mas e os valores das linhas ? Por exemplo 23 ou 54 ? Também são através de input ou também já vem determinado ?

Teria como você por favor passar a parte da criação da tabela para eu poder implementar e testar meu código ou você simplesmente tem algum código básico de tabela ? Pois preciso testar com o getRowCount() e getValueAt().

I

Ele puxa automaticamente da tabela, todos os valores são automaticamente da tabela!
Mais o calculo tem que rodar aqui dentro!

int linhas = tbContasReceberCliente.getRowCount();

for (int i = 0; i < linhas; i++) {

float Valor = (float) tbContasReceberCliente.getValueAt(i, 5);

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

float valorTotal = totalEntrada;

}

F

Faz algo assim:

float valorEntrada = 0;    // Valor que o cliente esta pagando a conta a receber
float valorVenda = 0;    // Valor da venda, é o valor da conta a receber
static float saldo = null;    // subtração da entrada valorEntrada - valorvenda


for (int i = 0; i < tbContasReceberCliente.getRowCount(); i++) {
    if (saldo == null) {
        valorVenda = (float) tbContasReceberCliente.getValueAt(i, 5);            
        valorEntrada = Float.parseFloat(this.tfValorEntrada.getText());
        saldo = valorEntrada - valorVenda;
    } else {
        saldo += (float) tbContasReceberCliente.getValueAt(i, 5);
        valorEntrada = Float.parseFloat(this.tfValorEntrada.getText());
        saldo -= valorEntrada;
    }

}

Pelo que entendi, isso deve resolver seu problema.

I

fabiio2, esta dando um erro no:
static float saldo = null;
o que seria?

I

Bom dia, aguardando os esclarecimentos dos mestres!

R

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);
I

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

R

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!

I

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.

I
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!
R

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?

I

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

I

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

Criado 18 de julho de 2017
Ultima resposta 25 de ago. de 2017
Respostas 27
Participantes 6