sexta-feira, 16 de abril de 2010

Soma em Java, com swing!

Hoje, durante a aula de Delphi, sem nada para fazer vi que tinha instalado na máquina da escola o Jdeveloper. Pensei em ver se eu ainda sabia alguma coisa, já que faz quase um ano que não digito uma linha de Java.

Buenas, passo a passo.
1 - Abra o Jdevelopper. File > New > General > Generic Application. Next.
2 - Escolha o nome, onde salvar ... Next

Na próxima tela ele vai pedir "que tecnologias" você quer adicionar no seu projeto.
3 - Na aba "project tecnologies" adicione para sua aplicação "swing/awt". Next
4 - Finish

Agora vamos ao código, com o projeto criado, faça uma nova classe, a "Calculo" que faz a incrível soma:
package javal;

public class Calculo {
    private int va;
    private int vb;


    public void setVa(int va) {
        this.va = va;
    }

    public int getVa() {
        return va;
    }

    public void setVb(int vb) {
        this.vb = vb;
    }

    public int getVb() {
        return vb;
    }
    
    public int getSoma(){
        return this.va + this.vb;
    }
}


Agora vamos criar a tela gráfica. File > New. Selecione "Client Tier" > Frame. Veja abaixo.
De ok. Na tela seguinte é deinido o nome da classe, no meu caso coloquei o nome de "Window". Em seguida adicionei os componentes, jTextField's e JButton. Ficou como na figuira a seguir.


Legal!
Agora vamos fazer a tela que tem o main(), que inicia, roda o sistema todo!

Faça uma nova classe, chamei ela de Sistema. Segue o código.
package javal;

public class Sistema {
    public Sistema() {
    }

    public static void main(String[] args) {
        Sistema sistema = new Sistema();
        Window win = new Window();
        System.out.print("Running...");
        win.setVisible(true);
    }
}

Agora o que temos a fazer é na classe Window, fazer pegar o que o usuário digita nos campos, e fazer a chamada dos métodos de Calculo. De um clique duplo no botão, aí vai o seguinte código. Ele é auto-explicativo.

int A = Integer.parseInt(jTextField1.getText());
        int B = Integer.parseInt(jTextField2.getText());
        int C = 0;
                                                         
        Calculo c = new Calculo();
        
        c.setVa(A);
        c.setVb(B);
        C = c.getSoma();
        
        jTextField3.setText(String.valueOf(C));   

O primeiro campo é p jTextField1 e assim na sequencia, como está na tela. Lembre que antes de passar o vaor para o método c.setVa ele tem que estar no formato/tipo correto, por isso tem que dar um Integer.parseInt() no getText do jTextField.

O mesmo antes de mandar imprimir o valor, tem que converter para string. Aqui usamos o String.valueOf().

Bem, funciona! Até o próximo.

sexta-feira, 26 de fevereiro de 2010

Primeira postagem \o/ - Exercícios em Java - Parte I

Bom dia!!!
É minha primeira postagem aqui no blog!

No semestre passado, comecei a matéria "Linguagem de Programação I" na faculdade de Ciência da Computação na UNIJUÍ, a qual se trata de Java.

É claro que tem que haver exercícios. E é claro que praticamente ninguém faz o trabalho totalmente sozinho. Copia um pouco de um, um pouco de outro, e faz um pouquinho também.

Então, esses exercícios que pretendo postar,aviso desde já, são meus, mas com participações de alguns colegas que não vou citar, porque não lembro com quem peguei o que ^^

Bom, como são 20 exercícios (que professor cruel...), vou postar 5 hoje, talvez 5 amanhã, e assim consecutivamente (eta palavra difícil!).

Bom, então vamos ao que interessa: vou postar primeiro a questão dada pelo professor, e em seguida o código da solução.


Sugestões de modos diferentes, de complementos, críticas e talz, por favor, nos comentário.
Let's go!


1) Escrever um programa que lê três valores, que são os lados de um triângulo, e calcule a área deste triângulo:
Área  = raíz quadrada(  S ( S – A ) ( S – B ) ( S – C ) )
onde S é o semi-perímetro


