Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Map - Exercício Proposto 2 #8

Open
natan20200679 opened this issue Jan 23, 2022 · 15 comments
Open

Map - Exercício Proposto 2 #8

natan20200679 opened this issue Jan 23, 2022 · 15 comments

Comments

@natan20200679
Copy link

Camila, boa tarde! Eu não consegui assimilar este exercício, mesmo refazendo baseado na sua solução. Tu poderias me explicar tua lógica, mostrando ao menos outra opção no uso de métodos e funções, principalmente a partir do uso do Map em diante?

@cami-la
Copy link
Owner

cami-la commented Jan 24, 2022

Oi, boa tarde! Veja se agora ficou melhor:

import java.util.*;

public class Main {
  public static void main(String[] args) {
    List<Integer> resultadoDosLancamentos = lancamentoDeDados();
    //System.out.println(resultadoDosLancamentos);

    Map<Integer, Integer> lancamentosOrganizadosPorGrupo = lancamentosOrganizados(lancamentoDeDados());
    //System.out.println(lancamentosOrganizadosPorGrupo);

    simulacaoDeProcessamento();

    exibindoResultadoDosLancamentosAgrupados(lancamentosOrganizadosPorGrupo);
    
  }

  //Método que irá gerar os números aleatórios simulando o lançamento de um dado 100 vezes.
  private static List<Integer> lancamentoDeDados(){

    //Classe Java que gera números aleartórios
    Random lancadorDeDados = new Random();
    
    //Lista que irá armazenar todos os valores gerados
    List<Integer> todosResuldadoDosLancamentos = new ArrayList<>();
    for(int i = 0; i < 100; i++) {
      //Esse valor deverá ser entre 1 e 6.
      int resuldadoDoLancamento = lancadorDeDados.nextInt(6) + 1;
      //Adicionando o resuldadoDoLancamento dentro da lista de lançamentos
      todosResuldadoDosLancamentos.add(resuldadoDoLancamento);
    }

    return todosResuldadoDosLancamentos;
  }

  //Método que irá organizar os resultados dos lançamenots em grupos de 1 a 6 (resultados possíveis de um dado)
  private static Map<Integer, Integer> lancamentosOrganizados(List<Integer> lancamentosDeDados){
    //Map que irá armazenar os resultados dos lançamentos de acordo com o resultado.
    Map<Integer, Integer> resultadoDosLancamentosOrganizados = new HashMap<Integer, Integer>();

    //Vamos pegar a lista com todos os lançamentos e organizar dentro de um map chave e valor.
    for (Integer resultadoDoLancamento : lancamentosDeDados) {
      //Se ao navegar na lista, o elemento armazenado na lista (que é o resultado do lançamento) já tiver aparecido:
      if (resultadoDosLancamentosOrganizados.containsKey(resultadoDoLancamento)) {
        //Pega esse resultado e coloca dentro do Map como key e informa, acrescentando +1 no value para indicar que esse resultado apareceu mais uma vez.
        resultadoDosLancamentosOrganizados.put(resultadoDoLancamento, (resultadoDosLancamentosOrganizados.get(resultadoDoLancamento) + 1));
      } else { //Se foi a primeira vez que o resultado apareceu na lista
        //Pega esse resultado e coloca como key de um elemento do Map, e informa no valor que ele apareceu pela primeira vez, indicando 1.
        resultadoDosLancamentosOrganizados.put(resultadoDoLancamento, 1);
      }
    }

    return resultadoDosLancamentosOrganizados;
  }

