Ir ao conteúdo

Java Compreender a função de uma variável e a lógica de um programa.


Ir à solução Resolvido por João Paulo Duarte,

Posts recomendados

Postado

 

Bom dia!

Gostaria de ajuda para entender a logica desse programa, e entender também a função da variável '' j ''.

Eu não entendi como o programa verifica se o numero digitado pelo usuário é repetido ou não, e como ele faz o controle disso com o '' while '', incrementando o '' j '' caso a condição seja verdadeira, e também com a condição " if (j >= cont_u) ".

Basicamente, eu estou perdido com a lógica aplicada no programa e gostaria de uma explicação detalhada, já que não encontrei nenhum conteúdo que me ajudasse.

Estarei anexando algumas imagens para ajudar vocês a entender do que se trata o código.

Desde já, agradeço muito.

Obrigado!

 

import java.util.Scanner;
public class Ex5
{ public static void main(String args[])
   { Scanner entrada = new Scanner(System.in);
     int X[] = new int[10];
     int Y[] = new int[10];
     int U[] = new int[20];
     int D[] = new int[10];
     int S[] = new int[10];
     int P[] = new int[10];
     int IT[] = new int[10];
     int i, j, k, cont_u, cont_d, cont_i;
     for (i=0;i<10;i++)
       { System.out.print("Digite o " + (i+1) + "o elemento do vetor X: ");
         X[i] = entrada.nextInt();
         System.out.print("Digite o " + (i+1) + "o elemento do vetor Y: ");
         Y[i] = entrada.nextInt();
       }
     cont_u = 0;
     cont_d = 0;
     cont_i = 0;
     for (i=0;i<10;i++)
      { j = 0;
        while (j < cont_u && X[i] != U[j])
         { j++;
         }
        if (j >= cont_u)
          { U[cont_u] = X[i];
            cont_u++;
          }
     }       
     for (i=0;i<10;i++)
      { j = 0;
        while (j < cont_u && Y[i] != U[j])
         { j++;
         }
        if (j >= cont_u)
          { U[cont_u] = Y[i];
            cont_u++;
          }
     }       
    System.out.println("Vetor Uniao ");
    for (i=0;i<cont_u;i++)
     { System.out.println(U[i]);
     }

    for (i=0;i<10;i++)
      { j = 0;
        while (j < 10 && X[i] != Y[j])
         { j++;
         }
        if (j >= 10)
          { k = 0;
            while (k <= cont_d && X[i] != D[k])
              { k++;
              }
            if (k >= cont_d)  
              { D[cont_d] = X[i];
                cont_d++;
              }
          }
     }       
    System.out.println("Vetor Diferença ");
    for (i=0;i<cont_d;i++)
     { System.out.println(D[i]);
     }
     
    for (i=0;i<10;i++)
    { S[i] = X[i] + Y[i];
      P[i] = X[i] * Y[i];
    }

    System.out.println("Vetor Soma ");
    for (i=0;i<10;i++)
     { System.out.println(S[i]);
     }

    System.out.println("Vetor Produto ");
    for (i=0;i<10;i++)
     { System.out.println(P[i]);
     }
  
   for (i=0;i<10;i++)
      { j = 0;
        while (j < 10 && X[i] != Y[j])
         { j++;
         }
        if (j < 10)
          { k = 0;
            while (k < cont_i && IT[k] != X[i])
              { k++;
              }
            if (k >= cont_i)
              { IT[cont_i] = X[i];
                cont_i++; 
              }
          }      
      }    
    System.out.println("Vetor Interseção ");
    for (i=0;i<cont_i;i++)
     { System.out.println(IT[i]);
     }
  }
}

 

WhatsApp Image 2021-02-10 at 2.45.42 PM.jpeg

WhatsApp Image 2021-02-10 at 2.45.49 PM.jpeg

  • 2 semanas depois...
  • Solução
Postado

@Gabriel de A.Campos

Espero que os comentários que coloquei no código ajudem.

 

