Distinct number problem in java

Asked

Viewed 106 times

0

package totoloto;
import myinputs.*;
public class Totoloto
{

/**
 * @param args the command line arguments
 */
 public static void main(String[] args) {
    int aux, k = 0, l, i, j, u;
    int t = 0, s;
    int[] x = new int[6];
    System.out.println("Introduza inteiros entre 1 e 49:");
    for (aux = 0; aux < 6; aux++) {
        s = -1;
        i = Ler.umInt();
        while (i <= 0 || i >= 50)// so entra se i tiver entre 1 e 49
        {
            System.out.println("Introduza um inteiro valido:");
            i = Ler.umInt();
        }
        while ((t < 6) && (s == -1)) {
            if (i == x[t]) {
                s = t;
            } else
                t = t + 1;
        }
        if (s != -1) {
            do {
                System.out.println("Introduza um inteiros valido:");
                u = Ler.umInt();
            } while (i == u);
            x[aux] = u;
            break;
        }
        x[aux] = i;
    }
    for (aux = 0; aux < 6; aux++) {
        System.out.println(aux + 1 + " elemento da chave= " + x[aux]);
    }
    }
}

I have the following code: but I need the vector to have only distinct numbers from 1 to 49.

1 answer

0


To ensure that not that the user does not choose repeated values the easiest is to even create a method that checks this and call it within the while to the invalid number.

Such a method would be:

public static boolean existe(int[] arr, int num){
    for (int i=0; i < arr.length; ++i){
        if (arr[i] == num){
            return true;
        }
    }

    return false;
}

Your main now becomes much simpler, because much of the code is no longer necessary:

public static void main(String[] args) {
    int aux, i;
    int[] x = new int[6];

    System.out.println("Introduza inteiros entre 1 e 49 não repetidos:");

    for (aux = 0; aux < 6; aux++) {
        i = Ler.umInt();

        //o while agora testa também se o numero i existe em x, e enquanto existir 
        //volta a pedir outro número
        while (i <= 0 || i >= 50 || existe(x, i))
        {
            System.out.println("Introduza um inteiro valido e não repetido:");
            i = Ler.umInt();
        }

        x[aux] = i; //agora resta apenas guardar pois já se sabe que não é repetido
    }

    for (aux = 0; aux < 6; aux++) {
        System.out.println(aux + 1 + " elemento da chave= " + x[aux]);
    }
}

See the example in Ideone

Browser other questions tagged

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