terça-feira, 10 de abril de 2012

PMD

Ao buscar uma ferramenta para revisar e melhorar meus códigos me deparei com algumas opções, e uma das que me chamou a atenção foi o  PMD (Programming Mistake Detector) pela facilidade da instalação e a simplicidade de executar a verificação do código fonte.
A funcionalidade do PMD é procurar e avisar sobre possíveis e potenciais problemas como por exemplo:

Possíveis erros - blocos try/catch/finally vazios.
Código morto - não utilizadas variáveis ​​locais, parâmetros e métodos privados.
Código Suboptimal - Utilização String / StringBuffer inadequadamente.
Expressões muito complicadaa - if usado desnecessariamente , loops  for que podem ser trocados por loops while.
Duplicação de código - o código copiado / colado pode também gerar bugs  copiado / colado

Para a instalação do PMD como plugin no Eclipse segue um link com o passo a passo :

Assim como a instalação, a utilização do PMD também é simples:
  • Selecione a Classe e clique com o botão direito  -> PMD -> Check Code With PMD



  • Como vemos na imagem, a guia Violations Overview, mostrou varias ocorrências, existe um aviso para a linha 21, está dizendo que a variável de referência id é um nome curto.



E você usa PMD ou outro tipo de plugin/ferramenta para verificação de qualidade do seu código? 
Deixe seu comentário!

sexta-feira, 9 de março de 2012

Usando final


Normalmente as linguagens de programação nos dizem que constantes não podem ser alteradas,na linguagem Java existe a palavra-chave  final para especificar constantes. 

static final int CONSTANTE = 10

//final em variáveis
class A{
 private final int teste = 10;
 public void foo(){
  teste++;// Não é permitido... 
 }  
} 
Qualquer código que tente modificar essa variável não ira compilar, ou seja, uma variável cujo conteúdo não pode ser alterado durante a execução do programa.
Já no caso dos métodos marcados como final não podem ser sobrescritos e nas classes quando marcada como final temos que pensar diferente, estamos marcando a referência ao objeto, isso quer dizer que somente ela não poderá ser alterada as suas propriedades do objeto pode sofrer alteração, claro se não estiverem sendo marcadas também como final.

//final em métodos 
class A{
  final void metedo(){}  
}
  
class B extends A{  
  //o metodo da class A nao eh herdado  pela class B  
}

//final em classes
class final A{}
// Isso não é permitido  
class B extends A{}

segunda-feira, 5 de março de 2012

Técnica Pomodoro




A Técnica Pomodoro é um metodo de gerenciamento do tempo de desenvolvimento em geral (estudo/trabalho) para o aumento da produtividade, foi criado por Francesco Cirillo no final dos anos 1980,
a técnica se baseia na divisão de tarefas em periodos de 25 minutos chamados de "pomodoros" por Francesco, com a ideia de pausas frequentes que podem aumentar a agilidade na hora do desenvolvimento
das tarefas.

São cinco os passos básicos para implementar a técnica:
1- Escolher a tarefa a ser executada
2- Ajustar o pomodoro (alarme) para 25 minutos
3- Trabalhar na tarefa até que o alarme toque; registrar com um "x"
4- Fazer uma pausa curta (3 a 5 minutos)
5- A cada quatro "pomodoros" fazer uma pausa mais longa (15-30 minutos)


Aplicativo baseado na Técnica Pomodoro:
PomodoroTimer: timer para ajudar na contagem tempo das tarefas [pomodorotimer].

O site oficial com mais detalhes e com um e-book sobre essa técnica que pode ser baixado no site The Pomodoro Technique.

terça-feira, 13 de dezembro de 2011

Projeto Euler [Problema 3]

Solucionando o Problema 3 do Projeto Euler
Descrição do Problema: 
Find the largest prime factor of a composite number.
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?


Código:
package br.com.projetoeuler.problema3;

/**
 * Problema: Find the largest prime factor of a composite number.
 * @author Lucas Frizzo
 * lucas-frizzo.blogspot.com
 */
public class Problema3 {
 
 public int fatorPrimo(long num) {
  long aux = num;
  
  for (int i = 1; i <= num; i++) {
   int primo = ehPrimo(i);
      
   if (primo != 0) {
    System.out.println("primo: "+primo);
    
    while(aux%primo == 0){
     long divisao = aux/primo;
     System.out.println("divisao:"+divisao);
     
     if (divisao != 1) {
      aux = divisao;
     }else{
      return primo;
     }
    }
   }   
  }
  return 0;
 }
 
