Posts tagged Java
Todos os atalhos do eclipse
2Boa noite, hoje o post vai ser bem curto, mas eu julgo ser bem interessante.
Como já disse por aqui estou começando a trabalhar com o desenvolvimento para o Java e utilizando a ferramenta Eclipse para o desenvolvimento.
Uma das grandes dificuldades quando se começa a desenvolver com uma ferramenta nova são os atalhos, para isso o eclipse tem um atalho muito bacana, o atalho para todos os atalhos possíveis.
Para isso basta pressionar:
Ctrl + Shift + L
Sistema de Votação com o J2ME – Java para dispositivos móveis
1Boa noite computêros…
Dando continuidade a nossas aventuras pelo J2ME, lembram da Introdução?
Sabem que eu tenho uma certa mania de postar provas e exercícios aqui no blog… se procurarem vão encontrar algumas espalhadas por aí…
Que tal mais uma???
Monte um programa em J2ME que efetue a votação de filmes considerando os seguintes critérios:
- Para cada filme será exibido o encarte. Serão 5 filmes para a votação.
- Cada filme deverá receber notas de 0 a 5.
- A votação só encerra quando a última pessoa efetuar a votação. O qual deverá sempre ser perguntado após a votação.
- Ao final deverá exibir a classificação em ordem de crescente e o encarte do filme(obs: a referência será a média das notas votadas).
Convertendo Números Decimais para Binários em Java
2Acho que a maioria dos usuários que acessam o blog já leram a página de About… e se repararam bem a idéia do blog é simples, ajudar, mais nada, só isso, mas infelizmente vemos algumas coisas no caminho que chegam até a desanimar, na informática existem algumas pessoas (porque não podemos chamá-las de profissionais) que se acham melhores que os outros e superiores em tudo que fazem, mas só fica por aí…
Hoje aconteceu uma cena no mínimo hilária na sala de aula, que não convém ao caso falar, mas ela me motivou falar um pouquinho antes de postar a função…
- Modo Iterativo
public static String cBinario(int n){
ArrayList resto = new ArrayList();
while (n != 0){
resto.add((n%2)+"");
n = (int)(n/2);
}
String res = "";
for (int i=resto.size()-1;i>=0;i--){
res += resto.get(i);
}
return res;
}
- Modo Recursivo
public static String cBinarioRec(int n){
String ret="";
if (n > 0){
ret += cBinarioRec(n/2)+n%2;
}
return ret;
}
Exemplo de Utilização:
public static void main (String args[]){
int num = 69;
System.out.println(cBinario(num));
System.out.println(cBinarioRec(num));
}
Caso tenham alguma dúvida comentem…
Introdução ao J2ME – Java para dispositivos móveis
2Bom dia computêros… que tal falarmos de aplicações java para celulares/palms???
- O que é o J2ME:
J2ME é uma plataforma, grupo de tecnologias e especificações que permitem o desenvolvimento para dispositivos móveis limitados. Podemos considerar que J2ME está dividida em três elementos: configurações, perfis e pacotes opcionais.
- As configurações (configurations em inglês) são especificações que determinam uma “máquina virtual” a ser utilizada e um conjunto básico de APIs que poderão ser utilizadas para programar em certo tipo de dispositivo.
- Um perfil (profile em inglês) será definido baseado em alguma configuração, ou seja, um perfil poderá ser considerado uma extensão da configuração, mas adiciona APIs específicas para fornecer um ambiente completo que permita construir aplicativos.
- Um pacote opcional (optional package em inglês) fornece funcionalidade que não foi descrita em determinada configuração e perfil. Por exemplo, um pacote opcional poderia ser utilizado para programar com dispositivos bluetooth, para os quais não existe suporte na configuração e perfil utilizados.
- A estrutura de aplicativos J2ME
Um aplicativo para dispositivos MID (Mobile Information Device), chamado comumente de MIDlet, será construído declarando uma classe derivada de MIDlet (classe da biblioteca do J2ME) que implementará algumas interfaces, dependendo dos critérios de atenção a eventos do programa.
Vários aplicativos poderão ser empacotados dentro de um arquivo .jar e será criado, também, um arquivo .jad como uma descrição do pacote de aplicativos (jad: Java Application Descriptor).
- Exemplo de um arquivo .jad
MIDlet-1: Ola, /um.png, Ola
MIDlet-2: Hola, /dois.png, Hola
MIDlet-3: Hello, /tres.png, Hello
MIDlet-Jar-Size: 5431
MIDlet-Jar-URL: Tres aplicativos.jar
MIDlet-Name: Tres aplicativos
MIDlet-Vendor: Unknown
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
- Exemplo de um arquivo .jar
META-INF
MANIFEST.MF
Ola.class
Hello.class
Hola.class
um.png
dois.png
tres.png
- Criando um Hello World com J2ME
Para isso precisaremos que a máquina tenha o JDK instalado e configurado corretamente. Caso não tenha o JDK clique aqui.
Precisaremos também do Wireless Tool Kit programa para a compilação e execução das Classes do J2ME.
E se possível de um compilador java, só pra facilitar a digitação, já que não compilaremos com ele…
A instalação do WTK (Wireless Tool Kit) é bem fácil no Windows NNF(Next Next Finish), agora no linux já complica um pouco mais… vou deixar um post específico para ela e depois linko com esse…
Vamos ao código do nosso querido hello world (lembra do primeiro post aqui do blog)
//Hello.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Hello extends MIDlet implements CommandListener {
private Command exitCommand; //comando acionado por teclas do dispositivo
private Display display; //manipulador da tela do dispositivo
private TextBox tbMain; //uma tela que permite mostrar e editar informações
public Hello() {
display = Display.getDisplay(this);
exitCommand = new Command("Exit", Command.SCREEN, 2);
tbMain = new TextBox("Meu primeiro app","Olá, mundo!", 150, 0);
tbMain.addCommand(exitCommand);
tbMain.setCommandListener(this);
}
public void startApp() {
display.setCurrent(tbMain);
}
public void pauseApp() {
// método abstrato da classe MIDlet que
// deve ser implementado
}
public void destroyApp(boolean unconditional) {
//método abstrato da classe MIDlet que deve
//ser implementado
}
public void commandAction(Command c, Displayable s) {
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
}
} //fim da classe
Agora que temos o código, vamos abrir o WTK (Wireless Tool Kit) e clicar no Botão New Project…
O nome do projeto você escolhe, mas o MIDlet Class Name você coloca o mesmo nome da classe, que no nosso caso é Hello, depois de preencher os dois campos clique em “Create Project”
A próxima tela é a de configurações… de início não interessa pra nós… escolha Custom e deixe como esta:

