Question using while

2

I'm new to java and would like some help from you, my code is correct following the exercise I'm doing, but I want to increment it using while to ask the user if he wants to repeat the process of the questions ... but 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');

        }

    }

}
    
asked by anonymous 11.09.2017 / 23:15

2 answers

4

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

The default 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');

In addition, since the wage code is all equal except for the percentage, you can optimize the code a lot by reusing this logic for each case of if you have.

Constructing this method and applying the above pattern the code looks 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');
}
    
12.09.2017 / 00:11
0

There are actually 2 problems:

  • You need to read the salary inside the loop, otherwise it does not change either.

  • @Isac fixed the two there, but did not comment on the first, just put a comment on the first code.

        
    12.09.2017 / 00:20