Solução:
Arquivo: exe1.java
import java.util.Scanner;

class exe1

{

  static public void main (String[] args) {



     double x,a,b,c,s,area;



     Scanner myScanner= new Scanner(System.in);

     System.out.println ("Digite o lado 'A' do triangulo: ");

     a=myScanner.nextDouble();

     System.out.println ("Digite o lado 'B' do triangulo: ");

     b=myScanner.nextDouble();

     System.out.println ("Digite o lado 'C' do triangulo: ");

     c=myScanner.nextDouble();



     s=(a+b+c)/2;

     area= s*(s-a)*(s-b)*(s-c);

     area=Math.sqrt(area);

     System.out.println ("A area do triangulo e "+area);

   }

}




2) Escrever um programa que determine o número de notas necessárias para compor o salário de um funcionário. Supondo a existência das notas de R$ 100,00, R$ 50,00, R$ 20,00, R$ 5,00, R$ 2,00 e R$ 1,00 um salário de R$ 1234,00 deveria ser decomposto da seguinte maneira:

Notas------------Quantidade
R$ 100,00....................12
R$ 50,00........................0
R$ 20,00........................1
R$ 10,00 .......................1
R$ 5,00..........................0
R$ 2,00..........................2
R$ 1,00..........................0
Total..................1234,00

Solução:

import java.util.Scanner;

class exe2

{ 

 static public void main (String[] args) {



 Scanner myScanner = new Scanner(System.in);

 int sal,nota1,nota2,nota3,nota4,nota5,nota6,nota7,resto;

 System.out.println("Escreva o salario liquido do funcionario: ");

 sal=myScanner.nextInt();

 nota1=sal/100;

 resto=sal%100;

 nota2=resto/50;

 resto=resto%50;

 nota3=resto/20;

 resto=resto%20;

 nota4=resto/10;

 resto=resto%10;

 nota5=resto/5;

 resto=resto%5;

 nota6=resto/2;

 nota7=resto%2;

 System.out.println(" Notas "+"    Quantidade  ");

 System.out.println("R$ 100,00 "+nota1);

 System.out.println("R$ 50,00  "+nota2);

 System.out.println("R$ 20,00  "+nota3);

 System.out.println("R$ 10,00  "+nota4);

 System.out.println("R$ 5,00  "+nota5);

 System.out.println("R$ 2,00  "+nota6);

 System.out.println("R$ 1,00  "+nota7);



 System.out.println("Total: R$   "+sal);

    }




3) Faça um programa em JAVA que leia o tempo de duração de um evento em uma fábrica expressa em segundos e mostre-o expresso em horas, minutos e segundos.

Solução:

import java.util.Scanner;

class exe3

{

  static public void main (String[] args) {

 

 int seg,min,hor;

 Scanner myScanner=new Scanner(System.in);

 System.out.println("Digite os segundos: ");

 seg=myScanner.nextInt();

 hor=seg/3600;

 seg=seg%3600;

 min=seg/60;

 seg=seg%60;



 System.out.println(hor+":"+min+":"+seg);

      }

}



4) Escrever um programa que receba um par de valores X,Y que representam as coordenadas de um ponto no plano e determine o quadrante ao qual pertence o ponto ou se está sobre a origem ou ainda se está sobre um dos eixos cartesianos.

Solução:

import java.util.Scanner;

class exe4

{

  static public void main (String[] args) {



 double coord1,coord2;

 double quadrante = 0d;

 Scanner myScanner = new Scanner(System.in);

 System.out.println ("Digite a cordenada de x: ");

 coord1=myScanner.nextDouble();

 System.out.println ("Digite a cordenada de y: ");

 coord2=myScanner.nextDouble();

 if (coord1==0 & coord2==0){

  System.out.println ("Nenhum quadrante");

 }

 else

 {

  if(coord1>0)  {

   if(coord2>0){

     quadrante=1d;

   }

   else{

     quadrante=4d;

   }

  }

  else{

  

    if(coord2>0){

     quadrante=2d;

    }

    else{

     quadrante=3d;

    }

  }

 }

 System.out.println ("As coordenadas de x,y estão no: "+quadrante+" quadrante");

    }

}

 


5) Escrever um programa que leia quatro valores e os exiba em ordem decrescente.

Solução:
import java.io.*;

import java.util.Scanner;

import java.util.Arrays;



class exe5 {

 static public double[] reverse(double array[]) {

  double newArray[] = new double[array.length];

  int j = (array.length - 1);

  for(int i = 0; i < array.length; ++i){

   newArray[i] = array[j];

   --j;

  }

  return newArray;

 }



 static public void main (String[] args) {

  double values[] = new double[4];

  

  Scanner scanner = new Scanner(System.in);

  

  for(int i = 0; i < 4; ++i){

   System.out.println ("Digite o valor " + (i + 1));

   values[i] = scanner.nextDouble();

  }

  

  Arrays.sort(values);

  values = reverse(values);

  System.out.println ("\nValores\n");

  

  for(int i = 0; i < values.length; ++i){

   System.out.println(values[i]);

  }           

  

 }

}



Bom, aí estão os primeiros exercícios. Por favor, não sejam cruéis em seu comentário... hehehe... Foi no semestre passado, ja nem lembro direito... hehehe...
Vou esperar vossa avaliação...
Fui e ....
...Voltaremos!

quarta-feira, 24 de fevereiro de 2010

Instalando JDeveloper 11g no Windows

Olá pessoal, este é meu primeiro post aqui no Foo Java e, apesar do Helton ter dito em seu post (recomendo a leitura) que não haveria um tutorial de instalação para Windows pois segue o padrão NNF, vou colocar aqui os passos e algumas dicas para deixar seu Windows pronto para programar em Java, bem, vamos lá!!

Na minha máquina estou utilizando Windows 7 mas sei que funciona em XP e Vista também, abaixo disso não sei. Para começar é necessário se cadastrar no site da Oracle e fazer o download do JDeveloper (download - 993 MB) e do JDK (download).

Feito os downloads, primeiramente instalamos o JDK (NNF) e após ir até a pasta bin da instalação que provavelmente será "C:\Program Files\Java\jdk1.5.0_14\bin", copie este caminho, depois abra propriedades do sistema (Super+pause+break), clique em "Configurações avançadas do sistema" que está no lado esquerdo, veja imagem.


Vai abrir um nova janela, abra a aba "Avançado" e depois clique em "Váriaveis de Ambiente...", nesta nova janela procure por "Path" nas variáveis do sistema, selecine e clica em editar, vai abrir uma nova janela, adicione um ponto e vírgula (;) ao final do que já estiver ai dentro e depois cole o caminho que está guardado na memória (bin JDK) conforme imagem abaixo.


Clique em Ok, Ok e Ok e pronto, vamos agora testar se foi instalado corretamente, no prompt de comando digite os seguintes comandos: "java -version" e "javac -version", um de cada vez, deve aparecer algo semelhante a imagem abaixo se estiver ok.


Vamos agora instalar o JDeveloper em si (NNF), na primeira vez vai pedir para selecinoar qual interface carregar e tal, isso tudo você já viu no post do Helton Instalando JDeveloper 11 em Linux, no Windows é semelhante.

Bom pessoal, quando aprender algo novo (Java) que o Helton ainda não tenha escrito aqui eu volto, se quiser dar uma passada no meu blog clique em Blog do Bolívar!


Abraços!

quarta-feira, 19 de agosto de 2009

Trabalhando com bancos de dados: Conectando com Mysql

A linguagem Java oferece uma camada para acesso a banco de dados chamada JDBC que busca unificar a forma de acesso a diversos bancos de dados.

A idéia é dinamicamente carregar o driver do banco de dados e então usar a classe Statement para executar as querys. Esta abastração permite uma programação independente do banco de dados.

A maneira mais usual é deixar o sistema operacional se encarregar da conexão real com o banco de dados e usar pelo java a conexão ODBC já criada pelo SO, isso funciona bem em ambiente windows e com bancos de dados pequenos, mas por outro lado é uma solução muito vulnerável, pois o usuário pode apagar a ODBC, mudar o nome, desinstalar o driver pensando que “é um programa que ele não usa”.

Há também dificuldades técnicas na questão de performance além do fato que ODBC é padrão apenas em ambiente windows, em outros sistemas operacionais não existe esse conceito (porque é ruim!).

Se precisarmos usar uma conexão ODBC em Linux por exemplo precisa instalar e configurar o pacote “unixODBC” o que não é trivial.

A melhor solução é não usar ODBC (mesmo que seja mais fácil em windows que é a maioria dos usuários) e preferir pela conexão nativa.

As IDE's Java normalmente já tem o driver JDBC de alguns bancos de dados (conforme interesse do fabricante da IDE) para conexão, o Oracle Jdeveoper possui conexão com BD Oracle por exemplo.

Aqui faremos conexão com Mysql, como ainda não temos o driver, baixamos ele do site do banco de dados. Normalmente a maioria dos bancos de dados em sei site tem ou indicam onde baixar o driver Java para conectar-se ao banco.

Baixamos aqui o driver (do site www.mysql.com) para conectar-se, descompactamos o diretório e neste tem um arquivo “.jar”, um pacote de várias classes Java, esse é nosso driver de acesso nativo ao banco, independente de plataforma ou SO.




Com o projeto aberto, clicamos com o botão auxiliar em “Project Properties”. O que precisamos fazer é que esse driver seja compilado junto com os arquivos do nosso projeto, o detalhe é que ele não é um arquivo original de nosso projeto, por isso temos que indicar em classpath o caminho do driver.



Na tela que foi aberta escolha no menu “Liberaries and Classpath” (item 1). Em seguida aponte onde está o driver para conexão nativa (itens 2, 3 e 4). Aqui também poderiam ser adicionadas bibliotecas, componentes de terceiros como para geração de PDF ou algo do gênero. Por fim, clique em “ok” para gravar as novas configurações do ambiente.



Na página seguinte temos o código de uma classe para conexão e para executar de modo bem básico consultas em banco da dados.

Importante destacar apenas o import nas bibliotecas do Java referentes a SQL, e o bloco try/catch que será discutido mais adiante em outro post possivelmente.

O JDBC possui métodos diferentes para executar consultas (selects) e alterações (insert, update, delete) no banco de dados, por isso criamos também dois métodos para isso. O método de conexão é privado porque é chamado no momento de executar uma instrução, ele retorna um Statement, sobre o Statement é que as operações com o banco de dados acontecem.

O que muda de coenxão entre os diversos bancos de dados é os poucos passos até se conseguir criar um objeto do tipo Statement, no caso  do Mysql temos que apontar o servidor de banco de dados, o banco que queremos trabalhar, qual usuário e senha estão fazendo essa conexão.

O método executeSelect retorna um ResultSet, ou seja, um objeto com a coleção de dado atingida pelo select executado. O método executeUpdate retorna um inteiro apenas indicando quantos dados foram atingidos pelo comando. Observe que nem sempre aqui o resultado 0 (zero) indica que a SQL falhou ou não foi executada, apenas que nenhum dado foi atingido pelo comando DML. Confira a classe na sequencia. (clique para ver ela mais grande)


Nesta classe que usa a anterior apenas temos a chamada dos métodos. Premeiro limpamos a tabela (truncate), depois executamos um select e trazemos para tela o que ele retornou (nada), depois mandamos inserir dados e executamos o select novamente trazendo para tela o que tem nessa tabela no banco de dados.



Como pode perceber trabalhar com banco de dados em sí é fácil, o complicado é ligar a camada de BD com a interface da aplicação e fazer isso de modo OO. Essas duas classes são o básico, com isso e mais um pouco de lógica da para fazer praticamente tudo em BD, o restante são minúcias de pegar valores de uma interface swing, concatenar esses valores dentro da SQL e mandar executar.

Veja a prova do crime na figura abaixo.


Valeu pessoal, nos vemos!