Com o projeto já criado e configurado, devemos copiar o nosso “Hello World” para a pasta src, que fica dentro da pasta do projeto…
Trabalhando no Windows a pasta onde os projetos podem ser criados são duas, dependendo da configuração feita…
C:Documents and Settingsseu usuario do windowsj2mewtk2.5.2apps
C:WTK2.5.2_01apps
É mais provável que seja a primeira…
Com o arquivo copiado podemos compilar com o nosso querido WTK (Wireless Tool Kit), através do botão Build
Se receber a mensagem “Build omplete” já podemos executar o arquivo, caso tenha recebido algum erro, comenta aí que tentamos ajudar…
Para executar o projeto adivinha onde temos que clicar… isso mesmo em “Run”
Voilà… o projeto está rodando certinho!!! lembrando que como se trata de aplicativos móveis num adianta nada ficar clicando fora do “celular”…

Ah, eu estava esquecendo de uma coisa, se você quiser testar o aplicativo no seu celular ele precisa rodar java (é óbvio) e para isso você deverá copiar o arquivo .jar para ele…
Com o projeto aberto vá no menu:
Project/Package/Create Package
Ele irá te informar onde o arquivo foi criado, mas a pasta padrão é a bin dentro da pasta do projeto.
É isso aí computêros, qualquer dúvida, comenta ae!
Para maiores informações eu recomendo que você leia a documentação oficial do J2ME.
StringBuilder x StringBuffer
4String, StringBuilder e StringBuffer
Salve computêros, depois de muita espera de meu amigo Lucas, pelo meu post sobre Strings, cá estou eu para falar um pouco sobre 3 tipos de Strings e como usa-las.Primeiramente temos nossa velha e boa String, em Java as Strings são objetos, que podem ser criadas de diversas formas,por exemplo:
String s = new String ();
s = "String";
String s = new String ("String");
String s = "String";
Os objetos de tipo String podem parecer apenas objetos como outros qualquer, porém há uma diferença, muito significativa para as Strings, elas são imutáveis,isso mesmo meu caro imutáveis, ou seja o valor de uma String não podem ser modificado, apenas referenciado,seguimos um exemplo:
String s = "Comput";
s.concat("ero");
System.out.println("x = " + s); //resultado s = Comput
Agora eu peguei vocês neh?! Pois então, vocês esperavam que a saida nos trouxesse Computero, porém como já havia dito, as Strings são imutáveis,então o objeto referenciado por s não modificou seu valor.
Agora vejamos um outros exemplo:
String s = "Comput";
s = s.concat("ero");
System.out.println("x = " + x); //resultado x = Computero
Agora confudiu tudo neh?! Vamos lá, o que acontece agora é que ao dizer que s = s.concat(“ero”); um novo objeto Computero foi criado na memoria, concatenando o valor de s com o “ero”, e então atribuimos a variavel s o novo objeto criado.
Bom agora vamos pensar um pouquinho, já que foi criado um novo objeto com o valor “Computero”, vocês devem estar se perguntando o que é que acontece com aquele velho objeto “Comput”?
Existe um local da memoria chamado “String constant pool“, este é o lugar onde se encontra nosso velho valor “Comput”. “String constant pool” é um eficiente gerenciador de memoria em java.Basicamente todos os objetos são manejados na area HEAP da memoria, exceto Strings.Na maioria das aplicações, programadores usam o objeto String muitas vezes, e este objeto é frequentemente alterado ou ocupa muito espaço na memória.Então, ao invés de usarem a area HEAP da memória, criaram “String constant pool“. A vantagem de ter esta “String constant pool” é que ela não cria um objeto String se o mesmo já existir na “String constant pool“.
Exemplo:
String var1 = "Computero";
String var2 = "Computero";
Para os dois objetos, a JVM vai criar apenas um objeto na “String constant pool” e o segundo vai apenas referenciar.
Um grande problemas disso tudo, é que acabamos sempre com a memória cada vez maior, e varios objetos perdidos na memória.Para salvar este grande problema entre as Strings, foram criadas outras duas classes, a StringBuilder e a StringBuffer, veremos adiante a diferença entre elas.
Primeiramente a diferença entre a StringBuilder e a StringBuffer é que na StringBuffer os métodos são sincronizados, ou seja, é acessado apenas uma Thread por vez. A sincronização afeta diretamente o desempenho, portanto, a StringBuffer tende a ser mais lenta que a Builder.
Porque usar StringBuilder ou StringBuffer?
Estas classes são usadas normalmente quando precisamos manipular muitas strings, porém não podemos deixar objetos perdidos na memória, de forma que em alguns minutos ela estoura.
Um exemplo de StringBuilder, vamos lá:
StringBuilder sb = new StringBuilder();
sb.append("Comput");
sb.append("ero");
system.out.println("x = " + sb);//x = Computero
O que acontece é o seguinte, a StringBuilder ou StringBuffer vai operar sobre o valor do objeto que chamou o metodo append, coisa que a String não faz quando chamamos o metodo concat, vendo que ela necessida de um novo objeto para concatenar.
O mais maravilhoso desse metodo append é que ele vai aceitar concatenar o que você necessitar, seja ele um int, um char, um double ou até mesmo um float.
Vejamos alguns métodos destas maravilhosas classes:
Reverse() – imprime de forma contrária
Insert() – insere algo na posição especificada
Delete() – deleta algo na posição início e fim.
Mais alguns exemplos usando estes metodos :
//usando o metodo reverse da classe StringBuffer
public class Reverse {
public static void main(String args[]){
StringBuilder sb = new StringBuilder();
sb.append("Computero");//concatenando String
sb.append(2009);//concatenando int
sb.append('H');//concatenando char
System.out.println(sb);//imprimindo sb - Computero2009H
System.out.println(sb.reverse());//imprimindo de forma reversa sb - H9002oretupmoC
}
}
//exemplo usando alguns metodos da classe StringBuilder
public class Reverse {
public static void main(String[] args) {
StringBuilder sb= new StringBuilder("Computero");
/*metodo que remove pelo indice a partir do indice 6 (conta com ele) até o indice 9(não conta com ele)*/
sb.delete(6, 9);
/*imprimi Comput*/
System.out.println(sb);
/*concatena - a String portanto sb esta valendo Comput-*/
sb.append("-");
/*insere na posição 7 a palavra Jaqueline*/
sb.insert(7,"Jaqueline");
//imprimi Comput-Jaqueline
System.out.println(sb);
/*concatena -Bento a String portanto sb esta valendo Comput-Jaqueline-Bento*/
sb.append("-Bento");
/*imprimi Comput-Jaqueline-Bento*/
System.out.println(sb.toString());
}}/*a vantagem de usar StringBuilder ou StringBuffer é que nao tenho objetos perdidos na minha memória*/
Então é isso Computeros, espero ter ajudado em algo ou esclarecido alguma duvida.
Obrigada pelo espaço Lucas.
Boa tarde.
Oracle compra a Sun em negociação bilionária
0Boa tarde Computêros,
OK OK, BOMBA!!!!!!!!!!!!!!!!!!!!!!!!

