Exit loop when string is empty or when typing a specific word

Asked

Viewed 2,241 times

3

I am making an algorithm that displays the total price of purchases. I enter 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, just type enter when you order the product. That is, I’m analyzing two possibilities: 1. When the string is empty or 2. When to type = and type enter. The two forms don’t work. Let’s see 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 don’t know if the variables:

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

should be declared inside the loop, although I have tried and failed. I think every time I enter the loop, these three variables should be restarted. Maybe that’s what never leaves the loop.

  • I don’t usually use command line, but from what I’m seeing the precoTotal variable is being started with zero at each input. It should not be inside the "the" side so that it is accumulated at each new entry?

  • @Marcelo Gomes is true. The way I’m doing only calculates the total price of the last product. Thanks for the observation.

2 answers

3


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

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

For your case will fix the syntax error but not the logic, because the precoTotal may receive an additional value from a product that is not valid. This check would make the code less error-prone if it was done right after the user entered the name, by placing a break if the user enters one of the output conditions, causing the repetition to remain as long as this condition is not 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);

    }

}
  • while (true) { } means that it is a loop without condition? Because we have learned that repetitions follow a condition. Here follows the if condition, but the while (true) line will always be true, since it has no false condition.

  • He’s on a loop eternal, that is, this repetition alone does not have an exit condition, it is artificially created using the if and of break.

1

Just to complement the @Math response.

Basically your error is logical. You are checking every turn (loop) if the variable nomeProduto is empty or has the value =, when in fact, you have to check this whenever the user enters the value in console.

There is also a problem in the calculation of precoTotal, it has to be incremented every loop, in the current form it is only being incremented at the end and will not add up the price of all entries typed.

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

Browser other questions tagged

You are not signed in. Login or sign up in order to post.