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;  
                            }  
                        }  
                    }  
                }  
            }  
        }  
    }
}

quarta-feira, 23 de novembro de 2011

Historia do JAVA

Para quem não conhece como surgiu a linguagem de programação Java a apostila da Caelum descreve como surgiu ... e é um ótimo material para quem esta querendo aprender a desenvolver...

" ... A Sun criou um time (conhecido como Green Team) para desenvolver inovações tecnológicas em
1992. Esse time foi liderado por James Gosling, considerado o pai do Java. O time voltou com a
idéia de criar um interpretador (já era uma máquina virtual, veremos o que é isso mais a frente) para
pequenos dispositivos, facilitando a reescrita de software para aparelhos eletrônicos, como vídeo
cassete, televisão e aparelhos de TV a cabo.
A idéia não deu certo. Tentaram fechar diversos contratos com grandes fabricantes de eletrônicos,
como Panasonic, mas não houve êxito devido ao conflito de interesses e custos. Hoje, sabemos
que o Java domina o mercado de aplicações para celulares com mais de 2.5 bilhões de dispositivos
compatíveis, porém em 1994 ainda era muito cedo para isso.
Com o advento da web, a Sun percebeu que poderia utilizar a idéia criada em 1992 para rodar
pequenas aplicações dentro do browser. A semelhança era que na internet havia uma grande
quantidade de sistemas operacionais e browsers, e com isso seria grande vantagem poder pro-
gramar numa única linguagem, independente da plataforma. Foi aí que o Java 1.0 foi lançado:
focado em transformar o browser de apenas um cliente fino (thin client ou terminal burro) para uma
aplicação que possa também realizar operações, não apenas renderizar html.
Atualmente os applets realmente não são o foco da Sun. É curioso notar que a tecnologia Java
nasceu com um objetivo em mente, foi lançado com outro, mas, no final, decolou mesmo no desen-
volvimento de aplicações do lado do servidor. Sorte?
Você pode ler a história da linguagem Java em: http://www.java.com/en/javahistory/
E um vídeo interessante: http://tinyurl.com/histjava
Em 2009 a Oracle comprou a Sun, fortalecendo a marca. A Oracle sempre foi, junto com a IBM,
uma das empresas que mais investiram e fizeram negócios através do uso da plataforma Java. ..."


Material do Treinamento Java e Orientação a Objetos (caelum-java-objetos-fj11) , Caelum.
download: http://www.caelum.com.br/download/caelum-java-objetos-fj11.pdf



quinta-feira, 10 de novembro de 2011

Sombreamento de Variáveis

Enquanto estudava ... gostei de um tópico interessante sobre sombreamento de variáveis (redeclarar uma variável que já tinha sido declarada anteriormente em algum outro local), que ao meu ver muitas pessoas como eu ficam as vezes na duvida se realmente o resultado da resposta estava certo...pois parece estarmos usando a variável oculta e no entanto estamos usando a variável de sombreamento.


Segue abaixo exemplos:


public class Foo {
 int size = 7;
 void changeIt(int size){
  size = size + 200;
  System.out.println("Tamanho no changeIt é "+size);
 }
 public static void main(String[] args) {
  Foo foo = new Foo();
  System.out.println("Valor de size "+foo.size);
  foo.changeIt(foo.size);
  System.out.println("Valor de size depois do changeIt "+foo.size);
 }
}

Resultado:
Valor de size 7
Tamanho no changeIt é 207
Valor de size depois do changeIt 7


public class Bar {
 int barNum = 28;
}

public class Foo2 {
 Bar myBar = new Bar(); 
 
 void changeIt(Bar myBar){
  myBar.barNum = 99;
  System.out.println("myBar no changeIt é "+myBar.barNum);
  myBar = new Bar();
  myBar.barNum = 400;
  System.out.println("myBar no changeIt é agora "+myBar.barNum);
 }
 public static void main(String[] args) {
  Foo2 foo2 = new Foo2();
  System.out.println("foo2.myBar.barNum no changeIt é "+foo2.myBar.barNum);
  foo2.changeIt(foo2.myBar);
  System.out.println("myBar.barNum depois do changeIt é "+foo2.myBar.barNum);

 }
}


Resultado:
foo2.myBar.barNum no changeIt é 28
myBar no changeIt é 99
myBar no changeIt é agora 400
myBar.barNum depois do changeIt é 99




segunda-feira, 7 de novembro de 2011

Codility

Exemplo de um Problema no Codility:
Dado um vetor de N posições,  retornar o tamanho do vetor considerando as seguintes condições:
a posição de N[0] = x é a primeira posição e a ultima posição considerar N[?] = -1.
Exemplo:
Dado o vetor a seguir N[1,4,-1,3,2] retornar o tamanho do vetor.
N[0] =  1
N[1] =  4
N[2] =  2
N[3] = -1
Então o tamanho desse vetor é 4.


public class Problema {
 /**
  * @author Lucas Frizzo
  * http://lucas-frizzo.blogspot.com/
  *
  *
  * @param A
  * @return
  */
 public int listLength ( int[] A ) {
      
  int tam =A.length;
  int[]B = new int[tam];
  B[0] = A[0];
  int aux = A[0];
  
  int cont = 1;
  int tamanho = 0;
  for (int i = 0; i < A.length; i++) {
    
    B[i+1] = A[aux];
    System.out.println("B["+i+"]:"+B[i]);
    
     aux = A[aux];
     cont ++;
     if(aux==-1){
       tamanho = cont;
      break;
     }
  }
  return tamanho;  
   }
}