Uma bomba foi lançada hoje, 20 de abril de 2009…
Foi anunciado no site da Oracle e no site da Sun que a Sun foi comprada por mais de US$ 7 bilhões, pelo acordo cada ação está avaliada em US$ 9,5. Há pouco tempo a IBM ofereceu cerca de US$ 9,4 por cada ação da Sun.
Agora vamos esperar por mais notícias…
Segundo Larry Ellison, CEO da Oracle, “A aquisição da Sun transforma a indústria de TI, combinando o melhor do software corporativo e sistemas computacionais de missão crítica. A Oracle será a única empresa capaz de desenvolver um sistema integrado — das aplicações ao disco – onde todas as peças trabalharão juntas, de modo que o cliente não precisará mais fazer essa integração. O cliente é beneficiado na medida que o custo de integração diminui e a performance, disponibilidade e segurança crescem.”
Na estratégia de longo prazo, há vantagens de mercado na compra de duas propriedades da Sun pela Oracle: Java e o Solaris. Java é uma das marcas mais reconhecidas da indústria de informática e uma das tecnologias mais difundidas, sendo o software mais importante que a Oracle já adquiriu. O Oracle Fusion Middleware, o negócio mais proeminente da Oracle, foi criado usando como plataform o Java. A Oracle pode agora garantir contínua inovação e investimento na tecnologia Java para o benefício dos clientes e da comunidade Java.
A nota divulgada pela empresa ainda posiciona a empresa diante do Linux e outras tecnologias abertas:
“O sistema operacional Solaris é a plataforma mais usada para o banco de dados Oracle, o maior negócio da Oracle. Com a aquisição da Sun, a Oracle pode melhorar seu banco de dados para os recursos únicos e de última geração do Solaris. A Oracle está comprometida como nunca com o Linux e outras plataformas abertas e continuará a apoiar e contribuir suas fortes parcerias comerciais.”
fonte: Linux Magazine
Utilização de Thread em Java com Socket e Criptografia
0Boa noite computeros, cá estou eu depois de chegar de mais uma prova (dessa vez eu fui bem, muito bem, 2 em dois pontos), o assunto: Socket, Thread e criptografia…
Tudo a ver né huahuahuahuha, o que importa é que o exercício foi bacana e eu achei de postar pra vocês aqui…
Agora vamos ao que interessa, os fontes…
/*
* ============================================================
* Lucas Felix de Sousa - 736627
* Avaliação Parcial de Técnicas de Programação II - A
* Universidade Cruzeiro do Sul
* http://blog.computero.com.br
* =============================================================
*
* Classe com implementação de Thread, comunicação client-server
* Utilização de Criptografia, Socket e Thread
*
* =============================================================
* */
import java.io.*;
import java.net.*;
import java.util.*;
public class ServerCrypt extends Thread{
private static Vector clientes;
private Socket conexao;
public ServerCrypt(Socket s){
conexao = s;
}
/*Método para criptografar um texto qualquer,
* passando como parâmetro a mensagem em string
* e a chave em inteiro
*/
public static String Crypt(String msg,int n){
String newMsg="";
/*for para deixar os caracteres ao contrario
* exemplo:
* aeiou - uoiea
*/
for (int i=msg.length()-1;i>=0;i--)
{
/*somar a quantidade de digitos (n) ao char*/
newMsg += "" + (char)(msg.charAt(i)+n);
}
//retornando a mensagem criptografada
return(newMsg);
}
/*Método para desciptografar a criptografia anterior
* passando como parâmetro a mensagem a ser descriptografada em String
* e a chave em inteiro
*/
public static String Descrypt(String msg,int n){
String newMsg="";
/*for para deixar os caracteres de volta ao normal
* exemplo:
* uoiea - aeiou
*/
for (int i=msg.length()-1;i>=0;i--)
{
/*subtrair a quantidade de digitos (n) ao char*/
newMsg += "" + (char)(msg.charAt(i)-n);
}
return newMsg;
}
public static void main(String args[]){
clientes = new Vector();
try{
ServerSocket s = new ServerSocket(6666);
while(true){
System.out.print("Esperando alguem se conectar...");
Socket conexao = s.accept();
System.out.println(" Conectou!");
Thread t = new ServerCrypt(conexao);
t.start();
}
}
catch(IOException e){
}
}
public void run(){
try{
//para receber os dados dos clientes
BufferedReader entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
//para enviar os dados para os clientes
PrintStream saida = new PrintStream(conexao.getOutputStream());
//texto padrão ao cliente se conectar
String texto = "
Cliente" + conexao.getInetAddress() + " - " + conexao.getInetAddress().getHostName() + " tenta se comunicar
";
System.out.println(texto + "
Pronto para o envio dos dados...
");
try{
while(true)
{
String strCliente[] = entrada.readLine().toString().split(";");
/*verifica se os dados enviados pelo cliente estão em 3 parâmetros
* opção - crypt ou descrypt (IgnoreCase)
* num - Um digito inteiro entre 0 e 9
* mensagem - uma string com QUALQUER texto, inclusive espaços
*/
if (strCliente.length != 3)
{
saida.println("Formato inválido. [OPCAO;NUM;MENSAGEM]");
}
else
{
try{
int num;
num = Integer.parseInt(strCliente[1]);
/*O número digitado é mudado de acordo com a tabela a seguir:
* num: 0 ou 1 --> A = B (soma 1)
* num: 2 ou 3 --> A = C (soma 2)
* num: 4 ou 5 --> A = D (soma 3)
* num: 6 ou 7 --> A = E (soma 4)
* num: 8 ou 9 --> A = F (soma 5)
*/
if ((num == 0) || (num==1)){
num = 1;
}
else if ((num == 2) || (num==3)){
num = 2;
}
else if ((num == 4) || (num==5)){
num = 3;
}
else if ((num == 6) || (num==7)){
num = 4;
}
else if ((num ==
|| (num==9)){
num = 2;
}
else{
saida.println("Formato do número inválido");
}
/*Verifico qual a opção desejada pelo cliente e devolvo a resposta*/
if (strCliente[0].equalsIgnoreCase("CRYPT")){
saida.println(
Crypt(
strCliente[2],
num
)
);
}
else if(strCliente[0].equalsIgnoreCase("DESCRYPT")){
saida.println(
Descrypt(
strCliente[2],
num
)
);
}
else{
saida.println("Comando inválido, somente [Crypt] e [Descrypt]");
}
}
catch(Exception e)
{
saida.println("Erro ao converter a chave");
}
}
}
}
catch(Exception ex){
}
}
catch(IOException e){
System.out.println("IOException: " + e);
}
}
}
/*
* ============================================================
* Lucas Felix de Sousa - 736627
* Avaliação Parcial de Técnicas de Programação II - A
* Universidade Cruzeiro do Sul
* http://blog.computero.com.br
* =============================================================
*
* Classe com implementação de Thread, comunicação client-server
* Utilização de Criptografia, Socket e Thread
*
* =============================================================
* */
import java.io.*;
import java.net.*;
public class ClientCrypt extends Thread{
private Socket conexao;
//private static boolean done = false;
public ClientCrypt(Socket s) {
conexao = s;
}
public static void main(String args[]){
try{
/*indico a qual computador ele vai se conectar e a qual porta
* lembrando que é recomendável utilizar portas maiores que 1000
* pois as anteriores são reservadas ao Sistema Operacional
*/
Socket conexao = new Socket("localhost", 6666);
Thread t = new ClientCrypt(conexao);
//iniciando a Thread e chamando o método run()
t.start();
}
catch(IOException e){
System.out.println("IOException: " + e);
}
}
public void run(){
try{
//receber os dados do servidor
BufferedReader entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
//receber os dados do teclado
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
//enviar dados para o servidor
PrintStream saida = new PrintStream(conexao.getOutputStream());
while (true)
{
/*Exemplo de utilização:
* Criptografar:
* crypt;7;http://computero.com.br
* Descriptografar:
* descrypt;7;vf2qsg2svixytqsg2kspf33>txxl
*/
System.out.println("Envie a mensagem para o servidor no seguinte formato: [OPCAO;NUM;MENSAGEM], ou FIM para sair");
String str = teclado.readLine();
//se for fim saio do loop
if (str.equalsIgnoreCase("FIM"))
{
break;
}
else
{
//senão envio pro servidor e obtenho a resposta
saida.println(str);
System.out.println("Resposta: " + entrada.readLine() + "
");
}
}
}
catch(IOException e){
}
}
}
Utilização no cliente:
Opção: Crypt ou Descrypt
Num: Números de 0 a 9
Texto: qualquer texto
Exemplo de utilização:
- Criptografar:
crypt;7;http://computero.com.br
- Descriptografar:
descrypt;7;vf2qsg2svixytqsg2kspf33>txxl
Os dois arquivos estão comentados, portanto, qualquer dúvida, já sabem… comentem!
Código para imprimir números primos até n
5Boa noite computêros…
Esse post surgiu da necessidade de um cara lá no Orkut que tava com uma dúvida sobre números primos, aí resolvi dar uma força…
Segue o código no post, ou se preferirem façam o download clicando aqui.
/*
Autor: Lucas Felix de Sousa - Computero
05/04/2009 - 00:15
http://blog.computero.com.br
*/
public class primo{
//função que imprime os valores primos até determinado número (n)
public static void printPrimo(int n){
//indica se o valor é primo ou não
boolean primo;
//simples contador
int iNum;
//string para concatenar os numeros primos
String strPrimos = "";
//laço de 1 até n para ver quais os primos
for (int i=1;i<=n;i++)
{
//o numero 1 sempre é primo
if (i==1){
primo = true;
}
else{
//inicio com 2, pq todo numero dividido por 1 tem resto 0
iNum = 2;
//digo que todo numero é primo até que se prove o contrário
primo = true;
//faço um loop de iNum (iniciando em 2) até menor que i
while(iNum < i){
//se o valor do resto da divisão de i por iNum for 0, o i não é primo
if (i%iNum == 0)
{
primo = false;
}
//se primo for false, saio do loop, é importante sair do loop por questão de desempenho
if (primo == false){
break;
}
//senão incremento e tento com o próximo numero
else{
iNum ++;
}
}
}
//se o valor depois de todos os testes permanecer como true, eh pq o i é primo
if (primo == true)
{
strPrimos += i + ",";
}
}
//imprimo a string
System.out.println(strPrimos);
}
public static void main(String args[]){
//chamada da função
printPrimo(100);
}
}
