Doing searches and comparing java

2

I am developing a program that should request the RA of a student, the RA must be greater than zero. Soon after I want to buy the second RA typed to check if it has not already been registered. I made the code below but it keeps letting me register repeated numbers.

  if (nroAlunos == ra.length) {
       JOptionPane.showMessageDialog(null, "Não há mais espaço para cadastro.");} 
 for (int i = 0; i < ra.length; i++) {
    int cadastroRa = Integer.valueOf(JOptionPane.showInputDialog("Digite o RA que deseja cadastrar:"));
    if (cadastroRa == 0) {
        JOptionPane.showMessageDialog(null, "O número deve ser maior que zero...");
    } else {                            
            if (cadastroRa == ra[i]) {
                JOptionPane.showMessageDialog(null, "O RA digitado já esta cadastrado.");
            } else {
                ra[i] = cadastroRa;
                JOptionPane.showMessageDialog(null, "RA " + cadastroRa + " cadastrado com sucesso.");
            }
        }
    }
    
asked by anonymous 06.06.2017 / 16:00

2 answers

3

A simple break up would solve the problem, but your code has several others that I reported in the comments. Given this, I would suggest a different approach, which solves the problem of repeated and others that the code has:

public static void main(String[] args) {

    int[] ra = new int[10];

    int indice = 0;

    boolean cadastrado = false;

    do {

        int cadastroRa = Integer.valueOf(JOptionPane.showInputDialog("Digite o RA que deseja cadastrar:"));

        if (cadastroRa <= 0) {
            JOptionPane.showMessageDialog(null, "O número deve ser maior que zero...");
        } else if (existe(cadastroRa, ra)) {
            JOptionPane.showMessageDialog(null, "O RA digitado já esta cadastrado.");
        } else if (indice < ra.length){

            ra[indice] = cadastroRa;
            indice++;
            cadastrado = true;
            JOptionPane.showMessageDialog(null, "RA " + cadastroRa + " cadastrado com sucesso.");

        }

    } while (!cadastrado);

}

public static boolean existe(int cadastroRa, int[] listaRa) {

    boolean existe = false;

    for (int i = 0; i < listaRa.length; i++) {

        if (cadastroRa == listaRa[i]) {
            existe = true;
            break;
        }
    }

    return existe;
}

See that the existe() method has the sole purpose of checking whether the value already exists in the array, and returns true or false if it is found.

As the array in the array, the control is done by the variable indice , thus avoiding to fill an already filled array value or a position larger than the array size.

    
06.06.2017 / 16:22
0
if (Arrays.stream(ra).anyMatch(xh -> xh == cadastroRa))

Your final code looks like this:

for (int i = 0; i < ra.length; i++) {
    int cadastroRa = Integer.valueOf(JOptionPane.showInputDialog("Digite o RA que deseja cadastrar:"));

    if (cadastroRa == 0) {
        JOptionPane.showMessageDialog(null, "O número deve ser maior que zero...");
    } else {                            
        if (Arrays.stream(ra).anyMatch(xh -> xh == cadastroRa)) {
            JOptionPane.showMessageDialog(null, "O RA digitado já esta cadastrado.");
        } else {
            ra[i] = cadastroRa;
            JOptionPane.showMessageDialog(null, "RA " + cadastroRa + " cadastrado com sucesso.");
        }
    }
}
    
06.06.2017 / 16:11