public static void main(String args[])
   {
//cria o leitor de entrada
Scanner entrada = new Scanner(System.in);
//vetor X com 10 números inteiros
     int X[] = new int[10];
// vetor Y com 10 números inteiros
     int Y[] = new int[10];
//vetor União X e Y
     int U[] = new int[20];
//vetor dos elementos de X que não existem em Y
     int D[] = new int[10];
//vetor resultado de X[n] + Y[n]
     int S[] = new int[10];
//vetor resultado de X[n] * Y[n]
     int P[] = new int[10];
//vetor da intersecção de X e Y
     int IT[] = new int[10];
//variáveis auxiliares
     int i, j, k, cont_u, cont_d, cont_i;

//pede que o usuário entre um valor inteiro para X e Y 10 vezes seguidas
     for (i=0;i<10;i++)
       { System.out.print("Digite o " + (i+1) + "o elemento do vetor X: ");
//scanner nextInt() retorna o próximo valor inteiro na entrada (https://www.javatpoint.com/post/java-scanner-nextint-method)
         X[i] = entrada.nextInt();
         System.out.print("Digite o " + (i+1) + "o elemento do vetor Y: ");
         Y[i] = entrada.nextInt();
       }

//zera os contadores
     cont_u = 0;
     cont_d = 0;
     cont_i = 0;
//repete 10 vezes
     for (i=0;i<10;i++)
//zera j
      { j = 0;
/** enquanto o j for menor que o contador de u e o elemento i for diferente do elemento J, incrementa j
* se j for maior ou igual ao contador de u, adiciona o elemento X[I] na ultima posição de U
* Imagine que X = [1, 1, 2, 3, 5, 8, 13, 21, 21, 42]
* na primeira passada não entra no laço while pois j == cont_u mas entra na condição, atribui X[0] à U[0] e incrementa cont_u
* na segunda passada j < que cont_u (j=0, cont_u=1) mas X[1] == U[0] então ignora o laço. como j < cont_u, não entra na condição
* na terceira a condição do laço é satisfeita (j=0, cont_u=1 && X[2]=2 e U[0]=1 então incrementa j uma vez para 1 e sai do laço
* depois como j é igual a cont_u (j=1, cont_u=1) adiciona X[i] em U[cont_u]
* e continua até não existirem mais elementos em X[]
*/
        while (j < cont_u && X[i] != U[j])
         { j++;
         }
        if (j >= cont_u)
          { U[cont_u] = X[i];
            cont_u++;
          }
     }
// Mesma coisa, mas com o conjunto Y       
     for (i=0;i<10;i++)
      { j = 0;
        while (j < cont_u && Y[i] != U[j])
         { j++;
         }
        if (j >= cont_u)
          { U[cont_u] = Y[i];
            cont_u++;
          }
     }       
    System.out.println("Vetor Uniao ");
    for (i=0;i<cont_u;i++)
     { System.out.println(U[i]);
     }
/**
* Bastante parecido com o laço para a criação do conjunto união, mas primeiro com a verificação se X[i] é igual a algum dos * elementos de Y. Caso X seja igual a algum elemento de Y, o J será menor que 10 e a condição para a inclusão do elemento de
* X no vetor diferença nunca será cumprida. Caso não exista em Y um elemento igual a X[i], utiliza um laço semelhante ao
* anterior para excluir os elementos repetidos.
*/
    for (i=0;i<10;i++)
      { j = 0;
        while (j < 10 && X[i] != Y[j])
         { j++;
         }
        if (j >= 10)
          { k = 0;
            while (k <= cont_d && X[i] != D[k])
              { k++;
              }
            if (k >= cont_d)  
              { D[cont_d] = X[i];
                cont_d++;
              }
          }
     }       
    System.out.println("Vetor Diferença ");
    for (i=0;i<cont_d;i++)
     { System.out.println(D[i]);
     }
     
    for (i=0;i<10;i++)
    { S[i] = X[i] + Y[i];
      P[i] = X[i] * Y[i];
    }

    System.out.println("Vetor Soma ");
    for (i=0;i<10;i++)
     { System.out.println(S[i]);
     }

    System.out.println("Vetor Produto ");
    for (i=0;i<10;i++)
     { System.out.println(P[i]);
     }
  
   for (i=0;i<10;i++)
      { j = 0;
        while (j < 10 && X[i] != Y[j])
         { j++;
         }
        if (j < 10)
          { k = 0;
            while (k < cont_i && IT[k] != X[i])
              { k++;
              }
            if (k >= cont_i)
              { IT[cont_i] = X[i];
                cont_i++; 
              }
          }      
      }    
    System.out.println("Vetor Interseção ");
    for (i=0;i<cont_i;i++)
     { System.out.println(IT[i]);
     }
  }

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...