 public int ehPrimo(int num) {
  int primo = num;
  int cont = 0;
  for (int i = 1; i <= num; i++) {
   if (primo%i == 0) {
    cont ++;
   }   
  }
  if (cont==2) {
   return primo;
  }
  return 0;
  
 }
}

package br.com.projetoeuler.problema3;

import java.math.BigInteger;

/**
 * Problema: Find the largest prime factor of a composite number.
 * @author Lucas Frizzo
 * lucas-frizzo.blogspot.com
 */
public class TestProblema3 {
 
 public static void main(String[] args) {
  Problema3 problema3 = new Problema3();
  final long num = 600851475143L;
  //final long num = 13195;
  
  System.out.println("O maior Fator Primo de "+num+" é "+problema3.fatorPrimo(num)); 
 }

}


Resolução: O maior Fator Primo de 600851475143 é 6857




sexta-feira, 2 de dezembro de 2011

Projeto Euler [Problema 2]

Solucionando o Problema 1 do Projeto Euler
Descrição do Problema:
 Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

Código:

package br.com.projetoeuler.problema2;
/**
 * Problema:
 * Each new term in the Fibonacci sequence is generated by adding the previous two terms. 
 * By starting with 1 and 2, the first 10 terms will be:
 * 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
 * By considering the terms in the Fibonacci sequence whose values do not exceed four million, 
 * find the sum of the even-valued terms.
 * 
 * @author Lucas Frizzo
 * lucas-frizzo.blogspot.com
 */
public class Problema2 {
 private int numero;
 
 public int getNumero() {
  return numero;
 }

 public void setNumero(int numero) {
  this.numero = numero;
 }
 
 public int somaTermos(Problema2 problema2){
  int x=0;  
     int y=1;  
     int b = 1;
     int soma = 0;
       
     for(int i=0;iproblema2.getNumero()){ 
          System.out.println("soma:"+soma);  
          break;
         }  
     }return soma;
 }
}

package br.com.projetoeuler.problema2;

public class TesteProblema2 {
 public static void main(String[] args) {
  Problema2 problema2 = new Problema2();
  problema2.setNumero(4000000);
  problema2.somaTermos(problema2);
  
 }
}

terça-feira, 29 de novembro de 2011

Projeto Euler [Problema 1]

Solucionando o Problema 1 do Projeto Euler
Descrição do Problema: If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.


Código:
package br.com.projetoeuler.problema1;
/**
 * Problema1
 *  
 * @author Lucas Frizzo
 * lucas-frizzo.blogspot.com
 */
public class Problema1 {
 private int numero; 
 
 public int getNumero() {
  return numero;
 }
 
 public void setNumero(int numero) {
  this.numero = numero;
 }
 
 public int somaDosMultiplos(Problema1 problema1){
  int soma = 0;
  int numero = problema1.getNumero();
  
  for (int i = 1; i < numero; i++) {
   if (i % 3 == 0 || i % 5 == 0) {
    soma = soma + i;
   }
  }
  return soma;
 }

}

package br.com.projetoeuler.problema1;

public class TesteProblema1 {
 public static void main(String[] args) {
  Problema1 problema1 = new Problema1();
  problema1.setNumero(1000);
  
  System.out.println("Soma de todos os multiplos de 3 e 5 menores que " +
    ""+problema1.getNumero()+" = "+problema1.somaDosMultiplos(problema1));
 }
}


Resposta:
Soma de todos os multiplos de 3 e 5 menores que 1000 = 233168



quinta-feira, 24 de novembro de 2011

Labeled Loops (Loops Rotulados)

O conceito de Labeled Loop é bem simples, você concede um rótulo(nome) para um loop conforme o exemplo abaixo  o nome foi dado ao primeiro loop(inicio:) e precisar sair do loop por algum motivo você faz a chamada do break (break label)



package fj11;
/**
 * 
 * @author Lucas Frizzo
 * lucas-frizzo.blogspot.com
 */
public class LabeledLoops {
 public static void main(String [] args){  
        int total;  
        boolean erro = false;  
        inicio:  
        if(!erro)  
        for(int i=0;i<10;i++){  
            for(int j=0;j<10;j++){  
                for(int k=0;k<10;k++){  
                    for(int l=0;l<10;l++){  
                        for(int m=0;m<10;m++){  
                            total = (i*10000 + j*1000 +k*100 + l*10 + m);  
                            System.out.println("agora estamos tratando do : " + total);  
                            if(total == 666) {  
                                erro = true;  
                                break inicio;  
                            }  
                        }  
                    }  
                }  
            }  
        }  
    }
}