E-Book 650 Dicas e Truques de Python - PDF com 1.200 páginas
Você está aqui: Java ::: Estruturas de Dados ::: Árvore Binária e Árvore Binária de Busca

Estruturas de Dados em Java - Como retornar o nó com menor valor em uma árvore binária de busca em Java

Quantidade de visualizações: 3066 vezes
Em exemplos dessa seção nós vimos como criar árvores binárias e árvores binárias de busca em Java e como pesquisar ou fazer a sua travessia, visitando cada um dos nós. Nesta dica mostrarei como obter o nó com o menor valor em uma árvore binária. O truque aqui é descer o lado esquerdo da árvore até o último nó. Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

// método que permite retornar o menor nó de uma árvore
// binária de busca
public No retornarMenorElemento(){
  // chama a versão recursiva do método
  return retornarMenorElemento(raiz);
}
  
public No retornarMenorElemento(No no){
  if((no == null) || (no.getEsquerdo() == null)){
    return no; // ponto de parada
  }
  else{ // vamos continuar descendo do lado esquerdo
    return retornarMenorElemento(no.getEsquerdo());
  }
}

Este método faz parte da classe ArvoreBinariaBusca.java. Veja agora como chamá-lo a partir da classe principal, ou seja, a classe de teste:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package arvore_binaria;

import java.util.Scanner;

public class ArvoreBinariaTeste {
  public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);  
       
    // vamos criar um novo objeto da classe ArvoreBinariaBusca
    ArvoreBinariaBusca arvore = new ArvoreBinariaBusca();
    
    // vamos inserir 5 valores na árvore
    for(int i = 0; i < 5; i++){
      System.out.print("Informe um valor inteiro: ");
      int valor = Integer.parseInt(entrada.nextLine());
       
      // vamos inserir o nó e verificar o sucesso da operação
      if(!arvore.inserir(valor)){
        System.out.println("Não foi possível inserir." +
          " Um elemento já contém este valor.");  
      }
    }
     
    // vamos o menor elemento na árvore binária de busca
    System.out.println("\nO menor nó é: " + 
      arvore.retornarMenorElemento().getValor());
     
    System.out.println("\n");
  }
}

Ao executar este código teremos o seguinte resultado:

Informe um valor inteiro: 5
Informe um valor inteiro: 12
Informe um valor inteiro: 87
Informe um valor inteiro: 1
Informe um valor inteiro: 3

O menor nó é: 1


Link para compartilhar na Internet ou com seus amigos:

Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes)

Exercícios Resolvidos de Java - Como resolver o problema da Subsequência de Soma Máxima em Java usando o Algorítmo de Kadane

Quantidade de visualizações: 395 vezes
Pergunta/Tarefa:

O problema do Subvetor Contíguo de Soma Máxima, ou Subarray ou Subsequência de Soma Máxima é um dos algorítmos mais populares na programação dinâmica. Este problema envolve encontrar um subvetor, ou seja, um sub-array contíguo de maior soma possível. Por contíguo entendemos que os elementos da subsequência deverão estar consecutivos no vetor original.

O Algorítmo de Kadane, inventado por Jay Kadane em 1977, é um dos favoritos para a resolução deste problema, e deverá ser aplicado na resolução deste exercício.

Dado o vetor [-2, 1, -3, 4, -1, 2, 1, -5, 4], encontre a soma máxima da subsequência contígua. Não é exigido mostrar os elementos da sub-sequência, apenas o valor da soma máxima.

Sua saída deverá ser parecida com:

A soma maxima é: 6
Resposta/Solução:

Veja a resolução comentada deste exercício usando Java:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

