How to make the if-else statement work for integer reading

0

My program compiled in cmd, but running does not execute the if statement, showing only the last String and date. I want the user to have the option to register another message. What are the possible solutions?

The program is as follows:

/*
 * Class do registo de mensagens
 */
import java.util.*;
public class RegistoDeMenssagem4 {
    public static void main(String[] args) {
        System.out.println("Bem vindo Utilizador"); // o número ou nome do utilizador 
        //Porque o registo de menssagem só é possível para números registados       
        System.out.println("Introduza o número da recarga");
        Scanner kb = new Scanner(System.in);
        int Recarga = kb.nextInt(); // exception para o nùmero

        // Aqui irei introduzir o try-catch exceptions para cada input                                  
        System.out.println("Têm mais recarga para registar?");
        System.out.println("responda 'S´ para continuar ou 'N´ para terminar");
        String resposta;
        resposta = kb.nextLine();

        if (resposta.equals("s")) {
            System.out.println("Introduza o número da recarga");
            Scanner kb2 = new Scanner(System.in);
            int MaisRecarga = kb.nextInt();
            System.out.println("Têm mais alguma recarga para registar?");
        } else {
            System.out.println("Obrigado, atê o próximo registo.");
            System.exit(0);

        }
    }
}
    
asked by anonymous 16.09.2016 / 14:26

3 answers

1

How about doing this?

import java.util.Scanner;

public class RegistoDeMensagem4 {

    private static int lerNumero(Scanner kb, String mensagem, String mensagemErro) {
        while (true) {
            System.out.println(mensagem);
            try {
                return Integer.parseInt(kb.nextLine());
            } catch (NumberFormatException e) {
                System.out.println(mensagemErro);
            }
        }
    }

    private static boolean lerSimNao(Scanner kb, String mensagem, String mensagemErro) {
        while (true) {
            System.out.println(mensagem);
            String x = kb.nextLine();
            if (x.equalsIgnoreCase("S")) return true;
            if (x.equalsIgnoreCase("N")) return false;
            System.out.println(mensagemErro);
        }
    }

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

        System.out.println("Bem-vindo, utilizador.");
        boolean maisRecarga = true;
        while (maisRecarga) {
            int recarga = lerNumero(kb, "Introduza o número da recarga: ", "Isso que você digitou não era um número. Por favor, tente novamente.");
            System.out.println("Você digitou " + recarga + ".");
            maisRecarga = lerSimNao(kb, "Tem mais recarga para registar?\nResponda 'S´ para continuar ou 'N´ para terminar: ", "Era para você responder S ou N! Por favor, tente novamente.");
        }
        System.out.println("Obrigado, até o próximo registro.");
    }
}

This program has the following:

  • The lerNumero method, which forces you to enter a number and press until a number is entered.

  • The lerSimNao method, which forces the typing of S or N (uppercase or lowercase) and insists until one of them is typed.

  • Use only Scanner .

  • Uses Integer.parseInt(kb.nextLine()) instead of kb.nextInt() to read numbers.

  • Allows the user to enter as many entries as he wants.

  • Does not use System.exit(0) - Using this is usually a bad programming practice.

Here is an example of inputs / outputs:

Bem-vindo, utilizador.
Introduza o número da recarga: 1234
Você digitou 1234.
Tem mais recarga para registar?
Responda 'S´ para continuar ou 'N´ para terminar: S
Introduza o número da recarga: Banana
Isso que você digitou não era um número. Por favor, tente novamente.
Introduza o número da recarga: 4321
Você digitou 4321.
Tem mais recarga para registar?
Responda 'S´ para continuar ou 'N´ para terminar: J
Era para você responder S ou N! Por favor, tente novamente.
Tem mais recarga para registar?
Responda 'S´ para continuar ou 'N´ para terminar: n
Obrigado, até o próximo registro.

See here working on ideone.

    
16.09.2016 / 17:14
9

The problem is that you are using the same scanner as the number in your answer. That way it will always fall into else because it already has the value of the number you entered.

Create a new object of class Scanner to read your answer:

 String resposta;
 Scanner kc = new Scanner(System.in);
 resposta = kc.nextLine();
    
16.09.2016 / 14:48
1

"S" and "s" are different Strings. equalsIgnoreCase() checks that String is equal, ignoring different capitalization.

Example

System.out.println("S".equals("s")); //false  

System.out.println("S".equalsIgnoreCase("s"));//true  

That is, you use equalsIgnoreCase() when you want to compare String , without distinguishing between uppercase and lowercase letters.

Details

16.09.2016 / 14:43