Bem-vindo ao Fórum!

Registre-se agora mesmo e fique por dentro da maior comunidade de Cheats do Brasil!

Search the Community

Showing results for tags 'java'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Anunciantes
    • silvaBR Cheats
  • Anúncios/Eventos
    • Regras
    • Anúncios
    • Eventos do fórum
  • Feedback & Suporte
    • Tutoriais WC
    • Suporte
    • Denúncias e Reclamações
    • Sugestões
    • Depósito
  • WebCheats Premium
    • Download
    • Cracking
    • Serviços Pagos - Pedidos
    • MarketPlace
    • Conteúdo Adulto
    • Taverna WebCheats Premium
  • Shooter Zone
    • Point Blank
    • Combat Arms
    • Cross Fire
    • Counter Strike
    • Battle Royale
    • Outros Shooters em Geral
    • Shooter Zone - Lixão
  • RPG/MOBA Zone
  • Outros Games Zone
  • Design Zone
  • Info Zone
  • Video Games Zone
  • Entretenimento & Diversão

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me


Discord

Found 60 results

  1. Boa noite meros mortais, gostaria de pedir ajuda em um código Java que estou desenvolvendo(ainda sou bem iniciante) estou criando um sistema utilizando Jframe e claro com auxilio do Windowbuilder no eclipse, criei uma tela e coloquei uma JMenuBar ao topo e adicionei seus itens e sub itens da seguinte maneira: a parte preta é um JDesktopPane, logo após adicionei um evento ao botão de prestar contas, a função desse evento seria abrir um JInternalFrame porém não tive sucesso segue o link do código da tela principal [spoiler=Codigo da tela principal] package views; import SistemaCorporativo.CadastrarFuncionarios; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.plaf.DesktopPaneUI; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.Color; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.SwingConstants; import javax.swing.JDesktopPane; public class TelaLoginMDI extends JFrame { private JPanel contentPane; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { TelaLoginMDI frame = new TelaLoginMDI(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public TelaLoginMDI() { setResizable(false); setSize(700, 500); /*EU QUE COLOQUEI*/ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 700, 500); this.setLocationRelativeTo(null); /*EU QUE COLOQUEI*/ JMenuBar menuBar = new JMenuBar(); menuBar.setBackground(new Color(51, 51, 51)); menuBar.setForeground(new Color(0, 0, 0)); menuBar.setBorderPainted(false); setJMenuBar(menuBar); JMenu mnAes = new JMenu("A\u00E7\u00F5es"); mnAes.setIcon(new ImageIcon(TelaLoginMDI.class.getResource("/icons 1/paste_plain.png"))); mnAes.setForeground(new Color(204, 204, 204)); menuBar.add(mnAes); JMenuItem mntmPrestarContas = new JMenuItem("Prestar Contas"); mntmPrestarContas.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { TelaPrestacaoDeContas telaDePrestacaoDeContas = new TelaPrestacaoDeContas(); desktopPane.add(telaDePrestacaoDeContas); } }); mntmPrestarContas.setIcon(new ImageIcon(TelaLoginMDI.class.getResource("/icons 1/book_open.png"))); mnAes.add(mntmPrestarContas); JMenuItem mntmNewMenuItem = new JMenuItem("Pedir Reembolso"); mntmNewMenuItem.setIcon(new ImageIcon(TelaLoginMDI.class.getResource("/icons 1/money.png"))); mnAes.add(mntmNewMenuItem); JMenuItem mntmNewMenuItem_1 = new JMenuItem("Analisar Solicitações"); mntmNewMenuItem_1.setIcon(new ImageIcon(TelaLoginMDI.class.getResource("/icons 1/magnifier.png"))); mnAes.add(mntmNewMenuItem_1); JMenu mnUsurio = new JMenu("Usu\u00E1rio"); mnUsurio.setIcon(new ImageIcon(TelaLoginMDI.class.getResource("/icons 1/user.png"))); mnUsurio.setForeground(new Color(204, 204, 204)); menuBar.add(mnUsurio); JMenuItem mntmInformaes = new JMenuItem("Informa\u00E7\u00F5es"); mntmInformaes.setIcon(new ImageIcon(TelaLoginMDI.class.getResource("/icons 1/application_view_list.png"))); mnUsurio.add(mntmInformaes); JMenu mnLogin = new JMenu("Finalizar"); mnLogin.setIcon(new ImageIcon(TelaLoginMDI.class.getResource("/icons 1/delete.png"))); mnLogin.setForeground(new Color(204, 204, 204)); menuBar.add(mnLogin); JMenuItem mntmSair = new JMenuItem("Sair"); mntmSair.setIcon(new ImageIcon(TelaLoginMDI.class.getResource("/Icones/sair-menu-2.png"))); mntmSair.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { System.exit(0); } }); mnLogin.add(mntmSair); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); CadastrarFuncionarios funcionario = new CadastrarFuncionarios(1,"Juriscleiton",29,"492301","54025","ativo","Sim","[email protected]","123"); JMenuItem mntmBemVindoa = new JMenuItem("Bem Vindo(a) " + funcionario.getNome()); mntmBemVindoa.setIcon(new ImageIcon(TelaLoginMDI.class.getResource("/icons 1/user_suit.png"))); mntmBemVindoa.setSelected(true); mntmBemVindoa.setBackground(new Color(51, 51, 51)); mntmBemVindoa.setForeground(Color.WHITE); mntmBemVindoa.setBounds(477, 419, 217, 31); contentPane.add(mntmBemVindoa); JMenuBar menuBarBemVindo = new JMenuBar(); menuBarBemVindo.setBackground(new Color(51, 51, 51)); menuBarBemVindo.setBorderPainted(false); menuBarBemVindo.setBounds(970, 913, 97, 21); contentPane.add(menuBarBemVindo); JLabel iconeAcessoRapido = new JLabel(""); iconeAcessoRapido.setIcon(new ImageIcon(TelaLoginMDI.class.getResource("/Icones/acesso-rapido.png"))); iconeAcessoRapido.setHorizontalAlignment(SwingConstants.CENTER); iconeAcessoRapido.setBackground(new Color(0, 0, 0)); iconeAcessoRapido.setBounds(0, -23, 694, 140); contentPane.add(iconeAcessoRapido); JPanel panel = new JPanel(); panel.setBackground(new Color(51, 51, 51)); panel.setBounds(0, 0, 694, 117); contentPane.add(panel); JDesktopPane desktopPane = new JDesktopPane(); desktopPane.setBounds(0, 117, 694, 333); contentPane.add(desktopPane); } } segui umas explicações pela internet e cheguei no código proposto, onde eu faria a instacia do JinternalFrame e usaria .add para adicionar o frame no JdesktopPane trecho onde o erro acontece. Amostra do erro. código do JDesktopPane não sei se pode ser algo no jinternalFrame então aqui la vai o código dele também [spoiler=JInternalFrame] package views; import java.awt.EventQueue; import javax.swing.JInternalFrame; public class TelaPrestacaoDeContas extends JInternalFrame { /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { TelaPrestacaoDeContas frame = new TelaPrestacaoDeContas(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public TelaPrestacaoDeContas() { setBounds(100, 100, 450, 300); } } meu objetivo e simplesmente importar um jinternalFrame nessa tela principal, desde já agradeço pela ajuda e paciência
  2. As 5 melhores linguagens de programação para desenvolvimento de IA Qual linguagem de programação você deve escolher para o seu aprendizado de máquina ou projeto de aprendizado profundo? Estas são suas melhores opções AI (inteligência artificial) abre um mundo de possibilidades para desenvolvedores de aplicativos. Aproveitando o aprendizado de máquina ou o aprendizado profundo, você pode produzir perfis de usuário, personalização e recomendações muito melhores, ou incorporar uma pesquisa mais inteligente, uma interface de voz ou assistência inteligente, ou melhorar seu aplicativo de várias outras maneiras. Você pode até criar aplicativos que ver, ouvir e reagir. Qual linguagem de programação você deve aprender a mergulhar nas profundezas da IA? Você desejará um idioma com muitas boas bibliotecas de aprendizado de máquina e aprendizagem profunda, é claro. Ele também deve apresentar bom desempenho em tempo de execução, bom suporte a ferramentas, uma grande comunidade de programadores e um ecossistema saudável de pacotes de suporte. Isso ainda deixa muitas boas opções. Aqui estão minhas escolhas para as cinco melhores linguagens de programação para desenvolvimento de IA, junto com três menções honrosas. Algumas dessas línguas estão em ascensão, enquanto outras parecem estar escorregando. Volte em alguns meses, e você pode achar que esses rankings mudaram. 1. Python No número um, é o Python. Como poderia ser qualquer outra coisa, realmente? Embora existam coisas enlouquecedoras sobre o Python - o espaço em branco, a divisão massiva entre o Python 2.xe o Python 3.x, os cinco sistemas de empacotamento diferentes que são todos quebrados de maneiras diferentes - se você está fazendo um trabalho de IA, quase certamente estar usando o Python em algum momento. As bibliotecas disponíveis no Python são praticamente inigualáveis em outros idiomas. O NumPy se tornou tão onipresente que é quase uma API padrão para operações de tensor, e o Pandas traz os poderosos e flexíveis quadros de dados do R para o Python. Para o processamento de linguagem natural (PNL), você tem o venerável NLTK e o incrivelmente rápido SpaCy. Para aprendizado de máquina, existe o Scikit-learn testado em batalha. E quando se trata de aprendizagem profunda, todas as bibliotecas atuais (TensorFlow, PyTorch, Chainer, Apache MXNet, Theano, etc.) são efetivamente projetos em Python. Se você está lendo uma pesquisa de aprendizado profundo de ponta sobre o arXiv, então certamente encontrará o código-fonte em Python. Depois, há as outras partes do ecossistema do Python. Embora o IPython tenha se tornado o Jupyter Notebook e menos centrado no Python, você ainda descobrirá que a maioria dos usuários do Jupyter Notebook e a maioria dos notebooks compartilhados on-line usam o Python. Não há como fugir disso. O Python é a linguagem na vanguarda da pesquisa de IA, aquela em que você encontrará a maioria das estruturas de aprendizado de máquina e aprendizagem profunda, e a que quase todo mundo no mundo da IA fala. Por esses motivos, o Python é o primeiro entre as linguagens de programação de IA, apesar do fato de que seu autor amaldiçoa os problemas de espaço em branco pelo menos uma vez por dia. 2. Java e amigos A família de linguagens JVM (Java, Scala, Kotlin, Clojure, etc.) também é uma ótima opção para o desenvolvimento de aplicativos de IA. Você tem diversas bibliotecas disponíveis para todas as partes do pipeline, seja o processamento de linguagem natural (CoreNLP), operações de tensor (ND4J) ou uma pilha de aprendizado profundo acelerada por GPU (DL4J). Além disso, você obtém acesso fácil a plataformas de Big Data, como o Apache Spark e o Apache Hadoop. Java é a língua franca da maioria das empresas e, com as novas construções de linguagem disponíveis no Java 8 e no Java 9, escrever código Java não é a experiência odiosa que muitos de nós lembramos. Escrever um aplicativo de AI em Java pode parecer um pouco chato, mas ele pode fazer o trabalho - e você pode usar toda a sua infraestrutura Java existente para desenvolvimento, implantação e monitoramento. 3. C / C ++ É improvável que C / C ++ seja sua primeira escolha ao desenvolver um aplicativo de AI, mas se você estiver trabalhando em um ambiente integrado e não puder arcar com a sobrecarga de um Java Virtual Machine ou um interpretador Python, C / C ++ é o responda. Quando você precisa torcer todo o desempenho do sistema, então você precisa voltar para o aterrorizante mundo dos ponteiros. Felizmente, o C / C ++ moderno pode ser agradável de escrever (honesto!). Você tem uma escolha de abordagens. Você pode mergulhar na parte inferior da pilha, usando bibliotecas como CUDA para escrever seu próprio código que roda diretamente em sua GPU, ou você pode usar o TensorFlow ou o Caffe para obter acesso a APIs flexíveis de alto nível. O último também permite que você importe modelos que seus cientistas de dados possam ter construído com o Python e, em seguida, os execute na produção com toda a velocidade que o C / C ++ oferece. Fique atento ao que Rust faz neste espaço no ano que está por vir. Combinando a velocidade do C / C ++ com o tipo e segurança de dados, o Rust é uma ótima opção para alcançar o desempenho de produção sem criar dores de cabeça de segurança. E uma ligação TensorFlow já está disponível para ela. 4. JavaScript JavaScript? O que diabos está acontecendo? Bem, o Google lançou recentemente o TensorFlow.js, uma biblioteca acelerada por WebGL que permite treinar e executar modelos de aprendizado de máquina em seu navegador da web. Também inclui a API Keras e a capacidade de carregar e usar modelos que foram treinados em TensorFlow regular. É provável que isso atraia um influxo massivo de desenvolvedores para o espaço da IA. Embora o JavaScript não tenha atualmente o mesmo acesso a bibliotecas de aprendizado de máquina das outras linguagens listadas aqui, os desenvolvedores logo adicionarão redes neurais a suas páginas da Web com a mesma indiferença que adicionam um componente React ou uma propriedade CSS. Simultaneamente fortalecedor e aterrorizante. TensorFlow.js ainda está em seus primeiros dias. No momento, ele funciona no navegador, mas não no Node.js. Ele ainda não implementa a API completa do TensorFlow. No entanto, espero que ambos os problemas sejam resolvidos em grande parte até o final de 2018 e a invasão de AI do JavaScript ocorrerá logo em seguida. 5. R O R aparece no fundo dos nossos cinco primeiros e está tendendo para baixo. R é a linguagem que os cientistas de dados adoram. No entanto, outros programadores acham R um pouco confuso quando o encontram pela primeira vez, devido à sua abordagem centrada no dataframe. Se você tem um grupo dedicado de desenvolvedores de R, então pode fazer sentido usar as integrações com TensorFlow, Keras ou H2O para pesquisa, prototipagem e experimentação, mas hesito em recomendar R para uso em produção. Outras opções de programação de AI É claro que Python, Java, C / C ++, JavaScript e R não são os únicos idiomas disponíveis para programação de IA. Vejamos três linguagens de programação que não chegaram ao nosso top cinco - duas em ascensão e uma em queda. Fonte: http://clusterdata.nl/bericht/news-item/the-5-best-programming-languages-for-ai-development/
  3. Username_

    BD em Java

    Olá, Gostaria de saber como utilizar banco de dados em Java. Preciso baixar algo? Algum driver? Segue o código que estou utilizando pra tentar conectar: import java.sql.Connection; import java.sql.Statement; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class bd { public static void main(String args[]) { Connection connection = null; try { // Load the JDBC driver String driverName = "com.mysql.jdbc.Driver";//"org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver Class.forName(driverName); // Create a connection to the database String serverName = "localhost:3306"; String mydatabase = "test"; String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url String username = "root"; String password = ""; connection = DriverManager.getConnection(url, username, password); System.out.println("Conexao possivelmente com sucesso"); if (connection != null) { System.out.println("Conectado com sucesso."); } else { System.out.println("Falha ao conectar no banco de dados"); } } catch (ClassNotFoundException e) { // Could not find the database driver System.out.println("Erro. Mensagem 1. Não foi possível conectar ao banco de dados."); } catch (SQLException e) { // Could not connect to the database System.out.println("Erro. Mensagem 2. Não foi possível conectar ao banco de dados."); } } } Obrigado por qualquer ajuda.
  4. Olá Galera, aqui é o panda! Vamos para Aula de Numero 05, Começando com Orientação a objetos! Comentem e deixe o feedback de vocês! Orientação a objetos é uma maneira de programar que ajuda na organização e resolve muitos problemas enfrentados pela programação procedural. Consideremos o clássico problema da validação de um CPF. Normalmente, temos um formulário, no qual recebemos essa informação, e depois temos que enviar esses caracteres para uma função que vai validá-lo, como no pseudocódigo abaixo: cpf = formulario->campo_cpf valida(cpf) Alguém te obriga a sempre validar esse CPF? Você pode, inúmeras vezes, esquecer de chamar esse validador. E mais: considere que você tem 50 formulários e precise validar em todos eles o CPF. Se sua equipe tem 3 programadores trabalhando nesses formulários, quem fica responsável por essa validação? Todos! A situação pode piorar: na entrada de um novo desenvolvedor, precisaríamos avisá-lo que sempre devemos validar o cpf de um formulário. É nesse momento que nascem aqueles guias de programação para o desenvolvedor que for entrar nesse projeto - às vezes, é um documento enorme. Em outras palavras, todo desenvolvedor precisa ficar sabendo de uma quantidade enorme de informações, que, na maioria das vezes, não está realmente relacionado à sua parte no sistema, mas ele precisa ler tudo isso, resultando um entrave muito grande! Outra situação onde ficam claros os problemas da programação procedural, é quando nos encontramos na necessidade de ler o código que foi escrito por outro desenvolvedor e descobrir como ele funciona internamente. Um sistema bem encapsulado não deveria gerar essa necessidade. Em um sistema grande, simplesmente não temos tempo de ler todo o código existente. Considerando que você não erre nesse ponto e que sua equipe tenha uma comunicação muito boa (perceba que comunicação excessiva pode ser prejudicial e atrapalhar o andamento), ainda temos outro problema: imagine que, em todo formulário, você também quer que a idade do cliente seja validada - o cliente precisa ter mais de 18 anos. Vamos ter de colocar um if... mas onde? Espalhado por todo seu código... Mesmo que se crie outra função para validar, precisaremos incluir isso nos nossos 50 formulários já existentes. Qual é a chance de esquecermos em um deles? É muito grande. A responsabilidade de verificar se o cliente tem ou não tem 18 anos ficou espalhada por todo o seu código. Seria interessante poder concentrar essa responsabilidade em um lugar só, para não ter chances de esquecer isso. Melhor ainda seria se conseguíssemos mudar essa validação e os outros programadores nem precisassem ficar sabendo disso. Em outras palavras, eles criariam formulários e um único programador seria responsável pela validação: os outros nem sabem da existência desse trecho de código. Impossível? Não, o paradigma da orientação a objetos facilita tudo isso. O problema do paradigma procedural é que não existe uma forma simples de criar conexão forte entre dados e funcionalidades. No paradigma orientado a objetos é muito fácil ter essa conexão através dos recursos da própria linguagem. Quais as vantagens? Orientação a objetos vai te ajudar muito a se organizar e escrever menos, além de concentrar as responsabilidades nos pontos certos, flexibilizando sua aplicação, encapsulando a lógica de negócios. Outra enorme vantagem, onde você realmente vai economizar montanhas de código, é o polimorfismo das referências, que veremos em um posterior capítulo. Nos próximos capítulos, conseguiremos enxergar toda essa vantagem, mas, primeiramente é necessário conhecer um pouco mais da sintaxe e da criação de tipos e referências em Java. Criando um tipo Considere um programa para um banco, é bem fácil perceber que uma entidade extremamente importante para o nosso sistema é a conta. Nossa ideia aqui é generalizarmos alguma informação, juntamente com funcionalidades que toda conta deve ter. O que toda conta tem e é importante para nós? número da conta nome do dono da conta saldo limite O que toda conta faz e é importante para nós? Isto é, o que gostaríamos de "pedir à conta"? saca uma quantidade x deposita uma quantidade x imprime o nome do dono da conta devolve o saldo atual transfere uma quantidade x para uma outra conta y devolve o tipo de conta Com isso, temos o projeto de uma conta bancária. Podemos pegar esse projeto e acessar seu saldo? Não. O que temos ainda é o projeto. Antes, precisamos construir uma conta, para poder acessar o que ela tem, e pedir a ela que faça algo. Repare na figura: apesar do papel do lado esquerdo especificar uma Conta, essa especificação é uma Conta? Nós depositamos e sacamos dinheiro desse papel? Não. Utilizamos a especificação da Conta para poder criar instâncias que realmente são contas, onde podemos realizar as operações que criamos. Apesar de declararmos que toda conta tem um saldo, um número e uma agência no pedaço de papel (como à esquerda na figura), são nas instâncias desse projeto que realmente há espaço para armazenar esses valores. Ao projeto da conta, isto é, a definição da conta, damos o nome de classe. Ao que podemos construir a partir desse projeto, as contas de verdade, damos o nome de objetos. A palavra classe vem da taxonomia da biologia. Todos os seres vivos de uma mesma classe biológica têm uma série de atributos e comportamentos em comum, mas não são iguais, podem variar nos valores desses atributos e como realizam esses comportamentos. Homo Sapiens define um grupo de seres que possuem características em comum, porém a definição (a ideia, o conceito) de um Homo Sapiens é um ser humano? Não. Tudo está especificado na classe Homo Sapiens, mas se quisermos mandar alguém correr, comer, pular, precisaremos de uma instância de Homo Sapiens, ou então de um objeto do tipo Homo Sapiens. Um outro exemplo: uma receita de bolo. A pergunta é certeira: você come uma receita de bolo? Não. Precisamos instanciá-la, criar um objeto bolo a partir dessa especificação (a classe) para utilizá-la. Podemos criar centenas de bolos a partir dessa classe (a receita, no caso), eles podem ser bem semelhantes, alguns até idênticos, mas são objetosdiferentes. Podemos fazer milhares de analogias semelhantes. A planta de uma casa é uma casa? Definitivamente não. Não podemos morar dentro da planta de uma casa, nem podemos abrir sua porta ou pintar suas paredes. Precisamos, antes, construir instâncias a partir dessa planta. Essas instâncias, sim, podemos pintar, decorar ou morar dentro. Pode parecer óbvio, mas a dificuldade inicial do paradigma da orientação a objetos é justo saber distinguir o que é classe e o que é objeto. É comum o iniciante utilizar, obviamente de forma errada, essas duas palavras como sinônimos. Uma classe em Java Vamos começar apenas com o que uma Conta tem, e não com o que ela faz (veremos logo em seguida). Um tipo desses, como o especificado de Conta acima, pode ser facilmente traduzido para Java: class Conta { int numero; String dono; double saldo; double limite; // .. } String String é uma classe em Java. Ela guarda uma cadeia de caracteres, uma frase completa. Como estamos ainda aprendendo o que é uma classe, entenderemos com detalhes a classe String apenas em capítulos posteriores. Por enquanto, declaramos o que toda conta deve ter. Estes são os atributos que toda conta, quando criada, vai ter. Repare que essas variáveis foram declaradas fora de um bloco, diferente do que fazíamos quando tinha aquele main. Quando uma variável é declarada diretamente dentro do escopo da classe, é chamada de variável de objeto, ou atributo. Criando e usando um objeto Já temos uma classe em Java que especifica o que todo objeto dessa classe deve ter. Mas como usá-la? Além dessa classe, ainda teremos o Programa.java e a partir dele é que vamos utilizar a classeConta. Para criar (construir, instanciar) uma Conta, basta usar a palavra chave new. Devemos utilizar também os parênteses, que descobriremos o que fazem exatamente em um capítulo posterior: class Programa { public static void main(String[] args) { new Conta(); } } Bem, o código acima cria um objeto do tipo Conta, mas como acessar esse objeto que foi criado? Precisamos ter alguma forma de nos referenciarmos a esse objeto. Precisamos de uma variável: class Programa { public static void main(String[] args) { Conta minhaConta; minhaConta = new Conta(); } } Pode parecer estranho escrevermos duas vezes Conta: uma vez na declaração da variável e outra vez no uso do new. Mas há um motivo, que em breve entenderemos. Através da variável minhaConta, podemos acessar o objeto recém criado para alterar seu dono, seu saldo, etc: class Programa { public static void main(String[] args) { Conta minhaConta; minhaConta = new Conta(); minhaConta.dono = "Duke"; minhaConta.saldo = 1000.0; System.out.println("Saldo atual: " + minhaConta.saldo); } } É importante fixar que o ponto foi utilizado para acessar algo em minhaConta. A minhaConta pertence ao Duke, e tem saldo de mil reais. Métodos Dentro da classe, também declararemos o que cada conta faz e como isto é feito - os comportamentos que cada classe tem, isto é, o que ela faz. Por exemplo, de que maneira que uma Conta saca dinheiro? Especificaremos isso dentro da própria classe Conta, e não em um local desatrelado das informações da própria Conta. É por isso que essas "funções" são chamadas de métodos. Pois é a maneira de fazer uma operação com um objeto. Queremos criar um método que saca uma determinada quantidade e não devolve nenhuma informação para quem acionar esse método. class Conta { double saldo; // ... outros atributos ... void saca(double quantidade) { double novoSaldo = this.saldo - quantidade; this.saldo = novoSaldo; } } A palavra chave void diz que, quando você pedir para a conta sacar uma quantia, nenhuma informação será enviada de volta a quem pediu. Quando alguém pedir para sacar, ele também vai dizer quanto quer sacar. Por isso precisamos declarar o método com algo dentro dos parênteses - o que vai aí dentro é chamado de argumento do método (ou parâmetro). Essa variável é uma variável comum, chamada também de temporária ou local, pois, ao final da execução desse método, ela deixa de existir. Dentro do método, estamos declarando uma nova variável. Essa variável, assim como o argumento, vai morrer no fim do método, pois este é seu escopo. No momento que vamos acessar nosso atributo, usamos a palavra chave this para mostrar que esse é um atributo, e não uma simples variável. (veremos depois que é opcional) Repare que, nesse caso, a conta pode estourar o limite fixado pelo banco. Mais para frente, evitaremos essa situação, e de uma maneira muito elegante. Da mesma forma, temos o método para depositar alguma quantia: class Conta { // ... outros atributos e métodos ... void deposita(double quantidade) { this.saldo += quantidade; } } Observe que não usamos uma variável auxiliar e, além disso, usamos a abreviação +=para deixar o método bem simples. O += soma quantidade ao valor antigo do saldo e guarda no próprio saldo, o valor resultante. Para mandar uma mensagem ao objeto e pedir que ele execute um método, também usamos o ponto. O termo usado para isso é invocação de método. O código a seguir saca dinheiro e depois deposita outra quantia na nossa conta: class TestaAlgunsMetodos { public static void main(String[] args) { // criando a conta Conta minhaConta; minhaConta = new Conta(); // alterando os valores de minhaConta minhaConta.dono = "Duke"; minhaConta.saldo = 1000; // saca 200 reais minhaConta.saca(200); // deposita 500 reais minhaConta.deposita(500); System.out.println(minhaConta.saldo); } } Uma vez que seu saldo inicial é 1000 reais, se sacarmos 200 reais, depositarmos 500 reais e imprimirmos o valor do saldo, o que será impresso? Métodos com retorno Um método sempre tem que definir o que retorna, nem que defina que não há retorno, como nos exemplos anteriores onde estávamos usando o void. Um método pode retornar um valor para o código que o chamou. No caso do nosso método saca , podemos devolver um valor booleano indicando se a operação foi bem sucedida. class Conta { // ... outros métodos e atributos ... boolean saca(double valor) { if (this.saldo < valor) { return false; } else { this.saldo = this.saldo - valor; return true; } } } A declaração do método mudou! O método saca não tem void na frente. Isto quer dizer que, quando é acessado, ele devolve algum tipo de informação. No caso, um boolean. A palavra chave return indica que o método vai terminar ali, retornando tal informação. Exemplo de uso: minhaConta.saldo = 1000; boolean consegui = minhaConta.saca(2000); if (consegui) { System.out.println("Consegui sacar"); } else { System.out.println("Não consegui sacar"); } Ou então, posso eliminar a variável temporária, se desejado: minhaConta.saldo = 1000; if (minhaConta.saca(2000)) { System.out.println("Consegui sacar"); } else { System.out.println("Não consegui sacar"); } Mais adiante, veremos que algumas vezes é mais interessante lançar uma exceção (exception) nesses casos. Meu programa pode manter na memória não apenas uma conta, como mais de uma: class TestaDuasContas { public static void main(String[] args) { Conta minhaConta; minhaConta = new Conta(); minhaConta.saldo = 1000; Conta meuSonho; meuSonho = new Conta(); meuSonho.saldo = 1500000; } } bjetos são acessados por referências Quando declaramos uma variável para associar a um objeto, na verdade, essa variável não guarda o objeto, e sim uma maneira de acessá-lo, chamada de referência. É por esse motivo que, diferente dos tipos primitivos como int e long, precisamos dar new depois de declarada a variável: public static void main(String args[]) { Conta c1; c1 = new Conta(); Conta c2; c2 = new Conta(); } O correto aqui, é dizer que c1 se refere a um objeto. Não é correto dizer que c1 é um objeto, pois c1 é uma variável referência, apesar de, depois de um tempo, os programadores Java falarem "Tenho um objeto c do tipo Conta", mas apenas para encurtar a frase "Tenho uma referência c a um objeto do tipo Conta". Basta lembrar que, em Java, uma variável nunca é um objeto. Não há, no Java, uma maneira de criarmos o que é conhecido como "objeto pilha" ou "objeto local", pois todo objeto em Java, sem exceção, é acessado por uma variável referência. Esse código nos deixa na seguinte situação: Conta c1; c1 = new Conta(); Conta c2; c2 = new Conta(); Internamente, c1 e c2 vão guardar um número que identifica em que posição da memória aquela Conta se encontra. Dessa maneira, ao utilizarmos o "." para navegar, o Java vai acessar a Conta que se encontra naquela posição de memória, e não uma outra. Para quem conhece, é parecido com um ponteiro, porém você não pode manipulá-lo como um número e nem utilizá-lo para aritmética, ela é tipada. Um outro exemplo: class TestaReferencias { public static void main(String args[]) { Conta c1 = new Conta(); c1.deposita(100); Conta c2 = c1; // linha importante! c2.deposita(200); System.out.println(c1.saldo); System.out.println(c2.saldo); } } Qual é o resultado do código acima? O que aparece ao rodar? O que acontece aqui? O operador = copia o valor de uma variável. Mas qual é o valor da variável c1? É o objeto? Não. Na verdade, o valor guardado é a referência (endereço) de onde o objeto se encontra na memória principal. Na memória, o que acontece nesse caso: Conta c1 = new Conta(); Conta c2 = c1; Quando fizemos c2 = c1, c2 passa a fazer referência para o mesmo objeto que c1referencia nesse instante. Então, nesse código em específico, quando utilizamos c1 ou c2 estamos nos referindo exatamente ao mesmo objeto! Elas são duas referências distintas, porém apontam para o mesmo objeto! Compará-las com "==" vai nos retornar true, pois o valor que elas carregam é o mesmo! Outra forma de perceber, é que demos apenas um new, então só pode haver um objeto Conta na memória. Atenção: não estamos discutindo aqui a utilidade de fazer uma referência apontar pro mesmo objeto que outra. Essa utilidade ficará mais clara quando passarmos variáveis do tipo referência como argumento para métodos. new O que exatamente faz o new? O new executa uma série de tarefas, que veremos mais adiante. Mas, para melhor entender as referências no Java, saiba que o new, depois de alocar a memória para esse objeto, devolve uma "flecha", isto é, um valor de referência. Quando você atribui isso a uma variável, essa variável passa a se referir para esse mesmo objeto. Continuando... Podemos então ver outra situação: public static void main(String args[]) { Conta c1 = new Conta(); c1.dono = "Duke"; c1.saldo = 227; Conta c2 = new Conta(); c2.dono = "Duke"; c2.saldo = 227; if (c1 == c2) { System.out.println("Contas iguais"); } } O operador == compara o conteúdo das variáveis, mas essas variáveis não guardam o objeto, e sim o endereço em que ele se encontra. Como em cada uma dessas variáveis guardamos duas contas criadas diferentemente, elas estão em espaços diferentes da memória, o que faz o teste no if valer false. As contas podem ser equivalentes no nosso critério de igualdade, porém elas não são o mesmo objeto. Quando se trata de objetos, pode ficar mais fácil pensar que o == compara se os objetos (referências, na verdade) são o mesmo, e não se são iguais. Para saber se dois objetos têm o mesmo conteúdo, você precisa comparar atributo por atributo. Veremos uma solução mais elegante para isso também. O método transfere() E se quisermos ter um método que transfere dinheiro entre duas contas? Podemos ficar tentados a criar um método que recebe dois parâmetros: conta1 e conta2 do tipo Conta. Mas cuidado: assim estamos pensando de maneira procedural. A ideia é que, quando chamarmos o método transfere, já teremos um objeto do tipo Conta (o this), portanto o método recebe apenas um parâmetro do tipo Conta, a Conta destino (além do valor): class Conta { // atributos e métodos... void transfere(Conta destino, double valor) { this.saldo = this.saldo - valor; destino.saldo = destino.saldo + valor; } } Para deixar o código mais robusto, poderíamos verificar se a conta possui a quantidade a ser transferida disponível. Para ficar ainda mais interessante, você pode chamar os métodos deposita e saca já existentes para fazer essa tarefa: class Conta { // atributos e métodos... boolean transfere(Conta destino, double valor) { boolean retirou = this.saca(valor); if (retirou == false) { // não deu pra sacar! return false; } else { destino.deposita(valor); return true; } } } Quando passamos uma Conta como argumento, o que será que acontece na memória? Será que o objeto é clonado? No Java, a passagem de parâmetro funciona como uma simples atribuição como no uso do "=". Então, esse parâmetro vai copiar o valor da variável do tipo Conta que for passado como argumento. E qual é o valor de uma variável dessas? Seu valor é um endereço, uma referência, nunca um objeto. Por isso não há cópia de objetos aqui. Esse último código poderia ser escrito com uma sintaxe muito mais sucinta. Como? Transfere Para Perceba que o nome deste método poderia ser transferePara ao invés de só transfere. A chamada do método fica muito mais natural, é possível ler a frase em português que ela tem um sentido: conta1.transferePara(conta2, 50); A leitura deste código seria "Conta1 transfere para conta2 50 reais". Continuando com atributos As variáveis do tipo atributo, diferentemente das variáveis temporárias (declaradas dentro de um método), recebem um valor padrão. No caso numérico, valem 0, no caso de boolean, valem false. Você também pode dar valores default, como segue: class Conta { int numero = 1234; String dono = "Duke"; String cpf = "123.456.789-10"; double saldo = 1000; double limite = 1000; } Nesse caso, quando você criar uma conta, seus atributos já estão "populados" com esses valores colocados. Imagine que comecemos a aumentar nossa classe Conta e adicionar nome, sobrenome e cpf do cliente dono da conta. Começaríamos a ter muitos atributos... e, se você pensar direito, uma Conta não tem nome, nem sobrenome nem cpf, quem tem esses atributos é um Cliente. Então podemos criar uma nova classe e fazer uma composição Seus atributos também podem ser referências para outras classes. Suponha a seguinte classe Cliente: lass Cliente { String nome; String sobrenome; String cpf; } class Conta { int numero; double saldo; double limite; Cliente titular; // .. } E dentro do main da classe de teste: class Teste { public static void main(String[] args) { Conta minhaConta = new Conta(); Cliente c = new Cliente(); minhaConta.titular = c; // ... } } Aqui, simplesmente houve uma atribuição. O valor da variável c é copiado para o atributo titular do objeto ao qual minhaConta se refere. Em outras palavras, minhaContatem uma referência ao mesmo Cliente que c se refere, e pode ser acessado através deminhaConta.titular. Você pode realmente navegar sobre toda essa estrutura de informação, sempre usando o ponto: Cliente clienteDaMinhaConta = minhaConta.titular; clienteDaMinhaConta.nome = "Duke"; Ou ainda, pode fazer isso de uma forma mais direta e até mais elegante: minhaConta.titular.nome = "Duke"; Um sistema orientado a objetos é um grande conjunto de classes que vai se comunicar, delegando responsabilidades para quem for mais apto a realizar determinada tarefa. A classe Banco usa a classe Conta que usa a classe Cliente, que usa a classe Endereco. Dizemos que esses objetos colaboram, trocando mensagens entre si. Por isso acabamos tendo muitas classes em nosso sistema, e elas costumam ter um tamanho relativamente curto. Mas, e se dentro do meu código eu não desse new em Cliente e tentasse acessá-lo diretamente? class Teste { public static void main(String[] args) { Conta minhaConta = new Conta(); minhaConta.titular.nome = "Manoel"; // ... } } Quando damos new em um objeto, ele o inicializa com seus valores default, 0 para números, false para boolean e null para referências. null é uma palavra chave em java, que indica uma referência para nenhum objeto. Se, em algum caso, você tentar acessar um atributo ou método de alguém que está se referenciando para null, você receberá um erro durante a execução (NullPointerException, que veremos mais à frente). Da para perceber, então, que o newnão traz um efeito cascata, a menos que você dê um valor default (ou use construtores, que também veremos mais a frente): class Conta { int numero; double saldo; double limite; Cliente titular = new Cliente(); // quando chamarem new Conta, //havera um new Cliente para ele. } Com esse código, toda nova Conta criada já terá um novo Cliente associado, sem necessidade de instanciá-lo logo em seguida da instanciação de uma Conta. Qual alternativa você deve usar? Depende do caso: para toda nova Conta você precisa de um novo Cliente? É essa pergunta que deve ser respondida. Nesse nosso caso a resposta é não, mas depende do nosso problema. Atenção: para quem não está acostumado com referências, pode ser bastante confuso pensar sempre em como os objetos estão na memória para poder tirar as conclusões de o que ocorrerá ao executar determinado código, por mais simples que ele seja. Com tempo, você adquire a habilidade de rapidamente saber o efeito de atrelar as referências, sem ter de gastar muito tempo para isso. É importante, nesse começo, você estar sempre pensando no estado da memória. E realmente lembrar que, no Java "uma variável nunca carrega um objeto, e sim uma referência para ele" facilita muito. Para saber mais: Uma Fábrica de Carros Além do Banco que estamos criando, vamos ver como ficariam certas classes relacionadas a uma fábrica de carros. Vamos criar uma classe Carro, com certos atributos, que descrevem suas características, e com certos métodos, que descrevem seu comportamento. class Carro { String cor; String modelo; double velocidadeAtual; double velocidadeMaxima; //liga o carro void liga() { System.out.println("O carro está ligado"); } //acelera uma certa quantidade void acelera(double quantidade) { double velocidadeNova = this.velocidadeAtual + quantidade; this.velocidadeAtual = velocidadeNova; } //devolve a marcha do carro int pegaMarcha() { if (this.velocidadeAtual < 0) { return -1; } if (this.velocidadeAtual >= 0 && this.velocidadeAtual < 40) { return 1; } if (this.velocidadeAtual >= 40 && this.velocidadeAtual < 80) { return 2; } return 3; } } Vamos testar nosso Carro em um novo programa: class TestaCarro { public static void main(String[] args) { Carro meuCarro; meuCarro = new Carro(); meuCarro.cor = "Verde"; meuCarro.modelo = "Fusca"; meuCarro.velocidadeAtual = 0; meuCarro.velocidadeMaxima = 80; // liga o carro meuCarro.liga(); // acelera o carro meuCarro.acelera(20); System.out.println(meuCarro.velocidadeAtual); } } Nosso carro pode conter também um Motor: class Motor { int potencia; String tipo; } class Carro { String cor; String modelo; double velocidadeAtual; double velocidadeMaxima; Motor motor; // .. } Podemos, criar diversos Carros e mexer com seus atributos e métodos, assim como fizemos no exemplo do Banco. Um pouco mais... Quando declaramos uma classe, um método ou um atributo, podemos dar o nome que quisermos, seguindo uma regra. Por exemplo, o nome de um método não pode começar com um número. Pesquise sobre essas regras. Como você pode ter reparado, sempre damos nomes às variáveis com letras minúsculas. É que existem convenções de código, dadas pela Oracle, para facilitar a legibilidade do código entre programadores. Essa convenção é muito seguida. Leia sobre ela pesquisando por "java code conventions". É necessário usar a palavra chave this quando for acessar um atributo? Para que, então, utilizá-la? O exercício a seguir pedirá para modelar um "funcionário". Existe um padrão para representar suas classes em diagramas, que é amplamente utilizado, chamado UML. Pesquise sobre ele.
  5. Olá Galera, aqui é o panda! Vamos para Aula de Numero 04, Variáveis e fluxo! Comentem e deixe o feedback de vocês! Dentro de um bloco, podemos declarar variáveis e usá-las. Em Java, toda variável tem um tipo que não pode ser mudado, uma vez que declarado: tipoDaVariavel nomeDaVariavel; Por exemplo, é possível ter uma idade que guarda um número inteiro: int idade; Com isso, você declara a variável idade, que passa a existir a partir daquela linha. Ela é do tipo int, que guarda um número inteiro. A partir daí, você pode usá-la, primeiramente atribuindo valores. A linha a seguir é a tradução de: "idade deve valer quinze". idade = 15; Comentários em Java Para fazer um comentário em java, você pode usar o // para comentar até o final da linha, ou então usar o /* */ para comentar o que estiver entre eles. /* comentário daqui, ate aqui */ // uma linha de comentário sobre a idade int idade; Além de atribuir, você pode utilizar esse valor. O código a seguir declara novamente a variável idade com valor 15 e imprime seu valor na saída padrão através da chamada a System.out.println. // declara a idade int idade; idade = 15; // imprime a idade System.out.println(idade); Por fim, podemos utilizar o valor de uma variável para algum outro propósito, como alterar ou definir uma segunda variável. O código a seguir cria uma variável chamada idadeNoAnoQueVem com valor de idade mais um. / calcula a idade no ano seguinte int idadeNoAnoQueVem; idadeNoAnoQueVem = idade + 1; No mesmo momento que você declara uma variável, também é possível inicializá-la por praticidade: int idade = 15; Você pode usar os operadores +, -, / e * para operar com números, sendo eles responsáveis pela adição, subtração, divisão e multiplicação, respectivamente. Além desses operadores básicos, há o operador % (módulo) que nada mais é que o resto de uma divisão inteira. Veja alguns exemplos: nt quatro = 2 + 2; int tres = 5 - 2; int oito = 4 * 2; int dezesseis = 64 / 4; int um = 5 % 2; // 5 dividido por 2 dá 2 e tem resto 1; // o operador % pega o resto da divisão inteira Como rodar esses códigos? Você deve colocar esses trechos de código dentro do bloco main que vimos no capítulo anterior. Isto é, isso deve ficar no miolo do programa. Use bastante System.out.println, dessa forma você pode ver algum resultado, caso contrário, ao executar a aplicação, nada aparecerá. Por exemplo, para imprimir a idade e a idadeNoAnoQueVem podemos escrever o seguinte programa de exemplo: class TestaIdade { public static void main(String[] args) { // imprime a idade int idade = 20; System.out.println(idade); // gera uma idade no ano seguinte int idadeNoAnoQueVem; idadeNoAnoQueVem = idade + 1; // imprime a idade System.out.println(idadeNoAnoQueVem); } } Representar números inteiros é fácil, mas como guardar valores reais, tais como frações de números inteiros e outros? Outro tipo de variável muito utilizado é o double, que armazena um número com ponto flutuante (e que também pode armazenar um número inteiro). double pi = 3.14; double x = 5 * 10; O tipo boolean armazena um valor verdadeiro ou falso, e só: nada de números, palavras ou endereços, como em algumas outras linguagens. boolean verdade = true; true e false são palavras reservadas do Java. É comum que um boolean seja determinado através de uma expressão booleana, isto é, um trecho de código que retorna um booleano, como o exemplo: int idade = 30; boolean menorDeIdade = idade < 18; O tipo char guarda um, e apenas um, caractere. Esse caractere deve estar entre aspas simples. Não se esqueça dessas duas características de uma variável do tipo char! Por exemplo, ela não pode guardar um código como '' pois o vazio não é um caractere! char letra = 'a'; System.out.println(letra); Variáveis do tipo char são pouco usadas no dia a dia. Veremos mais a frente o uso das Strings, que usamos constantemente, porém estas não são definidas por um tipo primitivo. Tipos primitivos e valores Esses tipos de variáveis são tipos primitivos do Java: o valor que elas guardam são o real conteúdo da variável. Quando você utilizar o operador de atribuição = o valor será copiado. int i = 5; // i recebe uma cópia do valor 5 int j = i; // j recebe uma cópia do valor de i i = i + 1; // i vira 6, j continua 5 Aqui, i fica com o valor de 6. Mas e j? Na segunda linha, j está valendo 5. Quando i passa a valer 6, será que j também muda de valor? Não, pois o valor de um tipo primitivo sempre é copiado. Apesar da linha 2 fazer j = i, a partir desse momento essas variáveis não tem relação nenhuma: o que acontece com uma, não reflete em nada com a outra. Outros tipos primitivos Vimos aqui os tipos primitivos que mais aparecem. O Java tem outros, que são o byte, short,long e float. Cada tipo possui características especiais que, para um programador avançado, podem fazer muita diferença. Casting e promoção Alguns valores são incompatíveis se você tentar fazer uma atribuição direta. Enquanto um número real costuma ser representado em uma variável do tipo double, tentar atribuir ele a uma variável int não funciona porque é um código que diz: "i deve valer d", mas não se sabe se d realmente é um número inteiro ou não. double d = 3.1415; int i = d; // não compila O mesmo ocorre no seguinte trecho: int i = 3.14; O mais interessante, é que nem mesmo o seguinte código compila: double d = 5; // ok, o double pode conter um número inteiro int i = d; // não compila Apesar de 5 ser um bom valor para um int, o compilador não tem como saber que valor estará dentro desse double no momento da execução. Esse valor pode ter sido digitado pelo usuário, e ninguém vai garantir que essa conversão ocorra sem perda de valores. Já no caso a seguir, é o contrário: int i = 5; double d2 = i; O código acima compila sem problemas, já que um double pode guardar um número com ou sem ponto flutuante. Todos os inteiros representados por uma variável do tipo int podem ser guardados em uma variável double, então não existem problemas no código acima. Às vezes, precisamos que um número quebrado seja arredondado e armazenado num número inteiro. Para fazer isso sem que haja o erro de compilação, é preciso ordenar que o número quebrado seja moldado (casted) como um número inteiro. Esse processo recebe o nome de casting. double d3 = 3.14; int i = (int) d3; O casting foi feito para moldar a variável d3 como um int. O valor de i agora é 3. O mesmo ocorre entre valores int e long. long x = 10000; int i = x; // não compila, pois pode estar perdendo informação E, se quisermos realmente fazer isso, fazemos o casting: long x = 10000; int i = (int) x; Alguns castings aparecem também: float x = 0.0; O código acima não compila pois todos os literais com ponto flutuante são considerados double pelo Java. E float não pode receber um double sem perda de informação, para fazer isso funcionar podemos escrever o seguinte: float x = 0.0f; A letra f, que pode ser maiúscula ou minúscula, indica que aquele literal deve ser tratado como float. Outro caso, que é mais comum: double d = 5; float f = 3; float x = f + (float) d; Você precisa do casting porque o Java faz as contas e vai armazenando sempre no maior tipo que apareceu durante as operações, no caso o double. E, uma observação: no mínimo, o Java armazena o resultado em um int, na hora de fazer as contas. Até casting com variáveis do tipo char podem ocorrer. O único tipo primitivo que não pode ser atribuído a nenhum outro tipo é o boolean. Castings possíveis Abaixo estão relacionados todos os casts possíveis na linguagem Java, mostrando a conversão de um valor para outro. A indicação Impl. quer dizer que aquele cast é implícito e automático, ou seja, você não precisa indicar o cast explicitamente (lembrando que o tipo boolean não pode ser convertido para nenhum outro tipo). Tamanho dos tipos Na tabela abaixo, estão os tamanhos de cada tipo primitivo do Java. O if e o else A sintaxe do if no Java é a seguinte: if (condicaoBooleana) { codigo; } Uma condição booleana é qualquer expressão que retorne true ou false. Para isso, você pode usar os operadores <, >, <=, >= e outros. Um exemplo: int idade = 15; if (idade < 18) { System.out.println("Não pode entrar"); } Além disso, você pode usar a cláusula else para indicar o comportamento que deve ser executado no caso da expressão booleana ser falsa: int idade = 15; if (idade < 18) { System.out.println("Não pode entrar"); } else { System.out.println("Pode entrar"); } Você pode concatenar expressões booleanas através dos operadores lógicos "E" e "OU". O "E" é representado pelo && e o "OU" é representado pelo ||. Um exemplo seria verificar se ele tem menos de 18 anos e se ele não é amigo do dono: int idade = 15; boolean amigoDoDono = true; if (idade < 18 && amigoDoDono == false) { System.out.println("Não pode entrar"); } else { System.out.println("Pode entrar"); } Esse código poderia ficar ainda mais legível, utilizando-se o operador de negação, o !. Esse operador transforma o resultado de uma expressão booleana de false para truee vice versa. int idade = 15; boolean amigoDoDono = true; if (idade < 18 && !amigoDoDono) { System.out.println("Não pode entrar"); } else { System.out.println("Pode entrar"); } Repare na linha 3 que o trecho amigoDoDono == false virou !amigoDoDono. Eles têm o mesmo valor. Para comparar se uma variável tem o mesmo valor que outra variável ou valor, utilizamos o operador ==. Repare que utilizar o operador = dentro de um if vai retornar um erro de compilação, já que o operador = é o de atribuição. int mes = 1; if (mes == 1) { System.out.println("Você deveria estar de férias"); } O While O while é um comando usado para fazer um laço (loop), isto é, repetir um trecho de código algumas vezes. A ideia é que esse trecho de código seja repetido enquanto uma determinada condição permanecer verdadeira. int idade = 15; while (idade < 18) { System.out.println(idade); idade = idade + 1; } O trecho dentro do bloco do while será executado até o momento em que a condição idade < 18 passe a ser falsa. E isso ocorrerá exatamente no momento em que idade == 18, o que não o fará imprimir 18. int i = 0; while (i < 10) { System.out.println(i); i = i + 1; } Já o while acima imprime de 0 a 9. O For Outro comando de loop extremamente utilizado é o for. A ideia é a mesma do while: fazer um trecho de código ser repetido enquanto uma condição continuar verdadeira. Mas além disso, o for isola também um espaço para inicialização de variáveis e o modificador dessas variáveis. Isso faz com que fiquem mais legíveis, as variáveis que são relacionadas ao loop: for (inicializacao; condicao; incremento) { codigo; } Um exemplo é o a seguir: for (int i = 0; i < 10; i = i + 1) { System.out.println("olá!"); } Repare que esse for poderia ser trocado por: int i = 0; while (i < 10) { System.out.println("olá!"); i = i + 1; } Porém, o código do for indica claramente que a variável i serve, em especial, para controlar a quantidade de laços executados. Quando usar o for? Quando usar o while? Depende do gosto e da ocasião. Pós incremento ++ i = i + 1 pode realmente ser substituído por i++ quando isolado, porém, em alguns casos, temos essa instrução envolvida em, por exemplo, uma atribuição: int i = 5; int x = i++; Qual é o valor de x? O de i, após essa linha, é 6. O operador ++, quando vem após a variável, retorna o valor antigo, e incrementa (pós incremento), fazendo x valer 5. Se você tivesse usado o ++ antes da variável (pré incremento), o resultado seria 6: int i = 5; int x = ++i; // aqui x valera 6 Controlando loops Apesar de termos condições booleanas nos nossos laços, em algum momento, podemos decidir parar o loop por algum motivo especial sem que o resto do laço seja executado. for (int i = x; i < y; i++) { if (i % 19 == 0) { System.out.println("Achei um número divisível por 19 entre x e y"); break; } } O código acima vai percorrer os números de x a y e parar quando encontrar um número divisível por 19, uma vez que foi utilizada a palavra chave break. Da mesma maneira, é possível obrigar o loop a executar o próximo laço. Para isso usamos a palavra chave continue. for (int i = 0; i < 100; i++) { if (i > 50 && i < 60) { continue; } System.out.println(i); } O código acima não vai imprimir alguns números. (Quais exatamente?) Escopo das variáveis No Java, podemos declarar variáveis a qualquer momento. Porém, dependendo de onde você as declarou, ela vai valer de um determinado ponto a outro. // aqui a variável i não existe int i = 5; // a partir daqui ela existe O escopo da variável é o nome dado ao trecho de código em que aquela variável existe e onde é possível acessá-la. Quando abrimos um novo bloco com as chaves, as variáveis declaradas ali dentro só valem até o fim daquele bloco. // aqui a variável i não existe int i = 5; // a partir daqui ela existe while (condicao) { // o i ainda vale aqui int j = 7; // o j passa a existir } // aqui o j não existe mais, mas o i continua dentro do escopo No bloco acima, a variável j pára de existir quando termina o bloco onde ela foi declarada. Se você tentar acessar uma variável fora de seu escopo, ocorrerá um erro de compilação. O mesmo vale para um if: if (algumBooleano) { int i = 5; } else { int i = 10; } System.out.println(i); // cuidado! Aqui a variável i não existe fora do if e do else! Se você declarar a variável antes do if, vai haver outro erro de compilação: dentro do if e do else a variável está sendo redeclarada! Então o código para compilar e fazer sentido fica: int i; if (algumBooleano) { i = 5; } else { i = 10; } System.out.println(i); Uma situação parecida pode ocorrer com o for: for (int i = 0; i < 10; i++) { System.out.println("olá!"); } System.out.println(i); // cuidado! Neste for, a variável i morre ao seu término, não podendo ser acessada de fora do for, gerando um erro de compilação. Se você realmente quer acessar o contador depois do loop terminar, precisa de algo como: int i; for (i = 0; i < 10; i++) { System.out.println("olá!"); } System.out.println(i); Um bloco dentro do outro Um bloco também pode ser declarado dentro de outro. Isto é, um if dentro de um for, ou um for dentro de um for, algo como: while (condicao) { for (int i = 0; i < 10; i++) { // código } } Para saber mais Vimos apenas os comandos mais usados para controle de fluxo. O Java ainda possui o do..while e o switch. Pesquise sobre eles e diga quando é interessante usar cada um deles. Algumas vezes, temos vários laços encadeados. Podemos utilizar o break para quebrar o laço mais interno. Mas, se quisermos quebrar um laço mais externo, teremos de encadear diversos ifs e seu código ficará uma bagunça. O Java possui um artifício chamado labeled loops; pesquise sobre eles. O que acontece se você tentar dividir um número inteiro por 0? E por 0.0? Existe um caminho entre os tipos primitivos que indicam se há a necessidade ou não de casting entre os tipos. Por exemplo, int -> long -> double (um int pode ser tratado como um double, mas não o contrário). Pesquise (ou teste), e posicione os outros tipos primitivos nesse fluxo. Além dos operadores de incremento, existem os de decremento, como --i e i--. Além desses, você pode usar instruções do tipo i += x e i -= x, o que essas instruções fazem? Teste.
  6. Olá Galera, aqui é o panda! Vamos para Aula de Numero 02, Instalando o Java! Comentem e deixe o feedback de vocês! Há muitas empresas que implementam uma VM do Java, como a própria Oracle, a IBM, a Apache e outros. Apesar da VM da Oracle ser a mais usada e possuir versões para Windows, Linux e Solaris, para cada OS diferente o processo de instalação varia. Siga aqui os passos de instalação de uma VM no sistema operacional que você usa: Linux, Mac OSX ou Windows: Linux No Ubuntu o processo de instalação mais rápido e simples é o do open-jdk, uma implementação open source do JDK: sudo apt-get install openjdk-7-jdk No Linux Fedora você pode instalar com: su -c "yum install java-1.7.0-openjdk" Após a instalação no seu Linux teste seu java com os comandos: javac -version java -version Mac OSX No Mac OSX você pode baixar a versão 1.7 do Java SDK em http://jdk7.java.net/macportpreview/ Após executar o instalador, será necessário entrar no painel de Preferences, Java Preferences e alterar a versão do Java para a nova que você acaba de instalar. Após a instalação no seu Mac OSX teste seu java com os comandos : javac -version java -version Windows Por fim, para instalar o SDK do Windows, acesse: http://www.oracle.com/technetwork/java/ Dentre os top downloads, escolha o Java SE: http://www.oracle.com/technetwork/java/javase/downloads/index.html Escolha então o JDK (Java Development Kit) e por fim a versão de seu sistema operacional. Execute o arquivo jdk-versão-windows-arquitetura-p.exe e passe pelo wizard de instalação. O registro de sua VM no site da Oracle é opcional. Clique agora com o botão da direita sobre o Computador, escolha Propriedades. Na aba Configurações Avançadas do Sistema clique em Variáveis de Ambiente. Aqui, dependendo da sua versão do Windows, as coisas podem variar um pouco, mas se tiver alguma dúvida entre em contato conosco pelo fórum! Clique no botão Novo para adicionar uma nova variável do sistema: seu nome é JAVA_HOME (tudo maiúsculo) e seu valor será o diretório onde instalou o Java (provavelmente algo como C:\Program Files\Java\jdk1.7.0_03). Agora vamos alterar a variável do sistema PATH (ou Path). Não crie uma variável nova, altere a variável PATH que já existe. Escolha ela e clique em Editar. No final do valor atual complemente com o valor %JAVA_HOME%\bin. Não se esqueça do ponto e vírgula que separa o path anterior desse novo path que estamos colocando. Caso já houvesse, por exemplo, o valor %SystemRoot%\system32 na variável do sistema PATH, o valor final ficaria %SystemRoot%\system32;%JAVA_HOME%\bin. Pronto, feche todas as janelas e abra o prompt, indo em Iniciar, Executar e digite cmd. Após a instalação no seu Windows teste seu java com os comandos: java -version javac -version
  7. Fala galera, andei sumido do fórum, mas estou voltando com força total, irei postar uma serie de postagens que é um curso completo de java. Iremos iniciar com java primeiros passos, passar para Orientação a Objetos e analise de erros. Será apenas textual por hora, mas em breve todos esses textos iremos te vídeos. E em cada texto terá um Questionário ou exercícios para vocês fazerem lab, afinal só aprendemos a programar praticando. Irei postar ainda hoje todo conteúdo de java primeiros passos, e ja estou preparando o Orientação a Objeto. A linguagem Java Entender um pouco da história da plataforma Java é muito importante para enxergar os motivos que a levaram ao sucesso. Quais eram os maiores problemas para programadores na década de 1990? ponteiros? gerenciamento de memória? organização? falta de bibliotecas? ter de reescrever parte do código ao mudar de sistema operacional? custo financeiro de usar a tecnologia? A linguagem Java resolve bem esses problemas, que até então apareciam com frequência nas outras linguagens. Alguns desses problemas foram particularmente atacados porque uma das grandes motivações para a criação da plataforma Java era de que essa linguagem fosse usada em pequenos dispositivos, como tvs, videocassetes, aspiradores, liquidificadores e outros. Apesar disso a linguagem teve seu lançamento focado no uso em clientes web (browsers) para rodar pequenas aplicações (applets). Hoje em dia esse não é o grande mercado do Java: apesar de ter sido idealizado com um propósito e lançado com outro, o Java ganhou destaque no lado do servidor. O Java foi criado pela Sun (http://www.sun.com) e mantida através de um comitê (http://www.jcp.org). Seu site principal era o java.sun.com, e java.com um site mais institucional, voltado ao consumidor de produtos e usuários leigos, não desenvolvedores. Com a compra da Sun pela Oracle em 2009, muitas URLs e nomes tem sido trocados para refletir a marca da Oracle. A página principal do Java é: http://www.oracle.com/technetwork/java/. No Brasil, diversos grupos de usuários se formaram para tentar disseminar o conhecimento da linguagem. Um deles é o GUJ (http://www.guj.com.br), uma comunidade virtual com artigos, tutoriais e fórum para tirar dúvidas, o maior em língua portuguesa com mais de cem mil usuários e 1 milhão de mensagens. Encorajamos todos os alunos a usar muito os fóruns do mesmo, pois é uma das melhores maneiras para achar soluções para pequenos problemas que acontecem com grande frequência. Máquina Virtual Em uma linguagem de programação como C e Pascal, temos a seguinte situação quando vamos compilar um programa: o código fonte é compilado para código de máquina específico de uma plataforma e sistema operacional. Muitas vezes o próprio código fonte é desenvolvido visando uma única plataforma! Esse código executável (binário) resultante será executado pelo sistema operacional e, por esse motivo, ele deve saber conversar com o sistema operacional em questão. Isto é, temos um código executável para cada sistema operacional. É necessário compilar uma vez para Windows, outra para o Linux, e assim por diante, caso a gente queira que esse nosso software possa ser utilizado em várias plataformas. Esse é o caso de aplicativos como o OpenOffice, Firefox e outros. Na maioria das vezes, a sua aplicação se utiliza das bibliotecas do sistema operacional, como, por exemplo, a de interface gráfica para desenhar as "telas". A biblioteca de interface gráfica do Windows é bem diferente das do Linux: como criar então uma aplicação que rode de forma parecida nos dois sistemas operacionais? Precisamos reescrever um mesmo pedaço da aplicação para diferentes sistemas operacionais, já que eles não são compatíveis. Já o Java utiliza do conceito de máquina virtual, onde existe, entre o sistema operacional e a aplicação, uma camada extra responsável por "traduzir" - mas não apenas isso - o que sua aplicação deseja fazer para as respectivas chamadas do sistema operacional onde ela está rodando no momento. Dessa forma, a maneira com a qual você abre uma janela no Linux ou no Windows é a mesma: você ganha independência de sistema operacional. Ou, melhor ainda, independência de plataforma em geral: não é preciso se preocupar em qual sistema operacional sua aplicação está rodando, nem em que tipo de máquina, configurações, etc. Repare que uma máquina virtual é um conceito bem mais amplo que o de um interpretador. Como o próprio nome diz, uma máquina virtual é como um "computador de mentira": tem tudo que um computador tem. Em outras palavras, ela é responsável por gerenciar memória, threads, a pilha de execução, etc. Sua aplicação roda sem nenhum envolvimento com o sistema operacional! Sempre conversando apenas com a Java Virtual Machine (JVM). Essa característica é interessante: como tudo passa pela JVM, ela pode tirar métricas, decidir onde é melhor alocar a memória, entre outros. Uma JVM isola totalmente a aplicação do sistema operacional. Se uma JVM termina abruptamente, só as aplicações que estavam rodando nela irão terminar: isso não afetará outras JVMs que estejam rodando no mesmo computador, nem afetará o sistema operacional. Essa camada de isolamento também é interessante quando pensamos em um servidor que não pode se sujeitar a rodar código que possa interferir na boa execução de outras aplicações. Essa camada, a máquina virtual, não entende código java, ela entende um código de máquina específico. Esse código de máquina é gerado por um compilador java, como o javac, e é conhecido por "bytecode", pois existem menos de 256 códigos de operação dessa linguagem, e cada "opcode" gasta um byte. O compilador Java gera esse bytecode que, diferente das linguagens sem máquina virtual, vai servir para diferentes sistemas operacionais, já que ele vai ser "traduzido" pela JVM. Momento lab! 1- Qual a Importancia do Java? 2- Cite Três Aplicações do Java!
  8. O Mentawai foi o primeiro framework web MVC em Java a adotar, implementar, documentar e incentivar todo e qualquer tipo de configuração (actions, filtros, validação, listas, connection pooling, ioc, di, etc.) única e exclusivamente através de configuração programática (100% Java), abolindo por completo o uso de XML e Annotations para as configurações. O framework nasceu em junho de 2005 e logo depois foi publicado um artigo no site JavaWorld enfatizando o uso de configuração programática para o controlador MVC (actions/resultados/conseqüências) assim como para validação. Nascia aí o ApplicationManager: configuração em código Java independente do restante da sua aplicação e centralizada numa única classe. Para o desenvolvimento de nossos exemplos, você pode utilizar a IDE que desejar, e como servidor de páginas, sugiro a utilização do Apache Tomcat. A versão atual do Mentawai é a 2.5.4 e o jar da do framework pode ser baixado aqui. O primeiro passo é criarmos a aplicação em si. Se estiver usando o Eclipse, é um projeto Dynamic Web Project e se estiver utilizando o Netbeans, é um projeto Java Web -> Aplicação Web. Com o projeto criado, vamos colocar adicionar o jar do Mentawai ao projeto (a própria IDE tem métodos de adicioná-lo, ou então coloque dentro de WEB-INF/lib. Agora, devemos configurar o arquivo web.xml, que fica dentro da pasta WEB-INF. Se ele não existe, crie-o. <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>Controller</servlet-name> <servlet-class>org.mentawai.core.Controller</servlet-class> <init-param> <param-name>applicationManager</param-name> <param-value>net.rafaeltoledo.helloworld.ApplicationManager</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Controller</servlet-name> <url-pattern>*.mtw</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>username.jsp</welcome-file> </welcome-file-list> </web-app> No arquivo, definimos o Controller do Mentawai com o parâmeto servlet, inicializando com o nosso applicationManager. No Mentawai, é ele quem realizará as configurações das Actions – classes que realizam a lógica do aplicativo. No nosso caso, ela estará no pacote net.rafaeltoledo.helloworld. Em seguida, definimos em servlet-mapping qual será a extensão das nossas Actions – .mtw. Assim, uma Action de cadastrar usuário terá um nome como CadastrarUsuario.mtw. Por fim, definimos o arquivo de “boas-vindas”, que será o primeiro a ser chamado ao executar o endereço: username.jsp. Bom, vamos começar criando uma Action que simplesmente pegará o nome do usuário e o devolverá em letras maiúsculas. Crie o arquivo HelloAction no pacote net.rafaeltoledo.helloworld. O arquivo conterá o seguinte: package examples.helloworld; import org.mentawai.core.BaseAction; public class HelloAction extends BaseAction { @Override public String execute() throws Exception { String username = input.getString("username"); if (username == null || username.trim().equals("")) { return ERROR; } output.setValue("username", username.toUpperCase()); return SUCCESS; } } A classe estende a classe BaseAction, definida pelo framework. Essa classe já possui métodos para processamento, filtros, e uma série de funcionalidades que podem ser realizadas, como validação. No nosso exemplo, vamos sobrescrever somente o método execute() que é responsável pelo processamento propriamente dito. A action possui os elementos input e output que correspondem aos dados vindos da JSP e o local onde os dados processados serão colocados, respectivamente. Ao terminar a execução, a Action retorna um valor SUCCESS ou ERROR (ou outro valor definido pelo usuário, se for o caso) que indicará se o resultado do processamento teve êxito. No nosso exemplo, obtemos um valor String do formulário, sob o nome de username, sendo obtido através do método getString(). Se o valor não for nulo ou vazio, a String é retornada com seus caracteres em maiúsculo com o método setValue. O próximo passo, é criarmos o nosso Application Manager. Crie a classe ApplicationManager dentro do pacote net.rafaeltoledo.helloworld. A classe terá esse conteúdo: package examples.helloworld; import org.mentawai.core.ActionConfig; import org.mentawai.core.Forward; public class ApplicationManager extends org.mentawai.core.ApplicationManager { @Override public void loadActions() { ActionConfig ac = new ActionConfig("/HelloWorld", HelloAction.class); ac.addConsequence(SUCCESS, new Forward("/hello.jsp")); ac.addConsequence(ERROR, new Forward("/username.jsp")); addActionConfig(ac); } } O nosso ApplicationManager estenderá o ApplicationManager do framework Mentawai. Com isso, sobrescreveremos o método loadActions() que realiza as configurações sobre o comportamento das Actions. Em nosso exemplo, definimos o nome da Action como HelloWorld no construtor da classe ActionConfig (responsável pela configuração propriamente dita) e que essa Action será representada pela classe definida em HelloAction.class (a nossa Action). Em seguida, definimos as consequências, ou seja, o que a Action fará a cada possível saída. Se caso o retorno for SUCCESS, direcionaremos a navegação para hello.jsp (a classe Forward faz o redirecionamento) e, caso for ERROR, voltamos para username.jsp. Por fim, adicionamos a configuração com o método addActionConfig(). O próximo e último passo é criar as duas JSPs. Se você não tem familiaridade com elas, fique tranquilo, pois sua sintaxe compartilha de muitas tags do HTML padrão. No nosso caso, ainda usaremos algumas tags extras do Mentawai. Vamos criar primeiro o arquivo username.jsp na raiz do diretório de páginas web. <%@ taglib uri="http://www.mentaframework.org/tags-mtw/" prefix="mtw" %> <body> <h1>Olá Mentawai!</h1> <mtw:form> Digite seu nome: <mtw:input name="username" size="25"/> <mtw:submit value="Enviar" action="/HelloWorld.mtw" method="post"/> </mtw:form> </body> É um formulário bastante simples, com um campo chamado username e um botão com a identificação Enviar. O que temos de “diferente” é a inclusão da taglib, para que possamos utilizar as tags do Mentawai, e que os elementos específicos do Mentawai, tem o prefixo de mtw:. Definimos que ao clicarmos no botão, será chamada a Action HelloWorld.mtw. Vamos agora criar o arquivo hello.jsp: <%@ taglib uri="http://www.mentaframework.org/tags-mtw/" prefix="mtw" %> <html> <body> <h3>Olá, <mtw:out value="username" />!</h3> </body> </html> Nesta página, exibimos com a tag mtw:eek:ut o valor username. Pronto! É só isso! Agora basta jogar no servidor (geralmente a IDE fará isso automaticamente quando você mandar executar) e acessar em seu navegador localhost:8080/<nome-do-aplicativo> (obs: o valor da porta pode mudar, de acordo com a sua configuração). Fonte: http://www.rafaeltoledo.net/tutorial-mentawai-1-criando-uma-aplicacao/
  9. Entrevista com Programadores da Webcheat Hoje teremos o nosso programador Newt Scamander, então bora lá! Perguntas sobre um pouco da sua vida de programador Pergunta: Como você conheceu a WebCheats? Resposta: Acho que foi em Meados de 2012, assim como a grande maioria procurava hacks para jogos. Pergunta: Qual a origem de seu nick? Resposta: Já tive vários nicks, muito mesmos, atualmente Newt Scamander é referência ao personagem principal de Animais Fantásticos e onde Habitam, filme que gosto muito. Pergunta: Com quantos anos você começou a programar? e como você conheceu a programação? Resposta: Não lembro exatamente quantos anos, desde de pequeno já gostava de procurar sobre esse conteúdo na internet, com 12 anos já esboçava meus primeiros programas. Mas foi só com 16 mesmo, quando entrei no Técnico que de fato comecei mais a fundo programar. Pergunta: Qual a sua linguagem favorita? Resposta: Hoje eu digo que é Java, mas tenho vontade de aprender outras. Pergunta: Tem alguma linguagem que você tem mais dificuldades? Resposta: C++, talvez por não gostar dela rs. Pergunta: Qual projeto te deixou mais orgulhoso em fazer? e em que linguagem foi? Resposta: Meus projetos são em grande maioria acadêmicos, trabalhos da faculdade. Fiz um em Java que calculava o nível de embriaguez do usuário baseado em perguntas lógicas. Fiz uma aplicação Android que é possível salvar recordações (fotos e textos) e depois acessá-las facilmente. Enfim, tudo nessa linha ai. Pergunta: Você trabalha atualmente com programação ou é um hobby ? Resposta: Trabalho com Teste de Softwares. Pergunta: Para quem este interessado em ser um programador, que dicas você poderia dar para quem quer iniciar nesse área? Resposta: Estudar. Não tem como fugir disso. E tem que ser com vontade, se não tiver nem dianta começar. Caçar conhecimento mesmo. Pergunta: Em que plataforma voce programa: Windows, Linux ou Mac? Resposta: Depende. Tenho Linux e Windows, algumas coisas faço no Windows mesmo, mas meu ambiente de programação é no Linux. Pergunta: Se voce criasse uma nova linguagem de programação, como ela se chamaria? Resposta: Não tenho criatividade pra isso não haha. Seria bem ruim... algo do tipo: "UmpaLumpa" Alguns post do Newt Scamander Generating a PDF Document [ GERANDO UM DOCUMENTO PDF] Mais de 50 Livros de TI que podem ser baixados de graça Qual o "melhor" software você já desenvolveu? Simple Test (Teste Simples) Cheque a integridade de seus dados na Internet Gostou, achou interessante, comente e participe, veja a lista dos entrevistados aqui! :cool: Abçs!
  10. Xorgen Crypt usage: XorStr<0xBD,8,0xB4A8AAAF>("\xF1\xDB\xDE\xB6\xA8\xAC\xA4"+0xB4A8AAAF).s var symbols = " !\"#$%&'()*+'-./0123456789:;<=>[email protected]"; function toAscii (xx) { var loAZ = "abcdefghijklmnopqrstuvwxyz"; symbols+= loAZ.toUpperCase(); symbols+= "[\\]^_`"; symbols+= loAZ; symbols+= "{|}~"; var loc; loc = symbols.indexOf(xx); if (loc >-1) { Ascii_Decimal = 32 + loc; return (32 + loc); } return(0); // If not in range 32-126 return ZERO } function Dec2Hex(Decimal) { var hexChars = "0123456789ABCDEF"; var a = Decimal % 16; var b = (Decimal - a)/16; hex = "" + hexChars.charAt(b) + hexChars.charAt(a); L = hexChars.charAt(a); H = hexChars.charAt(b); return hex; } function randByte() { return Math.floor(Math.random()*256%256); } function blub(form) { s1 = form.inp.value; xvaluestart = randByte(); xrefkill = "0x" + Dec2Hex(randByte()) + Dec2Hex(randByte()) + Dec2Hex(randByte()) + Dec2Hex(randByte()); finallen = s1.length+1; hexsequence = '"'; xvalue = xvaluestart; for(i=0;i<s1.length;i++) { ch = s1.substr(i,1); var chval; if(ch=="\\"){ i++; ch = s1.substr(i,1); if(ch=="0") { chval = 0; } else if(ch=="\\") { chval = toAscii("\\"); } else if(ch=="a") { chval = 7; } else if(ch=="b") { chval = 8; } else if(ch=="t") { chval = 9; } else if(ch=="n") { chval = 10; } else if(ch=="v") { chval = 11; } else if(ch=="f") { chval = 12; } else if(ch=="r") { chval = 13; } else { javascript:alert("invalid control sequence: \\"+ch); } --finallen; } else if(ch=="|"){ chval=0; } else { chval = toAscii(ch); if(chval==0) { form.ans.value = "invalid character: "+ch; return; } } chval ^=xvalue; xvalue += 1; xvalue %= 256; hexsequence += "\\x"+ Dec2Hex(chval); } hexsequence += '"'; s2 = "/*"+s1+"*/XorStr<0x" + Dec2Hex(xvaluestart) + "," + finallen + ","+xrefkill+'>(' s2 += hexsequence + "+" + xrefkill + ").s"; form.ans.value = s2; form.ans.focus(); form.ans.select(); }
  11. Bom eu comecei esse projeto hoje, prometo trazer ele pronto até o fim do ano! Com sistemas de login/cadastro/change profile/watch/Continuar assistindo/fila Projeto no github : https://github.com/kaway404/netflix Imagem do ilustrando o layout: A cada alteração vou colocando logs aqui e no github! Obrigado pessoal
  12. Java Como Programar (Português) por Paul Deitel (Autor),‎ Harvey Deitel (Autor) Descrição: Milhões de alunos e profissionais aprenderam programação e desenvolvimento de software com os livros Deitel. Java: como programar, 10ª edição, fornece uma introdução clara, simples, envolvente e divertida à programação Java com ênfase inicial em objetos. Destaques incluem: rica cobertura dos fundamentos com exemplos reais; apresentação com ênfase inicial em classes e objetos; uso com Java SE 7, Java SE 8 ou ambos; Java SE 8 abordado em seções modulares opcionais; lambdas, fluxos e interfaces funcionais usando métodos padrão e estáticos do Java SE 8; Swing e GUI do JavaFX: elementos gráficos e multimídia; conjunto de exercícios "Fazendo a diferença"; tratamento de exceções integrado; arquivos, fluxos e serialização de objetos; concorrência para melhor desempenho com multiprocessamento; o livro contém o conteúdo principal para cursos introdutórios; outros tópicos: recursão, pesquisa, classificação, coleções genéricas, estruturas de dados, multithreading, banco de dados (JDBC e JPA). DOWNLOAD via GOOGLE DRIVE [Hidden Content]
  13. Java 9 Concurrency- Advanced Elements Java 9 Concurrency- Advanced Elements – ONE COURSE TO RULE THEM ALL- Eduonix brings you an unique and innovative course which will help you learn the top ten popular PHP frameworks. It will help you learn why a particular framework is suited for a project. It will provide you the complete perspective across all of them and will help you choose the best framework for your project. Java 9 Concurrency- Advanced Elements Course Info: MP4 | Video: AVC 1280×720 | Audio: AAC 44KHz 2ch | Duration: 2 Hours | 490 MB Genre: eLearning | Language: English DOWNLOAD [Hidden Content]
  14. Let's create a simple method for generating a PDF file using JAVA. Vamos criar um metódo simples para gerar um arquivo PDF utilizando JAVA. public void createPDF() { Document document = new Document(); // Create a new Document try { PdfWriter.getInstance(document, new FileOutputStream("path")); //Create a file document.open(); //open file document.add(new Paragraph("Write you text here")); //using string /*Image image = Image.getInstance("path"); using image document.add(image) */ } catch (DocumentException de) { System.out.println(de.getMessage()); } catch (IOException ioe) { System.out.println(ioe.getMessage()); } document.close(); } Instead of writing with a fixed string you can use some variable in your code. Ao invés de escrever as linhas pode utilizar alguma String em seu código. string text = "Hello \n This is my text \n Thanks for read \n Bye Bye!!! \n" document.add(new Paragraph(text)); //using string It's very intuitive code, no secret, anything just comment. É bem intuitivo o código, nenhum segredo, qualquer coisa só comentar.
  15. Considerado a bíblia dos programadores, livro está ainda mais completo em sua 8a edição A oitava edição de Java - como programar, lançada pela Pearson Education, chega ao mercado com novo design e um traço inovador: preocupados em aguçar o raciocínio e o pensamento crítico dos estudantes, Paul J. Deitel e Dr. Harvey M. Deitel incluíram na obra exercícios que estimulam o leitor a associar a Internet e o computador à solução de problemas reais da sociedade.Além dessa novidade, a obra traz um estudo de caso opcional sobre a montagem de um caixa eletrônico (ATM), o que reforça a possibilidade de atrelar a teoria à realidade, e oferece ao estudante a chance de praticar um conceito-chave da programação orientada a objetos: a interação entre vários objetos. DOWNLOAD [HIDE-THANKS] http://www.mediafire.com/file/7pp100vvvf84pg4/Livro+Java+Como+Programar+8ª+Edição+%281143+Pag%29.pdf [/HIDE-THANKS]
  16. Olá, boa noite! Sou novato na comunidade e este é meu primeiro post. Como de costume meu, sempre quando gosto de algum site eu já penso em fazer um app para ajudar a mim e outras pessoas também a acessar com mais facilidade o conteúdo. ━━━━━━━━ ⸙ ━━━━━━━━ O menu do app é uma Navigation Drawer que contém: ínicio Perfil Alertas Conversas Chat online ━━━━━━━━ ⸙ ━━━━━━━━ Bom, eu desenvolvi o app WebCheats Pocket Edition ou apenas WCPE para facilitar o acesso ao fórum. Para baixar acesse o seguinte link ( Download APK WCPE ). O vídeo abaixo mostra como instalar e também possui uma breve demonstração do aplicativo. Aplicativo testado em: Android 4.4 / 5.0 / 6.0 / 7.0 - APROVADO Versões anteriores não foram testadas iOS - Indisponível Se houver dúvidas ou bugs postem aqui. Sugestões e dicas são bem vindas. :D
  17. Padrão de Projeto Factory Method em Java Veja neste artigo os principais conceitos, funcionamento e implementação prática, na linguagem Java, do Padrão de Projeto Factory Method. Introdução Os Design Patterns (Padrões de Projetos) têm sua origem no trabalho de um arquiteto chamado Christopher Alexander em meados da década de 70. Ele escreveu dois livros de bastante sucesso que exemplificava o uso e descrevia seu raciocínio para documentar os padrões para a arquitetura. Em 1995, um grupo de quatro profissionais (que ficou conhecido como Group Of Four ou Grupo dos Quatro) escreveu e lançou o livro “Design Patterns: Elements of Reusable Object-Oriented Software” [Gamma95] que continha um catálogo com 23 padrões de projetos (Design Patterns) orientados a software. A ideia de documentar problemas recorrentes que acontecia nos softwares surgiu através da ideia de Christopher Alexander que também percebeu essa necessidade na sua área. Os Design Patterns são uma coleção de padrões de projeto de software que contém soluções para problemas conhecidos e recorrentes no desenvolvimento de software descrevendo uma solução comprovada para um problema de projeto recorrente. A Documentação desses padrões permite o reuso e o compartilhamento dessas informações sobre a melhor maneira de se resolver um problema de projeto de software. Neste artigo descreveremos um dos Padrões de projetos mais utilizados pelos desenvolvedores de software, sendo bastante recorrente ,que é o Factory Method que será detalhado nas seções subsequentes do artigo. Funcionamento De forma geral todos os padrões Factory (Simple Factory, Factory Method, Abstract Factory) encapsulam a criação de objetos. O padrão Factory Method por sua vez encapsula a criação de objetos, no entanto, a diferença é que neste padrão encapsula-se a criação de objetos deixando as subclasses decidirem quais objetos criar. O Diagrama de classe abaixo mostra mais detalhes sobre o funcionamento do padrão Factory Method. Figura 1: Diagrama de classe do Padrão Factory Method No diagrama de classe acima temos a classe de criador abstrata que é a Creator que define um método fábrica abstrata que as subclasses implementam para criar um produto (factoryMethod) e pode possuir um ou mais métodos com seus devidos comportamentos que chamarão o factoryMethod. Normalmente o método factoryMethod do Creator também possui um Product abstrato que é produzido por uma subclasse (ConcreteCreator). Nota-se que cada ConcreteCreator produzirá seu próprio método de criação. Segundo o GOF (Group Of Four) o padrão Factory Method é: “Um padrão que define uma interface para criar um objeto, mas permite às classes decidirem qual classe instanciar. O Factory Method permite a uma classe deferir a instanciação para subclasses”. Exemplo de Implementação Segue abaixo um exemplo de implementação em Java utilizando o Padrão Factory Method. Inicialmente define-se abaixo os produtos abstratos e concretos que serão usados pela factory. Listagem 1: Exemplo de implementação dos produtos public abstract class Pessoa { public String nome; public String sexo; } class Homem extends Pessoa { public Homem(String nome) { this.nome = nome; System.out.println(“Olá Senhor ” + this.nome); } } class Mulher extends Pessoa { public Mulher(String nome) { this.nome = nome; System.out.println(“Olá Senhora ” + this.nome); } } Acima temos a implementação da primeira parte do padrão Factory Method. Nesse exemplo criou-se os Produtos (abstratos e concretos) que executam a decisão tomada na factory. Em tempo de execução não sabemos quem será chamado, ao invés de termos if’s e else’s no cliente, temos toda a lógica de decisão na factory que é mostrada abaixo. Listagem 2: Exemplo de implementação do Method Factory class FactoryPessoa { public Pessoa getPessoa(String nome, String sexo) { if (sexo.equals(“M”)) return new Homem(nome); if (sexo.equals(“F”)) return new Mulher(nome); } } Abaixo segue um exemplo de execução desse padrão descrito acima: Listagem 3: Exemplo de implementação do Factory Method em Java public class TesteApp { public static void main(String args[]) { FactoryPessoa factory = new FactoryPessoa(); String nome = “Carlos”; String sexo = “M”; factory.getPessoa(nome, sexo); } } Acima criou-se uma factory com os dados acima. Baseado na condição “sexo” temos a criação do objeto Homem que faz a saudação correta. Veja que toda a parte de decisão, ou a sujeira, fica tudo na fábrica para que ela possa decidir o que fazer. Vantagens do Padrão Factory Method O Factory Method é bastante utilizado em diversos projetos, até mesmo nos casos em que temos apenas um Creator (diagrama acima), pois mesmo nessas condições o padrão nos oferece um meio de desligar a implementação de um Product. Adicionando ou alterando Products isso não irá afetar o Creator, pois eles não estão fortemente ligados. Com o padrão Factory Method podemos encapsular o código que cria objetos. É muito comum termos classes que instanciam classes concretas e essa parte do código normalmente sofre diversas modificações, portanto nesses casos usamos um Factory Method que encapsula esse comportamento de instanciação. Usando o Factory Method temos o nosso código de criação em um objeto ou método, evitando assim a duplicação e além disso temos um local único para fazer manutenção. O padrão também nos dá um código flexível e extensível para o futuro. Conclusão Como foi possível estudar neste artigo, o padrão Factory Method oferece um modo de encapsular as instanciações de tipos concretos. O Creator nos oferece um método para criação de objetos, os demais métodos operam em cima das subclasses de Creator, ou seja, os ConcreteCreator, fabricados pelo factoryMethod. Além disso apenas os ConcreteCreator implementam o método de fábrica e criam Products como pode-se observar no diagrama de classe do padrão. Bibliografia Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns. O’Reilly Media, 2004. Gamma, E., Helm, R., Johnson, R., Vlissides, J. Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley, 2010. Fonte: http://www.devmedia.com.br/padrao-de-projeto-factory-method-em-java/26348
  18. Download Curso Tudo sobre AngularJS - Rodrigo Branas É um curso de AngularJS que tem lá no youtube no canal do Rodrigo Branas. Total de 17 vídeo-aulas bem práticas GitHub com o código das aulas Idioma: Português - BR Editora/Gênero: TI [spoiler=Playlist do Youtube Completa]
  19. Bom vamos para o entendimento dessa função! Quando você quer carregar uma div sem aparecer ela no codigo fonte? Ou até fazer sistema de click atraves do metodo get! é só usar essa propriedade e onde tiver o get id se coloca <?php echo $variavel['id'];?> Bom vamos pro código <script> $.post('request.php?animeinfo=1', function (html) { $('.div').html(html); }); </script> Agradeça :3
  20. Olá, meu nome é Kaique, tenho 16 anos, signo peixes, sou novato em programação mais conheço bem as linguagens Python, Java, C, gosto de surf, curto rap, andar de bicicleta e claro computadores. Vim dos fóruns Power-Pixel e iMasters, e vou migrar para este por que é bem completo e pelos usuários frequentes. Eu ainda não olhei todas áreas do fórum mas espero que tenha de animes e hardwares. Eu desenvolvo servidores Browser e Desktop, Espero fazer grandes amizades e participar de grandes projetos. A parte de cheats não me interessa, enfim, obrigado por ler meu tópico e pela sua atenção!.
  21. Curso Java SE III Ídioma: Português Formato: rar Tamanho: 4,8 GB (Compactado) Pré-requisito (dominar Java ou ter assistido meus cursos de java se I e java se II) Aprenda nesse Curso: Boas práticas de programação; Código de Barras; Enviar e receber dados da porta Serial; Criptografia (segurança da informação); Trafegar dados entre Formulários; Manipular JInternalFrames; Enviar Email; Criar Classes e Métodos Genéricos; Muito de JTable e AbstractTableModel; Instalar e criar programas em java tanto no Windows, quanto no Linux e no Apple; Gerar relatório PDF; Usar o PreparedStatement; Usar Sockets; Testes de Software; Threads; Wrapper; Gerando Relatórios através de Consultas; E muito mais ..... Senha para descompactar: megafirebay DOWNLOAD [Hidden Content] [Hidden Content] Achou muito grande? Precisa de algum gerenciador? Confira este programa: Megadownloader (Burlar o Limite do Mega)
  22. Olá amigos. Hoje falaremos sobre criptografia. Há muitas histórias boas sobre isso e até filmes que mostram formas mirabolantes de criptografar e descriptografar dados. Aqui vamos aprender o básico sobre essa arte de esconder os dados sigilosos dos nossos sistemas. Código de exemplo No exemplo abaixo mostramos como criptografar e depois descriptografar um texto qualquer. package JCEEncryption; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; public class JCEEncryption { public static void main(String[] argv) { try { KeyGenerator gerador = KeyGenerator.getInstance("DES"); SecretKey chaveDES = gerador.generateKey(); Cipher desCipher; //Criação do cipher que conterá os objetos de criptografia desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); // Iniciando cipher para criptografia desCipher.init(Cipher.ENCRYPT_MODE, chaveDES); //Dados a serem cripografados byte[] mensagemOriginal = "Mensagem oculta!".getBytes(); System.out.println("Conteúdo byte: " + mensagemOriginal); System.out.println("Conteúdo texto: " + new String(mensagemOriginal)); // Excriptando os dados byte[] mensagemCriptografada = desCipher.doFinal(mensagemOriginal); System.out.println("Conteúdo criptografado : " + mensagemCriptografada); // Iniciando o chipher para realizar a descriptografia desCipher.init(Cipher.DECRYPT_MODE, chaveDES); // Texto a ser descriptografado byte[] textoDescriptografado = desCipher.doFinal(mensagemCriptografada); System.out.println("Texto Descriptografado: " + new String(textoDescriptografado)); } catch (NoSuchAlgorithmException e) { System.err.println("Não foi possível localizar o algorítmo de criptografia!" + e.getMessage()); } catch (NoSuchPaddingException e) { System.err.println("O mecanismo de preenchimento solicitado não existe no ambiente (Sistema Operacional)!" + e.getMessage()); } catch (InvalidKeyException e) { System.err.println("Chave inválida!" + e.getMessage()); } catch (IllegalBlockSizeException e) { System.err.println("Tamanho do bloco da mensagem inválido!" + e.getMessage()); } catch (BadPaddingException e) { System.err.println("Preenchimento incorreto de dados!" + e.getMessage()); } } } Resultado: Conclusão Então amigos. Essa é uma das formas que podemos criptografar dados. Em alguns sistemas existem dados sensíveis que precisamos armazenar em bases de dados e depois devemos recuperá-los e exibir para os usuários. Esta é uma das formas! E por hoje é só! Vida que segue.
  23. O Universo dos Frameworks Java A linguagem Java apresenta uma série de conhecidos frameworks, que auxiliam no desenvolvimento de sistemas. Dentre os mais conhecidos, estão o Struts, Hibernate, JUnit, entre outros. Neste artigo vamos conhecer alguns. A linguagem Java apresenta uma série de conhecidos frameworks, que auxiliam no desenvolvimento de sistemas. Dentre os mais conhecidos, estão o Struts, Hibernate, JUnit, entre outros. Há inúmeras definições a respeito de framework. Podemos considerar um framework como uma solução para um conjunto de problemas em comum, com uso de classes e interfaces, que disponibilizam objetos com capacidade de capturar funcionalidades comuns a várias aplicações. Assim sendo, um framework pode ser considerado sob certo ponto de vista como uma solução quase completa. É muito comum haver uma certa confusão entre o que é um framework e uma "simples" biblioteca de classes. Vale ressaltar que em uma biblitoteca de classes, cada classe é única e independente de outras classes. Já num framework, existe uma certa dependência entre as classes, conhecido como modelo de colaboração. Também pode haver confusão junto a definição de Design Patterns. Apenas lembrando que em um framework possuímos código em si, enquanto nos design patterns temos apenas um "modelo" ou "exemplo" de uma solução para um conhecido problema. Assim sendo, um framework deve ser extensivel, bem documentado e, principalmente, reusável. Vale lembrar que o uso de frameworks tem benefícios claros quando tratamos de redução de custos. Abaixo seguem alguns dos principais frameworks Java: Struts (J2EE) - um dos frameworks mais usados em ambientes corporativos para construção de aplicações web. Usa o modelo MVC e caracterizado por uma camada de controle com uso de J2EE e XML. JavaServer Faces (J2EE) - baseado em tecnologia de servlets e JSP, pode ser usado como uma opção ao Struts. Spring (POA) - framework baseado em orientação a aspectos. Possibilidade de uso em conjuntos com outros frameworks MVC, como o Struts e JSF. Hibernate (Persistência de Dados) - conhecido framework de persistência de dados, que usa conceitos de banco de dados, além do mapeamento objeto-relacional (classes Java para tabelas de databases). JDO (Persistência de Dados) - interface que provê uma camada de abstração aplicação - armazenamento de dados. Prevayler (Persistência de Dados) - outro famoso framework que prega uma JVM invuneravel logicamente com uso de uma camada de prevalência de objetos. JUnit (testes) - talvez o mais usado framework Java, incluído em IDEs free ou comerciais. Para testes unitários em geral. Cactus (testes) - framework específico para testes unitários de aplicações J2EE. Jbanana (J2EE) - framework brasileiro e open-source para desenvolvimento web. Log4J (log) - amplamente usado e útli para geração de logs. Jakarta commons-log (log) - semelhante ao Log4J, sob o selo da Jakarta. Ant (build e deploy) - framework também amplamente divulgado da Jakarta para automatização de processos de construção, além de testes e distribuição. Jasper Report / iReport (geradores de relatório) - framework para geração de modo dinâmico de relatórios. Compatível com formatos xml, pdf e html.
  24. Eae pessoal, estou desenvolvendo um aplicativo para android e como não sou muito expert na área to precisando de uma ajuda ! Eu já criei a parte de cadastros porém uma simples só pra tirar como base para algo mais complexo, queria criar um formulário de cadastros onde vai ter cerca de 10 tipos de usuários de acordo com a profissão de cada um! Pessoa comum e a não comum (para simplificar) como faço para diferenciar esses usuários na hora do cadastro, seria tipo um cadastro do uber, sou motorista ou não sou motorista, porém o app não tem nada a ver com uber kk E queria filtrar cada Usuário por região, para mais pra frente eu conseguir ter função de atendimento por regiões! OBS: Estou usando Android Studio e Firebase da google
  25. Visão geral Vamos analisar quatro aplicações de rede, escritas completamente a partir do zero em Java. Veremos que podemos escrever esses programas sem qualquer conhecimento das tecnologias (que incluem recursos do sistema operacional, roteamento entre redes, pesquisa de endereços, mídia de transmissão física, etc.) Cada um desses aplicativos usa o paradigma cliente-servidor, que é Um programa, chamado de blocos de servidor à espera de um cliente para se conectar a ele Um cliente conecta-se O servidor e o cliente trocam informações até que elas estejam concluídas O cliente e o servidor fecham a conexão As únicas informações de fundo que você precisa são: Os hosts têm portas, numeradas de 0-65535. Os servidores ouvem em uma porta. Alguns números de porta são reservados para que você não possa usá-los quando você escreve seu próprio servidor. Vários clientes podem se comunicar com um servidor em uma determinada porta. Cada conexão de cliente é atribuída um soquete separado nessa porta. Os aplicativos cliente obtêm uma porta e um soquete na máquina cliente quando se conectam com êxito a um servidor. As quatro aplicações são Um servidor de data trivial e cliente, ilustrando a comunicação unidirecional simples. O servidor envia dados somente para o cliente. Um servidor de capitalização de cliente, ilustrando comunicação bidirecional. Uma vez que o diálogo entre o cliente e o servidor pode compreender um número ilimitado de mensagens para frente e para trás, o servidor é encadeado para atender a vários clientes de forma eficiente. Um jogo da velha de dois jogadores, ilustrando um servidor que precisa acompanhar o estado de um jogo, e informar cada cliente dele, para que eles possam atualizar seus próprios monitores. Um aplicativo de bate-papo multiusuário, no qual um servidor deve transmitir mensagens para todos os seus clientes. Um Servidor de Client O Server [spoiler=DateServer.java] package edu.lmu.cs.networking; import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; /** * A TCP server that runs on port 9090. When a client connects, it * sends the client the current date and time, then closes the * connection with that client. Arguably just about the simplest * server you can write. */ public class DateServer { /** * Runs the server. */ public static void main(String[] args) throws IOException { ServerSocket listener = new ServerSocket(9090); try { while (true) { Socket socket = listener.accept(); try { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.println(new Date().toString()); } finally { socket.close(); } } } finally { listener.close(); } } } O cliente [spoiler=DateClient.java] [spoiler=DateClient.java] package edu.lmu.cs.networking; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import javax.swing.JOptionPane; /** * Trivial client for the date server. */ public class DateClient { /** * Runs the client as an application. First it displays a dialog * box asking for the IP address or hostname of a host running * the date server, then connects to it and displays the date that * it serves. */ public static void main(String[] args) throws IOException { String serverAddress = JOptionPane.showInputDialog( "Enter IP Address of a machine that is\n" + "running the date service on port 9090:"); Socket s = new Socket(serverAddress, 9090); BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream())); String answer = input.readLine(); JOptionPane.showMessageDialog(null, answer); System.exit(0); } } Um servidor de capitalização e cliente O Server [spoiler=CapitalizeServer.java] package edu.lmu.cs.networking; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * A server program which accepts requests from clients to * capitalize strings. When clients connect, a new thread is * started to handle an interactive dialog in which the client * sends in a string and the server thread sends back the * capitalized version of the string. * * The program is runs in an infinite loop, so shutdown in platform * dependent. If you ran it from a console window with the "java" * interpreter, Ctrl+C generally will shut it down. */ public class CapitalizeServer { /** * Application method to run the server runs in an infinite loop * listening on port 9898. When a connection is requested, it * spawns a new thread to do the servicing and immediately returns * to listening. The server keeps a unique client number for each * client that connects just to show interesting logging * messages. It is certainly not necessary to do this. */ public static void main(String[] args) throws Exception { System.out.println("The capitalization server is running."); int clientNumber = 0; ServerSocket listener = new ServerSocket(9898); try { while (true) { new Capitalizer(listener.accept(), clientNumber++).start(); } } finally { listener.close(); } } /** * A private thread to handle capitalization requests on a particular * socket. The client terminates the dialogue by sending a single line * containing only a period. */ private static class Capitalizer extends Thread { private Socket socket; private int clientNumber; public Capitalizer(Socket socket, int clientNumber) { this.socket = socket; this.clientNumber = clientNumber; log("New connection with client# " + clientNumber + " at " + socket); } /** * Services this thread's client by first sending the * client a welcome message then repeatedly reading strings * and sending back the capitalized version of the string. */ public void run() { try { // Decorate the streams so we can send characters // and not just bytes. Ensure output is flushed // after every newline. BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // Send a welcome message to the client. out.println("Hello, you are client #" + clientNumber + "."); out.println("Enter a line with only a period to quit\n"); // Get messages from the client, line by line; return them // capitalized while (true) { String input = in.readLine(); if (input == null || input.equals(".")) { break; } out.println(input.toUpperCase()); } } catch (IOException e) { log("Error handling client# " + clientNumber + ": " + e); } finally { try { socket.close(); } catch (IOException e) { log("Couldn't close a socket, what's going on?"); } log("Connection with client# " + clientNumber + " closed"); } } /** * Logs a simple message. In this case we just write the * message to the server applications standard output. */ private void log(String message) { System.out.println(message); } } } O Cliente [spoiler=CapitalizeClient.java] package edu.lmu.cs.networking; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; /** * A simple Swing-based client for the capitalization server. * It has a main frame window with a text field for entering * strings and a textarea to see the results of capitalizing * them. */ public class CapitalizeClient { private BufferedReader in; private PrintWriter out; private JFrame frame = new JFrame("Capitalize Client"); private JTextField dataField = new JTextField(40); private JTextArea messageArea = new JTextArea(8, 60); /** * Constructs the client by laying out the GUI and registering a * listener with the textfield so that pressing Enter in the * listener sends the textfield contents to the server. */ public CapitalizeClient() { // Layout GUI messageArea.setEditable(false); frame.getContentPane().add(dataField, "North"); frame.getContentPane().add(new JScrollPane(messageArea), "Center"); // Add Listeners dataField.addActionListener(new ActionListener() { /** * Responds to pressing the enter key in the textfield * by sending the contents of the text field to the * server and displaying the response from the server * in the text area. If the response is "." we exit * the whole application, which closes all sockets, * streams and windows. */ public void actionPerformed(ActionEvent e) { out.println(dataField.getText()); String response; try { response = in.readLine(); if (response == null || response.equals("")) { System.exit(0); } } catch (IOException ex) { response = "Error: " + ex; } messageArea.append(response + "\n"); dataField.selectAll(); } }); } /** * Implements the connection logic by prompting the end user for * the server's IP address, connecting, setting up streams, and * consuming the welcome messages from the server. The Capitalizer * protocol says that the server sends three lines of text to the * client immediately after establishing a connection. */ public void connectToServer() throws IOException { // Get the server address from a dialog box. String serverAddress = JOptionPane.showInputDialog( frame, "Enter IP Address of the Server:", "Welcome to the Capitalization Program", JOptionPane.QUESTION_MESSAGE); // Make connection and initialize streams Socket socket = new Socket(serverAddress, 9898); in = new BufferedReader( new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); // Consume the initial welcoming messages from the server for (int i = 0; i < 3; i++) { messageArea.append(in.readLine() + "\n"); } } /** * Runs the client application. */ public static void main(String[] args) throws Exception { CapitalizeClient client = new CapitalizeClient(); client.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); client.frame.pack(); client.frame.setVisible(true); client.connectToServer(); } } Um jogo da velha de dois jogadores O Server [spoiler=TicTacToeServer.java] package edu.lmu.cs.networking; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * A server for a network multi-player tic tac toe game. Modified and * extended from the class presented in Deitel and Deitel "Java How to * Program" book. I made a bunch of enhancements and rewrote large sections * of the code. The main change is instead of passing *data* between the * client and server, I made a TTTP (tic tac toe protocol) which is totally * plain text, so you can test the game with Telnet (always a good idea.) * The strings that are sent in TTTP are: * * Client -> Server Server -> Client * ---------------- ---------------- * MOVE <n> (0 <= n <= 8) WELCOME <char> (char in {X, O}) * QUIT VALID_MOVE * OTHER_PLAYER_MOVED <n> * VICTORY * DEFEAT * TIE * MESSAGE <text> * * A second change is that it allows an unlimited number of pairs of * players to play. */ public class TicTacToeServer { /** * Runs the application. Pairs up clients that connect. */ public static void main(String[] args) throws Exception { ServerSocket listener = new ServerSocket(8901); System.out.println("Tic Tac Toe Server is Running"); try { while (true) { Game game = new Game(); Game.Player playerX = game.new Player(listener.accept(), 'X'); Game.Player playerO = game.new Player(listener.accept(), 'O'); playerX.setOpponent(playerO); playerO.setOpponent(playerX); game.currentPlayer = playerX; playerX.start(); playerO.start(); } } finally { listener.close(); } } } /** * A two-player game. */ class Game { /** * A board has nine squares. Each square is either unowned or * it is owned by a player. So we use a simple array of player * references. If null, the corresponding square is unowned, * otherwise the array cell stores a reference to the player that * owns it. */ private Player[] board = { null, null, null, null, null, null, null, null, null}; /** * The current player. */ Player currentPlayer; /** * Returns whether the current state of the board is such that one * of the players is a winner. */ public boolean hasWinner() { return (board[0] != null && board[0] == board[1] && board[0] == board[2]) ||(board[3] != null && board[3] == board[4] && board[3] == board[5]) ||(board[6] != null && board[6] == board[7] && board[6] == board[8]) ||(board[0] != null && board[0] == board[3] && board[0] == board[6]) ||(board[1] != null && board[1] == board[4] && board[1] == board[7]) ||(board[2] != null && board[2] == board[5] && board[2] == board[8]) ||(board[0] != null && board[0] == board[4] && board[0] == board[8]) ||(board[2] != null && board[2] == board[4] && board[2] == board[6]); } /** * Returns whether there are no more empty squares. */ public boolean boardFilledUp() { for (int i = 0; i < board.length; i++) { if (board[i] == null) { return false; } } return true; } /** * Called by the player threads when a player tries to make a * move. This method checks to see if the move is legal: that * is, the player requesting the move must be the current player * and the square in which she is trying to move must not already * be occupied. If the move is legal the game state is updated * (the square is set and the next player becomes current) and * the other player is notified of the move so it can update its * client. */ public synchronized boolean legalMove(int location, Player player) { if (player == currentPlayer && board[location] == null) { board[location] = currentPlayer; currentPlayer = currentPlayer.opponent; currentPlayer.otherPlayerMoved(location); return true; } return false; } /** * The class for the helper threads in this multithreaded server * application. A Player is identified by a character mark * which is either 'X' or 'O'. For communication with the * client the player has a socket with its input and output * streams. Since only text is being communicated we use a * reader and a writer. */ class Player extends Thread { char mark; Player opponent; Socket socket; BufferedReader input; PrintWriter output; /** * Constructs a handler thread for a given socket and mark * initializes the stream fields, displays the first two * welcoming messages. */ public Player(Socket socket, char mark) { this.socket = socket; this.mark = mark; try { input = new BufferedReader( new InputStreamReader(socket.getInputStream())); output = new PrintWriter(socket.getOutputStream(), true); output.println("WELCOME " + mark); output.println("MESSAGE Waiting for opponent to connect"); } catch (IOException e) { System.out.println("Player died: " + e); } } /** * Accepts notification of who the opponent is. */ public void setOpponent(Player opponent) { this.opponent = opponent; } /** * Handles the otherPlayerMoved message. */ public void otherPlayerMoved(int location) { output.println("OPPONENT_MOVED " + location); output.println( hasWinner() ? "DEFEAT" : boardFilledUp() ? "TIE" : ""); } /** * The run method of this thread. */ public void run() { try { // The thread is only started after everyone connects. output.println("MESSAGE All players connected"); // Tell the first player that it is her turn. if (mark == 'X') { output.println("MESSAGE Your move"); } // Repeatedly get commands from the client and process them. while (true) { String command = input.readLine(); if (command.startsWith("MOVE")) { int location = Integer.parseInt(command.substring(5)); if (legalMove(location, this)) { output.println("VALID_MOVE"); output.println(hasWinner() ? "VICTORY" : boardFilledUp() ? "TIE" : ""); } else { output.println("MESSAGE ?"); } } else if (command.startsWith("QUIT")) { return; } } } catch (IOException e) { System.out.println("Player died: " + e); } finally { try {socket.close();} catch (IOException e) {} } } } } O Cliente [spoiler=TicTacToeClient.java] package edu.lmu.cs.networking; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; /** * A client for the TicTacToe game, modified and extended from the * class presented in Deitel and Deitel "Java How to Program" book. * I made a bunch of enhancements and rewrote large sections of the * code. In particular I created the TTTP (Tic Tac Toe Protocol) * which is entirely text based. Here are the strings that are sent: * * Client -> Server Server -> Client * ---------------- ---------------- * MOVE <n> (0 <= n <= 8) WELCOME <char> (char in {X, O}) * QUIT VALID_MOVE * OTHER_PLAYER_MOVED <n> * VICTORY * DEFEAT * TIE * MESSAGE <text> * */ public class TicTacToeClient { private JFrame frame = new JFrame("Tic Tac Toe"); private JLabel messageLabel = new JLabel(""); private ImageIcon icon; private ImageIcon opponentIcon; private Square[] board = new Square[9]; private Square currentSquare; private static int PORT = 8901; private Socket socket; private BufferedReader in; private PrintWriter out; /** * Constructs the client by connecting to a server, laying out the * GUI and registering GUI listeners. */ public TicTacToeClient(String serverAddress) throws Exception { // Setup networking socket = new Socket(serverAddress, PORT); in = new BufferedReader(new InputStreamReader( socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); // Layout GUI messageLabel.setBackground(Color.lightGray); frame.getContentPane().add(messageLabel, "South"); JPanel boardPanel = new JPanel(); boardPanel.setBackground(Color.black); boardPanel.setLayout(new GridLayout(3, 3, 2, 2)); for (int i = 0; i < board.length; i++) { final int j = i; board[i] = new Square(); board[i].addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { currentSquare = board[j]; out.println("MOVE " + j);}}); boardPanel.add(board[i]); } frame.getContentPane().add(boardPanel, "Center"); } /** * The main thread of the client will listen for messages * from the server. The first message will be a "WELCOME" * message in which we receive our mark. Then we go into a * loop listening for "VALID_MOVE", "OPPONENT_MOVED", "VICTORY", * "DEFEAT", "TIE", "OPPONENT_QUIT or "MESSAGE" messages, * and handling each message appropriately. The "VICTORY", * "DEFEAT" and "TIE" ask the user whether or not to play * another game. If the answer is no, the loop is exited and * the server is sent a "QUIT" message. If an OPPONENT_QUIT * message is recevied then the loop will exit and the server * will be sent a "QUIT" message also. */ public void play() throws Exception { String response; try { response = in.readLine(); if (response.startsWith("WELCOME")) { char mark = response.charAt(8); icon = new ImageIcon(mark == 'X' ? "x.gif" : "o.gif"); opponentIcon = new ImageIcon(mark == 'X' ? "o.gif" : "x.gif"); frame.setTitle("Tic Tac Toe - Player " + mark); } while (true) { response = in.readLine(); if (response.startsWith("VALID_MOVE")) { messageLabel.setText("Valid move, please wait"); currentSquare.setIcon(icon); currentSquare.repaint(); } else if (response.startsWith("OPPONENT_MOVED")) { int loc = Integer.parseInt(response.substring(15)); board[loc].setIcon(opponentIcon); board[loc].repaint(); messageLabel.setText("Opponent moved, your turn"); } else if (response.startsWith("VICTORY")) { messageLabel.setText("You win"); break; } else if (response.startsWith("DEFEAT")) { messageLabel.setText("You lose"); break; } else if (response.startsWith("TIE")) { messageLabel.setText("You tied"); break; } else if (response.startsWith("MESSAGE")) { messageLabel.setText(response.substring(8)); } } out.println("QUIT"); } finally { socket.close(); } } private boolean wantsToPlayAgain() { int response = JOptionPane.showConfirmDialog(frame, "Want to play again?", "Tic Tac Toe is Fun Fun Fun", JOptionPane.YES_NO_OPTION); frame.dispose(); return response == JOptionPane.YES_OPTION; } /** * Graphical square in the client window. Each square is * a white panel containing. A client calls setIcon() to fill * it with an Icon, presumably an X or O. */ static class Square extends JPanel { JLabel label = new JLabel((Icon)null); public Square() { setBackground(Color.white); add(label); } public void setIcon(Icon icon) { label.setIcon(icon); } } /** * Runs the client as an application. */ public static void main(String[] args) throws Exception { while (true) { String serverAddress = (args.length == 0) ? "localhost" : args[1]; TicTacToeClient client = new TicTacToeClient(serverAddress); client.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); client.frame.setSize(240, 160); client.frame.setVisible(true); client.frame.setResizable(false); client.play(); if (!client.wantsToPlayAgain()) { break; } } } } Um aplicativo de bate-papo para vários usuários O Server [spoiler=ChatServer.java] package edu.lmu.cs.networking; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.HashSet; /** * A multithreaded chat room server. When a client connects the * server requests a screen name by sending the client the * text "SUBMITNAME", and keeps requesting a name until * a unique one is received. After a client submits a unique * name, the server acknowledges with "NAMEACCEPTED". Then * all messages from that client will be broadcast to all other * clients that have submitted a unique screen name. The * broadcast messages are prefixed with "MESSAGE ". * * Because this is just a teaching example to illustrate a simple * chat server, there are a few features that have been left out. * Two are very useful and belong in production code: * * 1. The protocol should be enhanced so that the client can * send clean disconnect messages to the server. * * 2. The server should do some logging. */ public class ChatServer { /** * The port that the server listens on. */ private static final int PORT = 9001; /** * The set of all names of clients in the chat room. Maintained * so that we can check that new clients are not registering name * already in use. */ private static HashSet<String> names = new HashSet<String>(); /** * The set of all the print writers for all the clients. This * set is kept so we can easily broadcast messages. */ private static HashSet<PrintWriter> writers = new HashSet<PrintWriter>(); /** * The appplication main method, which just listens on a port and * spawns handler threads. */ public static void main(String[] args) throws Exception { System.out.println("The chat server is running."); ServerSocket listener = new ServerSocket(PORT); try { while (true) { new Handler(listener.accept()).start(); } } finally { listener.close(); } } /** * A handler thread class. Handlers are spawned from the listening * loop and are responsible for a dealing with a single client * and broadcasting its messages. */ private static class Handler extends Thread { private String name; private Socket socket; private BufferedReader in; private PrintWriter out; /** * Constructs a handler thread, squirreling away the socket. * All the interesting work is done in the run method. */ public Handler(Socket socket) { this.socket = socket; } /** * Services this thread's client by repeatedly requesting a * screen name until a unique one has been submitted, then * acknowledges the name and registers the output stream for * the client in a global set, then repeatedly gets inputs and * broadcasts them. */ public void run() { try { // Create character streams for the socket. in = new BufferedReader(new InputStreamReader( socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); // Request a name from this client. Keep requesting until // a name is submitted that is not already used. Note that // checking for the existence of a name and adding the name // must be done while locking the set of names. while (true) { out.println("SUBMITNAME"); name = in.readLine(); if (name == null) { return; } synchronized (names) { if (!names.contains(name)) { names.add(name); break; } } } // Now that a successful name has been chosen, add the // socket's print writer to the set of all writers so // this client can receive broadcast messages. out.println("NAMEACCEPTED"); writers.add(out); // Accept messages from this client and broadcast them. // Ignore other clients that cannot be broadcasted to. while (true) { String input = in.readLine(); if (input == null) { return; } for (PrintWriter writer : writers) { writer.println("MESSAGE " + name + ": " + input); } } } catch (IOException e) { System.out.println(e); } finally { // This client is going down! Remove its name and its print // writer from the sets, and close its socket. if (name != null) { names.remove(name); } if (out != null) { writers.remove(out); } try { socket.close(); } catch (IOException e) { } } } } } O Cliente [spoiler=ChatClient.java] package edu.lmu.cs.networking; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; /** * A simple Swing-based client for the chat server. Graphically * it is a frame with a text field for entering messages and a * textarea to see the whole dialog. * * The client follows the Chat Protocol which is as follows. * When the server sends "SUBMITNAME" the client replies with the * desired screen name. The server will keep sending "SUBMITNAME" * requests as long as the client submits screen names that are * already in use. When the server sends a line beginning * with "NAMEACCEPTED" the client is now allowed to start * sending the server arbitrary strings to be broadcast to all * chatters connected to the server. When the server sends a * line beginning with "MESSAGE " then all characters following * this string should be displayed in its message area. */ public class ChatClient { BufferedReader in; PrintWriter out; JFrame frame = new JFrame("Chatter"); JTextField textField = new JTextField(40); JTextArea messageArea = new JTextArea(8, 40); /** * Constructs the client by laying out the GUI and registering a * listener with the textfield so that pressing Return in the * listener sends the textfield contents to the server. Note * however that the textfield is initially NOT editable, and * only becomes editable AFTER the client receives the NAMEACCEPTED * message from the server. */ public ChatClient() { // Layout GUI textField.setEditable(false); messageArea.setEditable(false); frame.getContentPane().add(textField, "North"); frame.getContentPane().add(new JScrollPane(messageArea), "Center"); frame.pack(); // Add Listeners textField.addActionListener(new ActionListener() { /** * Responds to pressing the enter key in the textfield by sending * the contents of the text field to the server. Then clear * the text area in preparation for the next message. */ public void actionPerformed(ActionEvent e) { out.println(textField.getText()); textField.setText(""); } }); } /** * Prompt for and return the address of the server. */ private String getServerAddress() { return JOptionPane.showInputDialog( frame, "Enter IP Address of the Server:", "Welcome to the Chatter", JOptionPane.QUESTION_MESSAGE); } /** * Prompt for and return the desired screen name. */ private String getName() { return JOptionPane.showInputDialog( frame, "Choose a screen name:", "Screen name selection", JOptionPane.PLAIN_MESSAGE); } /** * Connects to the server then enters the processing loop. */ private void run() throws IOException { // Make connection and initialize streams String serverAddress = getServerAddress(); Socket socket = new Socket(serverAddress, 9001); in = new BufferedReader(new InputStreamReader( socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); // Process all messages from server, according to the protocol. while (true) { String line = in.readLine(); if (line.startsWith("SUBMITNAME")) { out.println(getName()); } else if (line.startsWith("NAMEACCEPTED")) { textField.setEditable(true); } else if (line.startsWith("MESSAGE")) { messageArea.append(line.substring(8) + "\n"); } } } /** * Runs the client as an application with a closeable frame. */ public static void main(String[] args) throws Exception { ChatClient client = new ChatClient(); client.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); client.frame.setVisible(true); client.run(); } } Fonte: http://cs.lmu.edu/~ray/notes/javanetexamples/