public class Estudos {
  public static void main(String[] args) {
    // vamos criar um array com 9 elementos
    int valores[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
    
    // agora usamos o algoritmo de Kadane para encontrar
    // a maior soma consecutiva
    int soma_maxima = kadane(valores);
    System.out.println("A soma maxima é: " + soma_maxima);
  }
  
  // método que recebe um array e usa o algoritmo de Kadane
  // para retornar a maior soma consecutiva
  public static int kadane(int vetor[]){
    // ajustamos max_atual para 0 e max_total para -1 
    int max_atual = 0, max_total = -1;
    
    // um laço for que percorre todos os elementos do
    // vetor, do primeiro até o último
    for(int i = 0; i < vetor.length; i++){
      // max_atual recebe ele mesmo mais o valor
      // do elemento no índice i
      max_atual = max_atual + vetor[i];
      
      // se max_atual for negativo nós o ajustamos
      // para zero novamente
      if(max_atual < 0){
        max_atual = 0;
      }
      
      // se max_atual for maior que max_total então
      // max_total recebe o valor de max_atual
      if(max_atual > max_total){
        max_total = max_atual;
      }
    }
    
    // e retornamos a soma máxima
    return max_total;
  }
}



Java ::: Pacote java.lang ::: String

Java Avançado - Como usar o método getBytes() da classe String para obter uma sequência de valores do tipo byte

Quantidade de visualizações: 8391 vezes
Em algumas situações gostaríamos de obter os caracteres de uma string como uma representação de inteiros em bytes. Para isso podemos usar o método getBytes(). Veja sua assinatura:

public byte[] getBytes()
Este método é chamado em uma instância da classe String e seu retorno é um array (matriz) do tipo byte. Veja um exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class Main {
  public static void main(String[] args) {
    // vamos declarar um objeto da classe String
    String palavra = "Arquivo";
	
    // vamos obter os bytes usados na palavra anterior
    byte bytes[] = palavra.getBytes();

    // vamos percorrer a matriz de bytes e mostrá-los individualmente
    for(int i = 0; i < bytes.length; i++){
       System.out.print(bytes[i] + "   ");
    }
  }
}

Ao executarmos este código teremos o seguinte resultado:

65 114 113 117 105 118 111

De fato, o valor 65 é o código inteiro para o caractere "A". É importante observar que alguns caracteres não cabem em um byte (que possui o valor 127 como maior valor inteiro). Isso resulta na conversão para valores negativos.

Há outras duas sobrecargas do método getBytes() da classe String. A primeira:

byte[] getBytes(Charset charset)
nos permite especificar o conjunto de caracteres a ser usado na conversão como um objeto da classe Charset. A segunda:

byte[] getBytes(String charsetName)
nos permite especificar o nome do conjunto de caracteres como uma String.


Java ::: Dicas & Truques ::: Internacionalização e Localização (Internationalization, i18n, Localization, l10n)

Como usar os construtores da classe Locale em seus programas Java

Quantidade de visualizações: 9515 vezes
A classe Locale, na versão 1.6 do Java, apresenta 3 construtores. Aprender a usá-los corretamente trará muito mais flexibilidade aos seus códigos.

Veja o primeiro construtor:

Locale(String language)


Este construtor requer como argumento um código de língua válido, ou seja, um dos códigos de duas letras minúsculas definidos pelo ISO-639. Assim, "pt" é para o português, "en" para o inglês, e assim por diante. Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

import java.util.*;
import java.text.*;

public class Estudos{ 
  public static void main(String args[]){ 
    // criamos um locale para o Brasil
    Locale localeBR = new Locale("pt");
    
    // vamos obter a data e hora atual
    Calendar agora = Calendar.getInstance();

    // vamos formatar de acordo com o formato de
    // data longa no português brasileiro
    DateFormat df = DateFormat.getDateInstance(
      DateFormat.FULL, localeBR);

    // vamos exibir o resultado
    System.out.println(df.format(agora.getTime())); 
  } 
}

Veja o segundo construtor:

Locale(String language, String country)


Este construtor requer a língua (language) e o país (country). O argumento country deve ser um código de país válido, ou seja, um dos códigos de duas letras maiúsculas definidos pelo ISO-3166. Assim, "BR" é para o Brasil, "PT" para Portugal, "US" para United States, e assim por diante. Este construtor que aceita o código da língua e o código do país é o mais frequentemente usado, uma vez que Brasil e Portugal possuem o mesmo código de língua, mas códigos de paises diferentes. Além disso, há países cujas regiões falam línguas diferentes, por exemplo, o Canadá. Veja um exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

import java.util.*;
import java.text.*;

public class Estudos{ 
  public static void main(String args[]){ 
    // criamos um locale para o Brasil
    Locale localeBR = new Locale("pt", "BR");
    
    // vamos obter a data e hora atual
    Calendar agora = Calendar.getInstance();

    // vamos formatar de acordo com o formato de
    // data longa no português brasileiro
    DateFormat df = DateFormat.getDateInstance(
      DateFormat.FULL, localeBR);

    // vamos exibir o resultado
    System.out.println(df.format(agora.getTime())); 
  } 
}

Vejamos agora o terceiro construtor:

Locale(String language, String country, String variant)


Este construtor requer a língua, o país e a variante de localização. O argumento variante é um código específico relacionado ao fornecedor do sistema ou browser. Por exemplo: WIN para Windows, MAC para Macintosh, etc. Este último construtor não é usado comumente, razão pela qual o exemplo de seu uso fica pendente até a próxima revisão desta dica.


Java ::: Dicas & Truques ::: Formulários e Janelas

Java Swing - Como centralizar a janela JFrame ao abrir a aplicação Java Swing

Quantidade de visualizações: 20235 vezes
Em várias ocasiões nós gostaríamos de centralizar a janela JFrame, ou seja, a janela principal de nossa aplicação Java Swing ao abrir o programa. Para isso nós podemos usar o método setLocationRelativeTo() e fornecer a ele o valor null.

Veja como isso pode ser feito no código abaixo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

import java.awt.*;
import javax.swing.*;
 
public class Estudos extends JFrame{
  public Estudos() {
    super("Uso da classe JFrame");
     
    setSize(350, 250);
    setVisible(true);
 
    // centraliza a janela    
    setLocationRelativeTo(null);
  }
   
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}



Java ::: Dicas & Truques ::: Threads

Como usar uma thread Java para animar o título de uma janela JFrame do Java Swing

Quantidade de visualizações: 11354 vezes
Nesta dica mostro como podemos usar uma thread para substituir um timer em uma aplicação Swing. Ao executar este código você verá que o texto da barra de títulos da aplicação pisca continuamente enquanto o aplicativo estiver sendo executado.

Veja a listagem para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

import java.awt.*;
import javax.swing.*;

public class Estudos extends JFrame{
  public Estudos() {
    super("Uso de threads em aplicações Swing");
    
    // vamos criar a thread que fará o título da janela
    // piscar continuamente
    // vamos criar duas threads
    MinhaThread t1 = new MinhaThread(this);
    t1.start();

    setSize(350, 250);
    setVisible(true);
  }
  
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

// classe que usaremos como thread
class MinhaThread extends Thread{
  private JFrame janela;
  private String titulo;  

