Difficulty with FOR loop nested

1

I am creating a code to develop my studies in Java and gave me an interesting idea / challenge:

One person has 5 cards from MegaSena and always plays with the same cards. I made a small code where you enter the numbers of the last draw and he checks to see if he hits the cards. See:

    public static void main(String[] args) {


    int[] cartela1 = {13,25,32,47,59,60};
    int[] cartela2 = {14,26,33,48,55,60};
    int[] cartela3 = {18,63,41,25,21,36};
    int[] cartela4 = {14,26,33,48,55,60};
    int[] cartela5 = {13,25,32,47,59,60};
    int[] numSorteio = new int[6];
    int i,j;
    int count = 0;

    Scanner scan = new Scanner(System.in);

    for (i=0; i<numSorteio.length; i++) {
        System.out.println("Digite o número sorteado na posição: " +i);
        numSorteio[i] = scan.nextInt();
    }

    for (i=0; i<6; i++) {
        for (j=0; j<6; j++) {
            if (numSorteio[j] == cartela1[i]) {
                System.out.println("Seu número " + cartela1[i]+ " foi sorteado!");
                count++;
            }
        }
    }

    System.out.println("Você acertou " +count+ " números na cartela 1!");
}

As you can see my code works perfectly showing on the output the numbers I hit and the quantity.

But I only managed to do it for cartela1, if I repeated FOR 5 times it would be perfect for 5 cards, but I wanted to do it in a shorter and more elegant way.

    
asked by anonymous 05.06.2018 / 04:39

2 answers

2

I did this:

  • The same loop is comparing the numbers to the first card can be used to make the comparisons of all the 5 cards as can be checked below

  • To print the result let's change the type of the count variable, which was an integer, for vector, so we can store the counts of the hits of each card in a position different from the vector (ex: zero position stores the number of hits from the first card, position 1 stores the number of hits from the second card and so on.)

  • We can call a for to print the hit amount of each as it can be seen at the end of the code.

  • The code looks like this:

    public static void main(String[] args) {
        // TODO code application logic here
    
        int[] cartela1 = {13,25,32,47,59,60};
        int[] cartela2 = {14,26,33,48,55,60};
        int[] cartela3 = {18,63,41,25,21,36};
        int[] cartela4 = {14,26,33,48,55,60};
        int[] cartela5 = {13,25,32,47,59,60};
        int[] numSorteio = new int[6];
        int i,j;
        int[] count = new int[5];
    
        Scanner scan = new Scanner(System.in);
    
        for (i=0; i<numSorteio.length; i++) {
            System.out.println("Digite o número sorteado na posição: " +i);
            numSorteio[i] = scan.nextInt();
        }
    
        for (i=0; i<6; i++) {
            for (j=0; j<6; j++) {
                if (numSorteio[j] == cartela1[i]) {
                    System.out.println("Seu número " + cartela1[i]+ " foi sorteado na cartela 1!");
                    count[0]++;
                }
    
                if (numSorteio[j] == cartela2[i]) {
                    System.out.println("Seu número " + cartela2[i]+ " foi sorteado na cartela 2!");
                    count[1]++;
                }
    
                if (numSorteio[j] == cartela3[i]) {
                    System.out.println("Seu número " + cartela3[i]+ " foi sorteado na cartela 3!");
                    count[2]++;
                }
    
                if (numSorteio[j] == cartela4[i]) {
                    System.out.println("Seu número " + cartela4[i]+ " foi sorteado na cartela 4!");
                    count[3]++;
                }
    
                if (numSorteio[j] == cartela5[i]) {
                    System.out.println("Seu número " + cartela5[i]+ " foi sorteado na cartela 5!");
                    count[4]++;
                }
            }
        }
    
        for(i = 0 ; i<count.length ; i++){
        System.out.println("Você acertou " +count[i]+ " números na cartela "+ (i+1)+"!");
    
        }
    }
    }
    
        
    05.06.2018 / 04:53
    0

    Another option. If you have any questions, just ask. I've used some features that you may not have studied just to encourage you to search and learn more. ;)

    public static void main(String args[]) {
            int[] a = {50, 30, 20, 60, 40, 10};
            int[] b = {21, 10, 38, 40, 50, 22};
            int[] c = {45, 44, 30, 25, 50, 16};
            int[] d = {55, 33, 60, 40, 49, 12};
            int[] numerosSorteados = {10,21,22,38,40,50};
    
            checarCartelas(numerosSorteados, a, b, c, d);
        }
    
        //Método tem dois parâmetros: o primeiro sempre será a lista de números sorteados
    //O segundo poderá receber N cartelas (isso se chama parâmetro varargs e lhe permite passar
    //1, 20, 100 cartelas, quantas quiser)
    private static void checarCartelas(int[] numerosSorteados, int[]... cartelas) {
        //Ordena os números sorteados (ordenar simplifica o algoritmo, precisaremos
        //percorrer as cartelas apenas uma vez)
        Arrays.sort(numerosSorteados);
    
        int numeroDaCartela = 0;
    
        //Examinamos uma cartela por vez
        for (int[] cartela: cartelas) {
    
            //Ordenamos a cartela atual
            Arrays.sort(cartela);
    
            int quantidadeAcertosNaCartela = 0;
    
            System.out.println("Examinando cartela " + ++numeroDaCartela);
    
            //Comparamos cada número da cartela atual com cada um dos números sorteados
            for (int i = 0; i < cartela.length; i++) {
                for (int j = 0; j < cartela.length ; j++) {
    
                    if(cartela[i] == numerosSorteados[j]) {
                        quantidadeAcertosNaCartela++;
                        System.out.println("Seu número " + cartela[i] + " foi sorteado na cartela " + numeroDaCartela);
                    }
                }
            }
    
            if(quantidadeAcertosNaCartela > 0) {
                System.out.println("Parabéns, você teve " +
                        quantidadeAcertosNaCartela +
                        //Usamos um if ternário para que a mensagem
                        // seja gramaticalmente correta (os detalhes importam!!)
                        (quantidadeAcertosNaCartela <= 1 ? " acerto" : " acertos"));
            } else {
                System.out.println("Nenhum número acertado");
            }
        }
    }
    
        
    05.06.2018 / 15:22