Open natan20200679 opened 2 years ago
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());
}
}
}
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?
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?
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?
Descomentando as linhas 6 e 9.
Pode ser pensar em chamada de rotina. Mas em Orientação a Objetos usamos os métodos.
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.
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
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
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.
Entendi querida! Obrigado pela atenção!
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
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. (:
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!
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.
Gostaria de saber se é essa a ideia. att Henrique
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.
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. ;)
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?