Question using while

Asked

Viewed 471 times

2

I am new in java and would like a help from you, my code is correct following the exercise I am doing, but I want to increment it using while to ask the user if he wants to repeat the process of the questions... however my code is not working...

package Aula_02;

import java.util.Scanner;

public class Exe_11 {

    public static void main(String[] args) {

        Scanner ler = new Scanner(System.in);

        float rea1, rea2, rea3, rea4;
        char op;

        System.out.println("Informe o seu salario...");
        float salario = ler.nextFloat();

        System.out.println("Deseja repetir a consulta (S / N)? : ");
        op = ler.next().charAt(0);

        if (op == 's' || op == 'S') {

            do {

                if (salario <= 280) {
                    rea1 = (float) (salario + (0.20 * salario));

                    System.out.println("**************************");
                    System.out.println("***Informativo de Salario***");
                    System.out.println("Salario base de: R$ " + salario);
                    System.out.println("O Percentual de Aumento é 20%");
                    System.out.println("O Valor do Aumento de: R$ " + 0.20 * salario);
                    System.out.println("Seu novo salario é de: R$ " + rea1);
                    System.out.println("**************************");

                } else if (salario > 280 && salario <= 700) {
                    rea2 = (float) (salario + (0.15 * salario));

                    System.out.println("**************************");
                    System.out.println("***Informativo de Salario***");
                    System.out.println("Salario base de: R$ " + salario);
                    System.out.println("O Percentual de Aumento é 15%");
                    System.out.println("O Valor do Aumento de: R$ " + 0.20 * salario);
                    System.out.println("Seu novo salario é de: R$ " + rea2);
                    System.out.println("**************************");

                } else if (salario > 700 && salario <= 1500) {
                    rea3 = (float) (salario + (0.10 * salario));

                    System.out.println("**************************");
                    System.out.println("***Informativo de Salario***");
                    System.out.println("Salario base de: R$ " + salario);
                    System.out.println("O Percentual de Aumento é 10%");
                    System.out.println("O Valor do Aumento de: R$ " + 0.10 * salario);
                    System.out.println("Seu novo salario é de: R$ " + rea3);
                    System.out.println("**************************");

                } else if (salario > 1500) {
                    rea4 = (float) (salario + (0.05 * salario));

                    System.out.println("**************************");
                    System.out.println("***Informativo de Salario***");
                    System.out.println("Salario base de: R$ " + salario);
                    System.out.println("O Percentual de Aumento é 5%");
                    System.out.println("O Valor do Aumento de: R$ " + 0.05 * salario);
                    System.out.println("Seu novo salario é de: R$ " + rea4);
                    System.out.println("**************************");

                }

            } while (op == 's' || op == 'S');

        }

    }

}

2 answers

4


The problem is that you are not reading the option within the do while, then there’s no way out of this do while, generating an infinite loop.

The standard you can apply is:

char op;

do {
    //leitura do salario para poder mudar em cada repetição
    //codigo dos salarios

    System.out.println("Deseja repetir a consulta (S / N)? : "); //pergunta de novo
    op = ler.next().charAt(0); //lê de novo para que possa sair do while
} while (op == 's' || op == 'S');

Moreover, as the wage code is all equal to the percentage exception, it can greatly optimize the code with a method reuse this logic for each case of the if that has.

Building this method and applying the above standard the code looked like this:

//generalização da logica que tava no while para um salario e uma percentagem
public static void mostraSalario(float salario, float percentagem){
    float rea = (float) (salario + (percentagem * salario));

    System.out.println("**************************");
    System.out.println("***Informativo de Salario***");
    System.out.println("Salario base de: R$ " + salario);
    System.out.println("O Percentual de Aumento é " + (percentagem*100) + "%");
    System.out.println("O Valor do Aumento de: R$ " + percentagem * salario);
    System.out.println("Seu novo salario é de: R$ " + rea);
    System.out.println("**************************");
}

public static void main(String[] args) {
    Scanner ler = new Scanner(System.in);
    char op;

    do {
        System.out.println("Informe o seu salario...");
        //leitura do salario dentro do while para pedir novo salario a cada repetição
        float salario = ler.nextFloat(); 

        //cada if agora só chama o método passando o salario e a percentagem respetiva
        //mesmo as condições dos ifs foram simplificadas pois eram redundantes
        if (salario <= 280) {
            mostraSalario(salario, 0.20f);
        } else if (salario <= 700) { 
            mostraSalario(salario, 0.15f);
        } else if (salario <= 1500) {
            mostraSalario(salario, 0.10f);
        } else {
            mostraSalario(salario, 0.05f);
        }

        System.out.println("Deseja repetir a consulta (S / N)? : ");
        op = ler.next().charAt(0);

    } while (op == 's' || op == 'S');
}

0

There are actually 2 problems:

  1. You need to read the salary inside the loop, otherwise it never changes either.

  2. The reading of the question if you want to continue also needs to be within the loop, but at the end of it.

The @Isac fixed the two there, but did not comment on the first, only put a comment in the first code.

  • Thank you so much for your help!!!

Browser other questions tagged

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