  //Simulando como se o lançador demorasse um tempo para lançar e contabilizar.
  private static void simulacaoDeProcessamento() {
    System.out.print("Processando");
    for (int i = 0; i < 5; i++) {
      try {
        Thread.sleep(1000);
        System.out.print(".");
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }

  //Exibindo o resultado dos lançamentos agrupados.
  private static void exibindoResultadoDosLancamentosAgrupados(Map<Integer, Integer> resuldadoDosLancamentosAgrupados){
    System.out.println("\nValor " + " Quant. de vezes");
    for (Map.Entry<Integer, Integer> entry : resuldadoDosLancamentosAgrupados.entrySet()) {
      //Formatando a saída no console com espaçamento. 
      // Pegando Key (Valor da face do dado) e Value (quantas vezes deu o número dessa face nos lançamentos.)
      System.out.printf("%3d %10d\n", entry.getKey(), entry.getValue());
    }
  }

}

@natan20200679
Copy link
Author

natan20200679 commented Jan 26, 2022

OI Camila! Olha, as instruções das linhas 11 e 13 podem ser omitidas, já que são definidas nas linhas 56 e 69? A instrução da linha 5 não é pleonástica (desnecessária), já que a da linha 24 faz o mesmo? Tu podes me relembrar o porque da formatação numérica na última linha de instrução?

@cami-la
Copy link
Owner

cami-la commented Jan 26, 2022

Oi amigo, vamos lá.
Não sei se entendi bem sua dúvida, mas creio que você está confundindo a declaração do método com a invocação do método.

Nas linhas 18, 36, 56 e 29 são as criações dos métodos.
Nas linhas 5, 8, 11 e 13 são as invocação desses métodos. Tente comentar essas linhas e veja o que acontece.

Seguinte: O método main (linha 4) é o método que será a porta de entrada do nosso sistema. A máquina virtual JVM vai varrer esse método, executando tudo o que estiver dentro dele, de maneira sequencial.
Assim, se apagar as linhas 5, 8, 11 e 13 a JVM náo irá saber que você quer executar os métodos criados nas linhas 18, 36, 56 e 29.

Sobre a formatação númerica, formatei para o resultado ficar mais legível no console. Porém é opcional.

Você copiou esse código que eu fiz e tentou rodar na sua máquina?

@natan20200679
Copy link
Author

natan20200679 commented Jan 26, 2022

Executei o código, e funciona perfeitamente. Porém, ainda não consegui visualizar nesta saída essa formatação que colocou no final, ou seja, entender o que realmente ela faz. Essa invocação de métodos podemos dizer que é uma chamada de rotina, conforme vemos em lógica de programação?

@cami-la
Copy link
Owner

cami-la commented Jan 26, 2022

Descomentando as linhas 6 e 9.

2022-01-26_11-30

  • A primeira linha que contornei com o retângulo, representa todos os lançamentos dos dados (100 vezes). Note que só é possível os resultados de 1 a 6 que são as faces possíveis de um dado.
  • No segundo retângulo, é a quantidade de vezes que cada resultado. A face 1 apareceu 13 vezes, a face 2 aparecceu 15 vezes e assim sucessivamente até a face 6. (13+15+21+23+15+13) = 100. Que foi a quantidade de vezes que o dado foi lançado.
  • No terceiro retângulo, é a saída formadata do segundo retângulo para ficar mais legível.

Pode ser pensar em chamada de rotina. Mas em Orientação a Objetos usamos os métodos.

@natan20200679
Copy link
Author

Camila, perdoe-me querida, eu não expressei claramante a minha dúvida quando coloquei que não consegui visualizar na saída a formatação que colocou no final. Eu me referi apenas à formatação numérica que colocou na linha 74. Mesmo assim, levei em consideração sua explicação.

@natan20200679
Copy link
Author

Analisando agora, achei um pouco confuso a lógica presente entre as linhas 43 e 48, porque estou habituado a utilizar o "if" sempre no formato if (var != valor ou dado), por exemplo. Tou te alugando hoje kkk

@cami-la
Copy link
Owner

cami-la commented Jan 26, 2022

Camila, perdoe-me querida, eu não expressei claramante a minha dúvida quando coloquei que não consegui visualizar na saída a formatação que colocou no final. Eu me referi apenas à formatação numérica que colocou na linha 74. Mesmo assim, levei em consideração sua explicação.

Amigo, nem se preocupe. Estou aqui pra ajudar.
Estou tentando deixar tudo o mais explicativo possível.

Aaaah, agora acho que entendi. No caso, você não entendeu o System.out.printf("%3d %10d\n", entry.getKey(), entry.getValue())
Vou te deixar um link que explica sobre formatação de Strings: http://www.bosontreinamentos.com.br/java/metodos-printf-print-e-println-curso-de-programacao-em-java/

Caso você queira se aprofundar, neste curso, eu explico com detalhes sobre isso: https://web.dio.me/course/entrada-e-saida-de-arquivos-io-em-java/learning/91871c29-e97e-4434-be0e-71aa71df80f3/?back=/browse

@cami-la
Copy link
Owner

cami-la commented Jan 26, 2022

Analisando agora, achei um pouco confuso a lógica presente entre as linhas 43 e 48, porque estou habituado a utilizar o "if" sempre no formato if (var != valor ou dado), por exemplo. Tou te alugando hoje kkk

Ah, vamos lá.
Dentro do if é necessário ter true ou false.
Então, você pode fazer verificações dentro desse if, como por exemplo o da linha 43.
A linha 48 é o método .put() do Map, para adicionar ou atualizar chave e valor de um elemento do Map.

@natan20200679
Copy link
Author

Entendi querida! Obrigado pela atenção!

@natan20200679
Copy link
Author

Se possível, gostaria que verificasse erros nos comentários que acrescentei ao código https://github.com/natan20200679/Java/blob/master/Collections/src/Map/EP_2.java

@cami-la
Copy link
Owner

cami-la commented Jan 27, 2022

Se possível, gostaria que verificasse erros nos comentários que acrescentei ao código https://github.com/natan20200679/Java/blob/master/Collections/src/Map/EP_2.java

Sim está ótimo!!

Só na linha 18:
// Criação da lista (dicionário) de par de valores contendo a frequência de cada número do dado, através da
List é uma lista e Map é um dicionário. Então não pode misturar os conceitos. (:

@natan20200679
Copy link
Author

Se possível, gostaria que verificasse erros nos comentários que acrescentei ao código https://github.com/natan20200679/Java/blob/master/Collections/src/Map/EP_2.java

Sim está ótimo!!

Só na linha 18: // Criação da lista (dicionário) de par de valores contendo a frequência de cada número do dado, através da List é uma lista e Map é um dicionário. Então não pode misturar os conceitos. (:

Obg querida!

@Guardianofligth
Copy link

Boa noite Camila! Acabei de assistir a sua mentoria na DIO.

Então, sobre o exercício proposto de fazer uma "List" de temperatura em semestre sua media. Gostaria de sua correção sobre esse exercício.
Exercicio00

Gostaria de saber se é essa a ideia. att Henrique

@cami-la
Copy link
Owner

cami-la commented Jan 31, 2022

Boa noite Camila! Acabei de assistir a sua mentoria na DIO.

Então, sobre o exercício proposto de fazer uma "List" de temperatura em semestre sua media. Gostaria de sua correção sobre esse exercício. Exercicio00

Gostaria de saber se é essa a ideia. att Henrique

Sim, Herique. Essa forma que você fez, é uma forma válida!
Também fiz, só que utilizei o Strem API:
https://github.com/cami-la/curso-dio-intro-collections/blob/master/src/br/com/dio/collection/list/ExercicioProposto01.java

Dá uma olhadinha para fazer uma comparação. ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants