Exit the loop when the string is empty or when entering a specific word

3

I'm making an algorithm that displays the total purchase price. I enter with the product, unit price and quantity. Again I have the possibility to enter with the product and so on. When you want to display the total, simply enter enter when ordering the product. That is, I am analyzing two possibilities: 1. When the string is empty or 2. When typing = and enter enter. Both ways do not work. Let's look at the code:

import java.util.Scanner;

public class Compras {

    public static void main(String[] args) {

        Scanner entrada = new Scanner(System.in);

        String nomeProduto;
        float precoUnitario = 0;
        int quantidadeProduto = 0;

        float precoTotal = 0;

        do {
            System.out.println("Informe o produto");
            nomeProduto = entrada.nextLine();

            System.out.println("Informe o preço do " + nomeProduto);
            precoUnitario = entrada.nextFloat();

            System.out.println("Informe a quantidade de " + nomeProduto);
            quantidadeProduto = entrada.nextInt();

//limpar buffer do teclado//

            entrada.nextLine();

//multiplica quantidade com preço unitário e soma ao total.
        precoTotal = +(precoUnitario * quantidadeProduto);
}

//pede os dados enquanto não digitar "="//

        while (!nomeProduto.equals("="));

//ou se a string for ""

        while (!nomeProduto.isEmpty());


//ao finalizar, mostra o valor total

        System.out.println("O preço total é $" + precoTotal);

    }

}

I do not know if the variables:

String nomeProduto;
float precoUnitario = 0;
int quantidadeProduto = 0;

must be declared inside the loop, although I tried and gave error. I think every time I enter the loop, these three variables must be restarted. Maybe that's what never gets out of the loop.

    
asked by anonymous 07.10.2015 / 13:59

2 answers

3

First, every do must have only while and not two equal is in your code. To fix this you could for example do the two checks inside a while only using a conditional operator. Example:

while (!nomeProduto.equals("=") && !nomeProduto.isEmpty());

For your case, it will fix the syntax error, but not the logic error, because precoTotal may receive one more value from a product that is not valid. This check would make the code less prone to error if it was done shortly after the user entered the name, setting a break there if the user entered one of the exit conditions, causing the repetition to continue until the condition is satisfied.

import java.util.Scanner;

public class Compras {

    public static void main(String[] args) {

        Scanner entrada = new Scanner(System.in);

        String nomeProduto;
        float precoUnitario = 0;
        int quantidadeProduto = 0;

        float precoTotal = 0;

        while(true) {
            System.out.println("Informe o produto");
            nomeProduto = entrada.nextLine();
            if(nomeProduto.equals("=") || nomeProduto.equals("")) break;

            System.out.println("Informe o preço do " + nomeProduto);
            precoUnitario = entrada.nextFloat();

            System.out.println("Informe a quantidade de " + nomeProduto);
            quantidadeProduto = entrada.nextInt();

            //limpar buffer do teclado
            entrada.nextLine();

            //multiplica quantidade com preço unitário e soma ao total.
            precoTotal = +(precoUnitario * quantidadeProduto);          
        }

        //ao finalizar, mostra o valor total
        System.out.println("O preço total é $" + precoTotal);

    }

}
    
07.10.2015 / 14:07
1

Just to complement the response from @Math.

Basically your mistake is logic. You are checking at every loop whether the nomeProduto variable is empty or has = value, when in fact, you have to check this every time the user enters the value in the < in> console .

It also has a problem in the calculation of precoTotal , it has to be incremented every loop , as it is currently being incremented at the end and will not add the price of all the entered entries .

public static void main (String[] args) throws java.lang.Exception
{
    Scanner entrada = new Scanner(System.in);

    String nomeProduto;
    float precoUnitario = 0;
    int quantidadeProduto = 0;

    float precoTotal = 0;

    while(true) //Loop infinito, será quebrado quando nomeProduto for vazio ou "="
    {
        System.out.println("Informe o produto");
        nomeProduto = entrada.nextLine();

        if(nomeProduto.equals("=") || nomeProduto.isEmpty()) //Verifica logo após a inserção do valor
            break;

        System.out.println("Informe o preco do " + nomeProduto);
        precoUnitario = entrada.nextFloat();

        System.out.println("Informe a quantidade de " + nomeProduto);
        quantidadeProduto = entrada.nextInt();

        precoTotal += (precoUnitario * quantidadeProduto); //Incrementar o valor total a cada loop

        entrada.nextLine();
    }

    System.out.println("O preco total e $" + precoTotal);
}
    
07.10.2015 / 14:22