  public MinhaThread(JFrame janela){
    this.janela = janela;
    this.titulo = janela.getTitle();
  }   

  public void run(){
    try{
      while(true){
        if(janela.getTitle().equals(""))
          janela.setTitle(titulo);
        else
          janela.setTitle("");

        Thread.sleep(300);
      }
    }
    catch(InterruptedException ex){
      // precisa fazer nada aqui
    }
  }
}

Um detalhe interessante é que, ao ser colocada para dormir, a thread usada no exemplo permite que as demais threads da aplicação continuem suas execuções normalmente. Isso permite que a janela seja movida, redimensionada, minimizada, etc. Lembre-se sempre de usar o método Thread.yield() caso a thread criada estiver executando alguma ação demorada. Isso evitará que a janela do programa pareça congelada.


Desafios, Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

Quem Somos

Osmar J. Silva
Programador Freelancer
WhatsApp +55 (062) 98553-6711

Goiânia-GO
Programador Freelancer - Full Stack Developer, Professional Java Developer, PHP, C/C++, Python Programmer, wxWidgets Professional C++ Programmer, Freelance Programmer. Formado em Ciência da Computação pela UNIP (Universidade Paulista Campus Goiânia) e cursando Engenharia Civil pela PUC-Goiás. Possuo conhecimentos avançados de Java, Python, JavaScript, C, C++, PHP, C#, VB.NET, Delphi, Android, Perl, e várias tecnologias que envolvem o desenvolvimento web, desktop, front-end e back-end. Atuo há mais de 20 anos como programador freelancer, atendendo clientes no Brasil, Portugal, Argentina e vários outros paises.
Entre em contato comigo para, juntos, vermos em que posso contribuir para resolver ou agilizar o desenvolvimento de seus códigos.
José de Angelis
Programador Freelancer
WhatsApp +55 (062) 98243-1195

Goiânia-GO
Programador Freelancer - Formado em Sistemas de Informação pela Faculdade Delta, Pós graduado em Engenharia de Software (PUC MINAS), Pós graduado Marketing Digital (IGTI) com ênfase em Growth Hacking. Mais de 15 anos de experiência em programação Web. Marketing Digital focado em desempenho, desenvolvimento de estratégia competitiva, analise de concorrência, SEO, webvitals, e Adwords, Métricas de retorno. Especialista Google Certificado desde 2011 Possui domínio nas linguagens PHP, C#, JavaScript, MySQL e frameworks Laravel, jQuery, flutter. Atualmente aluno de mestrado em Ciência da Computação (UFG)
Não basta ter um site. É necessário ter um site que é localizado e converte usuários em clientes. Se sua página não faz isso, Fale comigo e vamos fazer uma analise e conseguir resultados mais satisfatórios..

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware 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 funcionalidadesControle 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


© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 85 usuários muito felizes estudando em nosso site.