Você está aqui: Java ::: Pacote java.util ::: ArrayList |
Java Avançado - Como ordenar uma ArrayList em ordem crescente de elementos repetidosQuantidade de visualizações: 2475 vezes |
Em algumas situações nós gostaríamos de ordenar uma List (uma ArrayList, por exemplo) em ordem crescente ou decrescente baseado no número de vezes que um determinado elemento se repete. Este é um exercício interessante, pois mostra como podemos combinar a interface List, a classe ArrayList, a interface Map, a classe HashMap e ainda o método sort() da classe Collections. Nosso objetivo é ordenar um vetor de inteiros contendo alguns elementos repetidos, de forma que o resultado final seja algo como: 2, 3, 4, 6, 50, 9, 9, 7, 7, 7 Veja o código completo para o exemplo. Note como pedimos para o usuário informar 10 valores inteiros e depois os ordenamos por ordem crescente de quantidade de repetições dos elementos (elementos com menos repetições vêm primeiro): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; import java.util.*; public class Estudos{ public static void main(final String[] args) { // para ler a entrada do usuário Scanner entrada = new Scanner(System.in); // uma list de inteiros List<Integer> valores = new ArrayList(); // vamos pedir para o usuário informar 10 valores inteiros for(int i = 0; i < 10; i++){ System.out.print("Informe um valor inteiro: "); // vamos adicionar este valor à lista valores.add(Integer.parseInt(entrada.nextLine())); } // agora criamos um Map para contar as repetições Map<Integer, Integer> quants = new HashMap(); // e percorremos todos os elementos da segunda lista for(Integer item : valores){ Integer quant = quants.get(item); // este valor está no mapa? if(quant == null) { quant = 1; } else { quant++; } // colocamos ou ajustamos este item no mapa quants.put(item, quant); } Collections.sort(valores, new Comparator<Integer>() { @Override public int compare(Integer a, Integer b) { // lógica para ordenar pela quantidade de repetições int res = quants.get(a) - quants.get(b); // ou pelo valor dos elementos if(res == 0){ res = a - b; } return res; } }); // mostra o vetor já ordenado System.out.println(valores); } } Ao executarmos este código Java nós teremos o seguinte resultado: Informe um valor inteiro: 9 Informe um valor inteiro: 9 Informe um valor inteiro: 4 Informe um valor inteiro: 2 Informe um valor inteiro: 50 Informe um valor inteiro: 7 Informe um valor inteiro: 3 Informe um valor inteiro: 7 Informe um valor inteiro: 7 Informe um valor inteiro: 6 [2, 3, 4, 6, 50, 9, 9, 7, 7, 7] |
Link para compartilhar na Internet ou com seus amigos: |
Java ::: Fundamentos da Linguagem ::: Variáveis e Constantes |
Regras para a escolha de nomes de variáveis e constantes em JavaQuantidade de visualizações: 15568 vezes |
Cada linguagem de programação tem seu conjunto próprio de regras e convenções para os tipos de nomes que você pode usar, e Java não é diferente. As regras e convenções para nomear variáveis em Java são as seguintes: 1) Nomes de variáveis são sensíveis a minúsculas e maiúsculas. Isso quer dizer que "cliente" é diferente de "Cliente". O nome de uma variável pode ser qualquer identificador legal: Uma sequência sem limites de tamanho de letras Unicode e dígitos, começando com uma letra, "$" ou o caractere de sublinhado "_" (underscore). A convenção, contudo, é sempre começar um nome de variável com uma letra e não "$" ou "_". Além disso, por convenção, o caractere $ nunca é usado. Você pode encontrar situações em que nomes gerados automaticamente podem conter o sinal $, mas evite usá-lo sempre que possível. O mesmo acontece com "_". Embora permitido, evite começar nomes de variáveis com "_". Espaços não são permitidos em nomes de variáveis. 2) Caracteres subsequentes podem ser letras, dígitos, $ ou "_". Convenções (e senso comum) se aplicam a esta regra também. Quando escolher nomes para suas variáveis, use nomes completos em vez de abreviações confusas. Isso tornará seu código mais legível. Nomes tais como "cliente", "nota", "quantidade", etc, são bem mais fáceis de entender e lembrar que "cl", "n", "qt", etc. Tenha também em mente que palavras-chaves e palavras reservadas da linguagem não podem ser usadas como nomes de variáveis. 3) Se o nome de variável que você escolher consistir de apenas um palavra, escreva-a toda em letras minúsculas. Ex.: cliente. Se consistir de mais de uma palavra, escreva a primeira letra da segunda palavra usando letra maiúscula. Ex.: nomeCliente. Se o nome for de uma constante, ele deve ser escrito todo em letras maiúsculas. Ex.: MODELO = 102. Se o nome da constante possuir mais de uma palavra, separe-as com o caractere "_". Ex.: NIVEL_BOLETO = 2. |
Java ::: Dicas & Truques ::: Geometria, Trigonometria e Figuras Geométricas |
Como calcular o ponto de interseção de duas retas em Java - Java para Geometria Analítica e Álgebra LinearQuantidade de visualizações: 905 vezes |
Duas retas podem encontrar-se em 0, 1 ou 2 pontos. No primeiro caso, elas são chamadas paralelas; no segundo, elas são chamadas concorrentes e o ponto de encontro entre elas é chamado ponto de interseção; no terceiro caso, se duas retas possuem dois pontos em comum, então elas obrigatoriamente apresentam todos os pontos em comum e são chamadas coincidentes. Nesta dica mostrarei como podemos encontrar o ponto de interseção (ou intersecção) de duas retas usando Java. Mas, antes de vermos o código, dê uma olhada na seguinte imagem: Note que temos os pontos A e B correspondentes ao segmento de reta AB e os pontos C e D correspondentes ao segmento de reta CD. Nossa tarefa é encontrar o ponto exato de intersecção entre esses dois segmentos de reta. Veja o código Java completo que nos auxilia na resolução deste problema: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; // Classe usada para representar um ponto no // plano 2d (Plano Cartesiano) class Ponto{ double x, y; // construtor da classe public Ponto(double x, double y){ this.x = x; this.y = y; } } public class Estudos { public static void main(String[] args) { // vamos construir os quatro pontos Ponto A = new Ponto(5, 7); Ponto B = new Ponto(9, -4); Ponto C = new Ponto(-8, 2); Ponto D = new Ponto(11, 6); // vamos obter a representação do segmento AB double a1 = B.y - A.y; double b1 = A.x - B.x; double c1 = (a1 * A.x) + (b1 * A.y); // vamos obter a representação do segmento CD double a2 = D.y - C.y; double b2 = C.x - D.x; double c2 = (a2 * C.x) + (b2 * C.y); // obtém o determinante double determinante = (a1 * b2) - (a2 * b1); // as duas retas são paralelas? if(determinante == 0){ System.out.println("\nAs duas retas são paralelas.\n"); } else{ // e construímos o ponto de intersecção double x = ((b2 * c1) - (b1 * c2)) / determinante; double y = ((a1 * c2) - (a2 * c1)) / determinante; Ponto inters = new Ponto(x, y); System.out.printf("O ponto de interseção é: x = %.2f; y = %.2f", inters.x, inters.y); } System.out.println(); } } Ao executar este código Java nós teremos o seguinte resultado: O ponto de interseção é: x = 5,76; y = 4,90 De fato, se você olhar a imagem novamente e desenhar este ponto, verá que ele se situa exatamente na intersecção das retas indicadas. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Programação Orientada a Objetos |
Exercício Resolvido de Java - Crie uma classe Agenda que pode armazenar 10 pessoas e que seja capaz de realizar as seguintes operaçõesQuantidade de visualizações: 5760 vezes |
Exercícios Resolvidos de Java - Crie uma classe Agenda que pode armazenar 10 pessoas e que seja capaz de realizar as seguintes operações Pergunta/Tarefa: Crie uma classe Agenda que pode armazenar 10 pessoas e que seja capaz de realizar as seguintes operações: void armazenaPessoa(String nome, int idade, float altura); void removePessoa(String nome); int buscaPessoa(String nome); // informa em que posição da agenda está a pessoa void imprimeAgenda(); // imprime os dados de todas as pessoas da agenda void imprimePessoa(int index); // imprime os dados da pessoa que está na posição "i" da agenda. O código deverá ser desenvolvido em Java console (modo texto) e usar um menu switch() para as operações. Sua saída deverá ser parecida com: Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: Código para a classe Pessoa (Pessoa.java): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; public class Pessoa { private String nome; private int idade; private double altura; // construtor cheio public Pessoa(String nome, int idade, double altura) { this.nome = nome; this.idade = idade; this.altura = altura; } // construtor vazio public Pessoa() { } // método que imprime todos os dados da pessoa public void imprimirDados(){ System.out.println("Nome: " + nome + "\nIdade: " + idade + "\nAltura: " + altura); } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public int getIdade() { return idade; } public void setIdade(int idade) { this.idade = idade; } public double getAltura() { return altura; } public void setAltura(double altura) { this.altura = altura; } } Código para a classe Agenda (Agenda.java): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; public class Agenda { // vetor que guardará as pessoas private Pessoa pessoas[]; // construtor da classe Agenda public Agenda(int quantidade){ pessoas = new Pessoa[quantidade]; } public void armazenaPessoa(String nome, int idade, double altura){ // ainda temos posições disponíveis na agenda? boolean cadastrado = false; for(int i = 0; i < pessoas.length; i++){ if(pessoas[i] == null){ // encontramos uma posição Pessoa p = new Pessoa(nome, idade, altura); // criamos uma nova pessoa // guardamos ela no vetor pessoas[i] = p; // e avisamos que o cadastro foi efetuado com sucesso cadastrado = true; break; // sai do laço } } if(cadastrado){ System.out.println("\nCadastro efetuado com sucesso"); } else{ System.out.println("\nNão foi possível cadastrar. Agenda cheia"); } } // método que permite pesquisar e excluir uma pessoa public void removePessoa(String nome){ // vamos verificar se a exclusão foi efetuada com sucesso boolean excluido = false; for(int i = 0; i < pessoas.length; i++){ if(pessoas[i] != null){ // esta é a pessoa que estamos procurando? if(pessoas[i].getNome().equals(nome)){ pessoas[i] = null; // posição disponível novamente excluido = true; break; // sai do laço } } } if(excluido){ System.out.println("\nPessoa removida com sucesso"); } else{ System.out.println("\nNão foi possível remover. Pessoa não encontrada."); } } // informa em que posição da agenda está a pessoa public int buscaPessoa(String nome){ int resultado = -1; // vamos verificar se a pessoa existe na agenda for(int i = 0; i < pessoas.length; i++){ if(pessoas[i] != null){ // esta é a pessoa que estamos procurando? if(pessoas[i].getNome().equals(nome)){ resultado = i; break; // sai do laço } } } return resultado; } // imprime os dados de todas as pessoas da agenda public void imprimeAgenda(){ // vamos percorrer o vetor de pessoas e imprimir cada uma for(int i = 0; i < pessoas.length; i++){ if(pessoas[i] != null){ Pessoa p = pessoas[i]; System.out.println("\nNome: " + p.getNome()); System.out.println("Idade: " + p.getIdade()); System.out.println("Altura: " + p.getAltura()); } } } // imprime os dados da pessoa que está na posição "i" da agenda public void imprimePessoa(int index){ // este índice é válido? if((index < 0) || (index > (pessoas.length - 1))){ System.out.println("\nÍndice inválido"); } else{ Pessoa p = pessoas[index]; if(p == null){ System.out.println("\nNão existe pessoa nesse índice ainda."); } else{ System.out.println("\nNome: " + p.getNome()); System.out.println("Idade: " + p.getIdade()); System.out.println("Altura: " + p.getAltura()); } } } } Código para a classe Principal (Principal.java): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; import java.util.Scanner; public class Principal { // para fazer a leitura da entrada do usuário static Scanner entrada = new Scanner(System.in); public static void main(String[] args) { // cria uma nova Agenda Agenda agenda = new Agenda(10); String nome; // nome da pessoa int idade; // idade da pessoa double altura; // altura da pessoa // cria o menu de opções while(true){ System.out.println("\n1. Nova Pessoa"); System.out.println("2. Excluir Pessoa"); System.out.println("3. Buscar Pessoa"); System.out.println("4. Imprimir Agenda"); System.out.println("5. Imprimir Pessoa (Índice)"); System.out.println("6. Sair"); System.out.print("Sua opção: "); int opcao = Integer.parseInt(entrada.nextLine()); switch(opcao){ case 1: System.out.print("\nInforme o nome: "); nome = entrada.nextLine(); System.out.print("Informe a idade: "); idade = Integer.parseInt(entrada.nextLine()); System.out.print("Informe a altura (use ponto em vez de vírgula): "); altura = Double.parseDouble(entrada.nextLine()); agenda.armazenaPessoa(nome, idade, altura); break; case 2: System.out.print("\nInforme o nome a ser removido: "); nome = entrada.nextLine(); agenda.removePessoa(nome); break; case 3: System.out.print("\nInforme o nome a ser pesquisado: "); nome = entrada.nextLine(); int indice = agenda.buscaPessoa(nome); if(indice < 0){ System.out.println("\nA pessoa não foi encontrada"); } else{ System.out.println("\nA pessoa foi encontrada no índice: " + indice); } break; case 4: agenda.imprimeAgenda(); break; case 5: System.out.print("\nInforme o índice desejado: "); int index = Integer.parseInt(entrada.nextLine()); agenda.imprimePessoa(index); break; case 6: System.exit(0); default: System.out.println("\nOpção inválida\n"); break; } } } } |
Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil |
Alvenaria: Técnicas construtivas Durante o levantamento, devemos aferir o nivelamento e o prumo de uma parede em blocos cerâmicos: A) Somente se houver um embarrigamento ou desnivelamento visível. B) Ao levantar 1,0 m a parede. C) Somente na última fiada. D) A cada fiada executada. E) A cada 3 fiadas executadas. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Introdução à Ética Entre os estudos proeminentes sobre a definição da ética, da moral, sua presença e importância entre os seres humanos racionalmente organizados em sistemas sociais, as sociedades, estão as análises e reflexões dos filósofos da Grécia Antiga. Embora cada um, entre expoentes como Platão, Aristóteles e Sócrates, tivesse uma proposta de interpretação para a moral e para a ética, é possível dizer que há uma percepção comum: a de que a "A ética é a morada do homem". O que isso significa? A) A moradia física para o grego era a base da sociedade, em torno da qual circundavam os demais significados socialmente apreendidos, então, ser ético era ser bom. B) Morada é um recanto simples onde o homem pode viver com honestidade, e ser uma pessoa ética é ser honesto. C) O sentido de morada era conceito existencial, confiado ao cidadão que, vivendo conforme normas e leis existentes, teria a segurança de uma vida ética. D) Assim como o mito da caverna, a lenda da morada também é falsa e se destina à formação de exemplos aos estudantes de filosofia da atualidade. E) Aristóteles escreveu essa máxima pensando em todos os habitantes da Grécia, que exibiam a igualdade de comportamento, pensamento e opinião política. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil |
Locação da obra No caso de obras de grande área (m2), erros acumulados de alinhamento podem acarretar perda de tempo e dinheiro, sendo conveniente, portanto, o auxílio da topografia. Para esse tipo de obra, que tem muitos elementos (fundações, paredes, etc.), qual é o processo ideal de locação? A) Processo dos cavaletes. B) Processo dos piquetes. C) Processo dos perfis metálicos. D) Processo dos tapumes (ou gabaritos ou tábuas corridas). E) Locação com auxílio das construções vizinhas. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica |
Turbomáquinas Uma turbomáquina é um dispositivo no qual a energia é transferida para ou de um fluido em movimento contínuo. A linha da lâmina gira e altera a pressão do fluido, realizando trabalhos no fluido (bomba hidráulica) ou realizando o trabalho na linha da lâmina pelo fluido (turbina). Qual classe de máquinas hidráulicas é especialmente excluída quando é considerada essa definição apresentada? A) Essa definição exclui a classe de turbinas eólicas, pois, apesar de referenciar o termo genérico "turbina", não engloba os dispositivos cujos fluidos não são a água e cuja a vazão do fluido pode ser variável. B) Essa definição exclui as máquinas hidráulicas que contêm um eixo de rotação. Nesse caso, foram excluídos, especialmente, os motores hidráulicos, um grupo amplo e com muitos dispositivos com vazão alta. C) Essa definição exclui a classe de dispositivos chamados máquinas de deslocamento positivo. Nesses dispositivos, há limites móveis que forçam o fluido a se mover ou são forçados a se mover pelo fluido. D) Essa definição exclui a classe de dispositivos chamados motores elétricos. Tais máquinas hidráulicas são responsáveis por receber a energia mecânica produzida por dispositivos, como as turbinas eólicas. E) Essa definição exclui a classe de dispositivos chamados máquinas de deslocamento negativo. Nesses dispositivos, há limites móveis que forçam o fluido a se mover ou são forçados a se mover pelo fluido. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em JavaScript |
Analise o seguinte código JavaScriptvar a = new Array(); var b = new Array(); a[1] = 3; b[2] = 5; a = b; Quais valores estão contidos em a[1] e a[2] depois da execução deste código? A) a[1] é 3 e a[2] é 5. B) a[1] é indefinido e a[2] é 5. C) ambos a[1] e a[2] são indefinidos. D) A execução deste código provoca um erro. Verificar Resposta Estudar Cards Todas as Questões |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
PHP - Programação Orientada a Objetos em PHP - Como passar um objeto de uma classe para uma função PHP GNU Octave - Como calcular a derivada de uma função usando a função diff() do GNU Octave - Regra do Tombo (ou Regra da Potência) |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |