domingo, 11 de maio de 2014

Saída e entrada de dados (System, JOptionPane e Scanner)


Neste tópico iremos abordar a utilização das classes System, Scanner e JoptionPane, que são classes de entrada e saída de dados.  

System


O “System.out.println();”  é utilizado para exibição de textos sendo uma saída padrão.
Se dividimos o código “System.out.println();” em partes, podemos ver que ele e é composto por uma classe, um atributo e um método.
O atributo utilizado foi o “out.” pertencente a classe “System” do pacote “java.lang”, que é um pacote do java e não precisa ser importado, pois ele é importado automaticamente.
Este atributo promove a saída de dados.
O método utilizado foi o “println” que é pertencente à classe "PrintStream" do pacote “java.io” que neste caso, não é necessário importar.
Existem mais dois tipos de métodos, o "print" e "printf".
A diferença entre esses métodos é que o método print não pula linha, já o println pula linha, não permitindo que o conteúdo esteja todo em uma linha só e o printf imprime o conteúdo de maneira já formatada.

Com estes métodos em conjunto com o atributo e a classe, nos permite imprimir o que se deseja.
Um exemplo de sua utilização:

public class ExemploDeSaidaPadrao {
    public static void main(String[] args) {
        System.out.println("Saída Padrão em Java");
        System.out.println("Linha 1");
        System.out.println("Linha 2");
        System.out.println("Linha 3");
     }


Dentro do parênteses e das aspas, coloca-se o texto desejado e caso queira visualizar o retorno do dado inserido, basta utilizar sinal de adição “+” e em seguida a variável onde está armazenado o dado.
Ex.

""public class Entrada {

    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int idade;
        
        System.out.println("Digite sua idade: ");
        idade = entrada.nextInt();
        
        System.out.println("Sua idade é " + idade + "\n");
        
    }
}""
*Observe que neste exemplo foi utilizada a Classe Scanner para a entrada de dado.

Ainda podemos usar os Caracteres de Escape.
Caracteres de escape são caracteres que auxiliam na formatação da saída do conteúdo quando usado dentro do método.
Abaixo temos alguns exemplos.

Fonte: http://www.devmedia.com.br/system-out-objeto-de-saida-em-java/25240
























Até então, para dar saída nos dados para que seja visualizado, utiliza-se o comando “System.out.println();”. Mas, e para que o usuario insira os dados?


Scanner


O usuário poderá inserir os dados utilizando a classe de entrada Scanner ou JoptionPane, mas primeiro iremos falar sobre a classe Scanner.

Para inserir os dados utilizando a classe Scanner que faz parte do pacote “java.util.” , primeiro temos que importa-lo digitando “import java.util.Scanner;” logo no começo dos códigos. Assim o java irá compreender que estamos utilizando o pacote “util”. Caso não seja feita esta importação o Java implicara um erro.


Feito este procedimento, ainda não se podeutilizar esta classe, pois ainda não foi estanciado um objeto por ela.
Para instanciar um objeto por ela, deve-se digitar, por exemplo:
Scanner ler = new Scanner(System in);”.

Agora sim podemos receber dados do usuário pelo console, mas ainda há problema.
Para nós, tanto faz se o dado é do tipo int, string, byte, double e assim vai, mas para o Java, isso tem uma enorme diferença, pois dependendo do tipo de dado, o Java os aloca de maneiras diferentes na memória e se não especificarmos o tipo de dados o Java não irá compilar.

A tabela abaixo, descreve quais tipos de dados podem ser usados na classe Scanner.






Fonte: http://www.devmedia.com.br/entrada-de-dados-classe-scanner/21366 
*Neste link você pode conferir um pouco mais sobre a classe Scanner















































Neste video, podemos ver melhor a utilização da classe Scanner e de alguns tipos de dados.

O Uso da classe Scanner em Java.



JOptionPane


Para ter uma melhor interação programa - usuário, podemos utilizar a classe JOptionPane que pertence ao pacote Swing.
Dentro deste pacote Swing, existe diversas classes para a criação de interfaces gráficas.
A classe JOptionPane  pode nos oferecer uma serie de métodos e através desses métodos 
são criadas caixas de dialogo.

Fonte: https://java.net/projects/nimbus/sources/svn/show/trunk/www/spec/images






















É através delas que mensagens de erro, informações, alertas e avisos podem ser exibidos para o usuário.
Mas para usar a classe JOptionPane temos que importar o seu pacote da mesma maneira que o pacote java.util da classe Scanner é importado. 
O pacote da classe JOptionPane é o “javax.swing”.

Como foi dito, a classe JOptionPane pode gerar caixas de dialogo através de métodos e podemos obte-las da seguinte maneira: “JOptionPane.showInputDialog. Este código tem a função de Input , ou seja, de obter dados vindo do usuário. Mas que fique claro que não existe só essa função de receber dados.
Abaixo temos outros tipos de métodos :


showInputDialog(); - Este método gera uma caixa de dialogo que emite uma mensagem ao usuário e permite a entrada de dado. É um método do tipo String.
Para receber outros tipos de dados é necessário fazer uma conversão.

Para dados do tipo int, utilizamos o código integer.parseint
Ex.
integer.parseint(JoptionPane.showInputDialog(“mensagem”);

O mesmo vale para os outro tipos de dados. Apenas o tipo de dado int tem uma mudança no nome, pois neste caso, o seu nome é colocado por inteiro, Integer.
Para escrever a mensagem de visualização para o usuário, deve-se colocar a mensagem como parâmetro e para armazenar os dados inseridos pelo usuário dentro de variáveis, deve-se seguir o seguinte procedimento descrito no exemplo abaixo.
Ex.
(variável)JOptionPane.showInputDialog(“mensagem”) ;

""import javax.swing.JOptionPane;

public class CaixasDeInput {
  public static void main(String[] args) {
    String nome = null;
    while (nome == null || nome.equals("")) {
      nome = JOptionPane.showInputDialog("Qual o seu nome?");
      if (nome == null || nome.equals("")) {
        JOptionPane.showMessageDialog(null,
                           "Você não respondeu a pergunta.");
      }
    }
    JOptionPane.showMessageDialog(null, "Seu nome é " + nome);
  }
}""


showMessageDialog(); - Ja este método mostra uma caixa de diálogo que serve somente para emitir mensagens ao usuário. Com esta caixa de dialogo não é necessário o uso do “System.out.printl();”, portanto a mensagem não aparecerá no console.


Fonte: http://bayusyafresalizdham.blogspot.com.br/2014/03/belajar-joptionpane.html
Configurando ela, podemos exibir mensagens de erro, alerta ou a informação que o usuário deseja saber.
Este é um método do tipo void.



Ao utilizar este método teremos dois parâmetros, o primeiro utiliza-se como “null” e no segundo, insere a mensagem desejada.
Ex: Joptionpane.showMessageDialog(null, “mensagem” )


""import javax.swing.JOptionPane;

public class CaixasDeDialogo {
  public static void main(String[] args) {
    String nome = null;
    int resposta;
    nome = JOptionPane.showInputDialog("Qual é o seu nome?");
    resposta = JOptionPane.showConfirmDialog(null, "O seu nome é " + nome + "?");
    if (resposta == JOptionPane.YES_OPTION) {
    // verifica se o usuário clicou no botão YES
      JOptionPane.showMessageDialog(null, "Seu nome é " + nome);
    } else {
      JOptionPane.showMessageDialog(null, "Seu nome não é " + nome);
    }
  }
}""


showConfirmDialog(); - Com este método, além de emitir uma mensagem de pergunta para o usuário, possibilita confirmar as perguntas dando opções de respostas que são definidas por botões na caixa de dialogo. Estas respostas retornam na forma números para o programa já que esse método é do tipo int.
Este método é parecido com o anterior, ele pode recebe 3  ou até mais parâmetros dependendo da sua utilização.
Aqui   um exemplo de como pode ser feito o seu uso.


""import javax.swing.JOptionPane;

public class CaixasDeDialogo {
  public static void main(String[] args) {
    String nome = null;
    int resposta;
    nome = JOptionPane.showInputDialog("Qual é o seu nome?");
    resposta = JOptionPane.showConfirmDialog(null, "O seu nome é " + nome + "?");
    if (resposta == JOptionPane.YES_OPTION) {
    // verifica se o usuário clicou no botão YES
      JOptionPane.showMessageDialog(null, "Seu nome é " + nome);
    } else {
      JOptionPane.showMessageDialog(null, "Seu nome não é " + nome);
    }
  }
}""

Abaixo temos alguns tipos de opções que são frequentemente utilizadas:

YES_NO_OPTION – Apresenta a opção Sim e Não
YES_NO_CANCEL_OPTION – Apresenta as opções Sim, Não e Cancelar.
OK_CANCEL_OPTION – Apresenta as opções Ok e Cancelar.

YES_OPTION – Apresenta somente a opção Sim.
NO_OPTION – Apresenta somente a opção Não.
CANCEL_OPTION – Apresenta somente a opção Cancelar.
OK_OPTION – apresenta somente a opção OK.

OBS: A utilização dos tipos de opções podem estar disponíveis de acordo com o método usado.


showOptionDialog(); - Este método é a união de todos os outros anteriores.

Neste site, pode-se conferir não somente os outros métodos, parâmetros e exemplos de utilização existente para a classe JOptionPane, mas também pode-se conferir outros pacotes e classes do universo Java.

Infelizmente todo o conteúdo deste site esta em inglês.


DICA!
Procure usar o comando "Ctrl + Barra de espaço".
Este comando ajuda e muito o programador. Este comando completa os códigos e é muito útil quando se usa o JOptioPane. 
Mas cuidado ao usar este comando para completar o método “show”. 
Tenha bastante atenção no método que você esta invocando para não haver complicações posteriores.



Exercícios Teóricos

1) Caso o usuário utilizasse classe System sem importa-la, o java apresentaria um algum erro? Justifique sua resposta.

2) Quais são as vantagens em utilizar a classe JOptionPane ?



Exercícios Práticos

1) Faça um programa que calcule o índice de massa corpórea (IMC) tendo como entrada de dados a classe Scanner e como saída a classe JOptionPane.
Formula do IMC: Massa / Altura² .

2) Faça um programa que faça uma pergunta para o usuario utilizando como entrada de dados o JOptionpane - empregando o uso do showInputDialogue e showConfirmDialogue ou showOptionDialogue - e que utilize a Classe System para a saída.



Exercício Pratico Resolvido.


Faça um Programa que calcule a média de salários de uma empresa, pedindo ao usuário a grade de funcionários e os salários em JOptionPane e devolvendo a média em DOS.

Resolução:

  1. import javax.swing.JOptionPane;  
  2. public class Media {  
  3.     public static void main(String[] args) {  
  4.   
  5.         int quantidadeFuncionarios = 0;  
  6.         float salarioFuncionario = 0;  
  7.         float totalSalarios = 0;  
  8.         float mediaSalarial = 0;  
  9.         //variável contadora para laço  
  10.         int contadora = 0;  
  11.           
  12.         quantidadeFuncionarios = Integer.parseInt(JOptionPane.showInputDialog(null,"Digite a quantidade de funcionários","Número de funcionários",JOptionPane.QUESTION_MESSAGE));  
  13.           
  14.         while (contadora < quantidadeFuncionarios){  
  15.             contadora++;  
  16.             salarioFuncionario = Float.parseFloat(JOptionPane.showInputDialog(null,"Digite o salário do funcionário","Salário",JOptionPane.QUESTION_MESSAGE));  
  17.             totalSalarios = totalSalarios + salarioFuncionario;  
  18.         }  
  19.           
  20.         mediaSalarial = totalSalarios / quantidadeFuncionarios;  
  21.         System.out.println("Média Salarial = " + mediaSalarial);  
  22.   
  23.         System.exit(0);  
  24.     }  
  25.  
  26. }  



REFERÊNCIAS


Para este artigo foi utilizado apenas sites como referencia. 

http://www.tiexpert.net/programacao/java/showinputdialog.php
http://www.devmedia.com.br/entrada-de-dados-classe-scanner/21366
http://www.dm.ufscar.br/~waldeck/curso/java/part21.html
http://www.devmedia.com.br/system-out-objeto-de-saida-em-java/25240
http://www.tiexpert.net/programacao/java/joptionpane.php
http://www.tiexpert.net/programacao/java/println.php
http://www.javaprogressivo.net/2012/08/java-recebendo-dados-do-usuario-classe.html
http://www.tns.lcs.mit.edu/manuals/java-api-old/packages.html
http://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html#DEFAULT_OPTION
http://pages.cs.wisc.edu/~hasti/cs368/JavaTutorial/NOTES/JavaIO_Scanner.html
http://www.caelum.com.br/apostila-java-orientacao-objetos/pacote-java-io/#15-3-inputstream-inputstreamreader-e-bufferedreader

VIDEOS REFERÊNCIA

http://www.youtube.com/watch?v=nXJnc5kP1EM
https://www.youtube.com/watch?v=7iFlkaewoKg


Grupo - Java Fiap
Componentes do grupo:
-Bruno Batista
-Murilo Araújo
-Rosiel Sebastião 







3 comentários:

  1. Cara que comando extenso hein?
    O que aconteceu contigo amigo que você está ausente? Me manda um email pra saber como você ta

    ResponderExcluir
  2. O exemplo poderia ser orientado a objetos, não acham? Mas de qualquer forma o o tópico está muito bom!

    ResponderExcluir
  3. Post Excelente!! Pude aprender muito e esclarecer dúvidas. Um grande abraço. Sidinei Carvalho

    ResponderExcluir