Java SE 8: Lambda Quick Start Este tutorial apresenta as novas expressões lambda incluídas na Java Platform Standard Edition 8 (Java SE 8). Tempo de Conclusão Aproximadamente 1 hora Introdução As expressões Lambda são um novo e importante recurso incluído no Java SE 8. Eles fornecem uma maneira clara e concisa de representar uma interface de método usando uma expressão. As expressões Lambda também melhoram as bibliotecas de Coleções facilitando a iteração, filtragem e extração de dados de uma Coleção. Além disso, novos recursos de simultaneidade melhoram o desempenho em ambientes multicore. Este Oracle por Exemplo (OBE) fornece uma introdução às expressões lambda incluídas no Java SE 8. É fornecida uma introdução às funções internas anônimas, seguida de uma discussão das interfaces funcionais e da nova sintaxe lambda. Em seguida, são mostrados exemplos de padrões de uso comuns antes e depois das expressões lambda. A próxima seção revisa um caso de uso de pesquisa comum e como o código Java pode ser melhorado com a inclusão de expressões lambda. Além disso, algumas das interfaces funcionais comuns, Predicado e Função. Fornecidos em java. util. function são mostrados em ação. O OBE termina com uma revisão de como a coleção Java foi atualizada com expressões lambda. O código-fonte para todos os exemplos é fornecido a você. Requisitos de hardware e software A seguir, uma lista de requisitos de hardware e software: Acesso rápido do Java Development Kit (JDK 8) NetBeans 7.4 Pré-requisitos Para executar os exemplos, você deve ter uma versão de acesso antecipado do JDK 8 e uma cópia do NetBeans 7.4 ou posterior . Links podem ser encontrados no site principal Lambda. Para sua conveniência, aqui estão os links diretos. Nota: As compilações são fornecidas para todos os principais sistemas operacionais. Este OBE foi desenvolvido usando Linux Mint 13 (UbuntuDebian). Instale o JDK8 eo NetBeans seguindo as instruções fornecidas com os downloads. Adicione os diretórios bin para Java e NetBeans ao seu PATH. Background image Anônimo classe interna Em Java, classes internas anônimas fornecem uma maneira de implementar classes que podem ocorrer apenas uma vez em um aplicativo. Por exemplo, em um aplicativo Swing ou JavaFX padrão, são necessários vários manipuladores de eventos para eventos de teclado e mouse. Ao invés de escrever uma classe separada de manipulação de eventos para cada evento, você pode escrever algo como isto. Caso contrário, uma classe separada que implementa ActionListener é necessária para cada evento. Ao criar a classe no local, onde ela é necessária, o código é um pouco mais fácil de ler. O código não é elegante, porque um pouco de código é necessário apenas para definir um método. Interfaces funcionais O código que define a interface ActionListener é semelhante a este: O exemplo ActionListener é uma interface com apenas um método. Com o Java SE 8, uma interface que segue esse padrão é conhecida como interface funcional. Nota: Este tipo de interface. Era anteriormente conhecido como um tipo de método abstrato único (SAM). Usar interfaces funcionais com classes internas anônimas é um padrão comum em Java. Além das classes EventListener, interfaces como Runnable e Comparator são usadas de maneira semelhante. Portanto, interfaces funcionais são alavancadas para uso com expressões lambda. Expressão Lambda Expressões Lambda abordar o volume das classes internas anônimas, convertendo cinco linhas de código em uma única instrução. Esta solução horizontal simples resolve o problema vertical apresentado pelas classes internas. Uma expressão lambda é composta de três partes. Introdução à programação Java - Tutorial 5.1. O que é uma interface em Java As interfaces são um tipo semelhante a uma classe e são definidas através da palavra-chave interface. As interfaces são usadas para definir o comportamento comum das classes de implementação. Se duas classes implementam a mesma interface, outro código que funciona no nível da interface, pode usar objetos de ambas as classes. Como uma classe, uma interface define métodos. As classes podem implementar uma ou várias interfaces. Uma classe que implementa uma interface deve fornecer uma implementação para todos os métodos abstratos definidos na interface. 5.2. Métodos abstratos, padrão e estáticos em Interfaces Uma interface pode ter métodos abstratos e métodos default. Um método padrão é definido através da palavra-chave padrão no início da assinatura do método. Todos os outros métodos definidos em interfaces são públicos ea declaração explícita abstrata destes modificadores é opcional. Interfaces podem ter constantes que são sempre implicitamente públicas, estáticas e finais. O código a seguir mostra um exemplo de implementação de uma interface. Uma variável pode ser uma: variável de variável primitiva de referência. Uma variável primitiva contém o valor. Uma variável de referência contém uma referência (ponteiro) para o objeto. Portanto, se você comparar duas variáveis de referência, você comparará se ambas apontam para o mesmo objeto. Para identificar se os objetos contêm os mesmos dados, use a chamada de método object1.equals (object2). 7.2. Variável de instância A variável de instância é associada a uma instância da classe (também chamada objeto). Acesso funciona sobre esses objetos. As variáveis de instância podem ter qualquer controle de acesso e podem ser marcadas como finais ou transitórias. As variáveis de instância marcadas como finais não podem ser alteradas após um valor ter sido atribuído a elas. 7.3. Variáveis locais As declarações de variáveis locais (pilha) não podem ter modificadores de acesso. Variáveis locais não obtêm valores padrão, portanto, eles devem ser inicializados antes que eles possam ser usados. Final é o único modificador disponível para variáveis locais. Este modificador define que a variável não pode ser alterada após a primeira atribuição. 7.4. Métodos Um método é um bloco de código com parâmetros e um valor de retorno. Ele pode ser chamado no objeto. Os métodos podem ser declarados com var-args. Neste caso, o método declara um parâmetro que aceita tudo de zero a muitos argumentos (sintaxe: type 82308203 name) Um método só pode ter um parâmetro var-args e este deve ser o último parâmetro no método. Sobrescrever de um método de superclasse: Um método deve ter exatamente o mesmo parâmetro de retorno e os mesmos argumentos. Também o parâmetro de retorno deve ser o mesmo. Métodos de sobrecarga: Um método sobrecarregado é um método com o mesmo nome, mas argumentos diferentes. O tipo de retorno não pode ser usado para sobrecarregar um método. 7.5. Método principal Um método público estático com a seguinte assinatura pode ser usado para iniciar um aplicativo Java. Esse método é tipicamente chamado de método principal. O capítulo anterior explicou como criar e compilar um programa Java na linha de comando. Um ambiente de desenvolvimento integrado Java (IDE) oferece muita funcionalidade de facilidade de uso para a criação de programas Java. Há outros IDEs muito poderosos disponíveis, por exemplo, o Eclipse IDE. Para obter uma introdução sobre como usar o Eclipse IDE, consulte Tutorial do Eclipse IDE. A descrição restante usa a frase: Criar um projeto Java chamado82308203. Isso se refere à criação de um projeto Java no Eclipse. Se você estiver usando um IDE diferente, siga as etapas necessárias nesse IDE. 13. Exercícios - Criando objetos e métodos Java 13.1. Criar uma classe Person e instanciá-la Crie um novo projeto Java chamado com. vogella. javastarter. exercises1 e um pacote com o mesmo nome. Crie uma classe chamada Pessoa. Adicione três variáveis de instância, uma para armazenar o primeiro nome da pessoa, uma para armazenar o último nome e outra para armazenar a idade da pessoa. Use o construtor do objeto Person para definir os valores para algum valor padrão. Adicione um método toString conforme descrito pela codificação a seguir e solucione o TODO. Esse método é usado para converter o objeto em uma representação String. Crie uma nova classe chamada Main com um public static void main (String args). Neste método, crie uma instância da classe Person. 13.2. Use construtor Adicione um construtor à sua classe Pessoa que leva primeiro nome, sobrenome e idade como parâmetro. Atribua os valores às variáveis de instância. Em seu método principal, crie pelo menos um objeto do tipo Person e use System. out. println () com o objeto como parâmetro. 13.3. Definir métodos getter e setter Definir métodos que permitem ler os valores das variáveis de instância e defini-los. Estes métodos são chamados setter e getter. Getters deve começar com get seguido pelo nome da variável em que a primeira letra da variável é capitalizada. Setter deve começar com set seguido pelo nome da variável, em que a primeira letra da variável é capitalizada. Por exemplo, a variável chamada firstName teria o getFirstName () método getter eo método setFirstName (String s) setter. Altere seu método principal para que você crie um objeto Pessoa e use o método setter para alterar o sobrenome. 13.4. Criar um objeto Address Crie um novo objeto chamado Address. O endereço deve permitir que você armazene o endereço de uma pessoa. Adicione uma nova variável de instância desse tipo no objeto Pessoa. Além disso, crie um getter e setter para o objeto Address no objeto Person. 14. Solução - Criando objetos e métodos Java Se você chamar um método ou acessar um campo em um objeto que não é inicializado (nulo) você recebe um NullPointerException (NPE). A classe java. util. Optional pode ser usada para evitar esses NPEs. Java. util. Optional é uma boa ferramenta para indicar que um valor de retorno pode estar ausente, o que pode ser visto diretamente na assinatura do método em vez de apenas mencionar que nulo pode ser retornado no JavaDoc. Se você deseja chamar um método em um objeto Opcional e verificar alguma propriedade, você pode usar o método de filtro. O método de filtro toma um predicado como um argumento. Se um valor estiver presente no objeto Opcional e corresponder ao predicado, o método de filtro retornará esse valor caso contrário, ele retornará um objeto Opcional vazio. Você pode criar um opcional de diferentes maneiras: O método ifPresent pode ser usado para executar algum código em um objeto se ele estiver presente. Suponha que você tenha um objeto Todo e queira chamar o método getId () nele. Você pode fazer isso através do código a seguir. Através do método de mapa você pode transformar o objeto se ele estiver presente e através do método de filtro você pode filtrar para determinados valores. Para obter o valor real de um Opcional, o método get () pode ser usado. Mas no caso do opcional está vazio, isso irá lançar um NoSuchElementException. Para evitar este NoSuchElementException o orElse ou o orElseGet pode ser usado para fornecer um padrão em caso de ausência. 22. Conversão de Tipo Se você usar variáveis de tipos diferentes Java requer para certos tipos uma conversão explícita. O seguinte fornece exemplos para esta conversão. 22.1. Conversão para String Use o seguinte para converter de outros tipos para Strings 22.2. Conversão de String para Number A conversão de string para number é independente das configurações locais, p. Ele sempre usa a notificação em inglês para o número. Nesta notificação um formato de número correto é 8.20. O número alemão 8,20 resultaria em um erro. Para converter a partir de um número alemão, tem de utilizar a classe NumberFormat. O desafio é que quando o valor é, por exemplo, 98.00, em seguida, a classe NumberFormat criaria um Long que não pode ser moldado para Double. Daí a seguinte classe de conversão complexa. Conteúdo gratuito de suporte Perguntas e discussões Licença de código de amplificador de Tutorial Obter código-fonte1.5 Entrada e Saída Nesta seção, estendemos o conjunto de abstrações simples (entrada de linha de comando e saída padrão) que usamos como interface entre nossos programas Java e O mundo exterior para incluir entrada padrão. Desenho padrão. E áudio padrão. Entrada padrão torna conveniente para nós escrever programas que processam quantidades arbitrárias de entrada e para interagir com os nossos programas de desenho padrão torna possível para nós trabalhar com gráficos e áudio padrão adiciona som. Vista aérea. Um programa Java toma os valores de entrada da linha de comando e imprime uma seqüência de caracteres como saída. Por padrão, os argumentos de linha de comando ea saída padrão são associados a um aplicativo que recebe comandos, que chamamos de janela de terminal. Aqui estão algumas instruções para usar a linha de comando em seu sistema. Mac middot Windows middot Linux Argumentos da linha de comando. Todas as nossas classes têm um método main () que toma uma matriz de Cadeia args como argumento. Essa matriz é a seqüência de argumentos de linha de comando que nós digitemos. Se pretendemos que um argumento seja um número, devemos usar um método como Integer. parseInt () para convertê-lo de String para o tipo apropriado. Saída padrão. Para imprimir valores de saída em nossos programas, usamos System. out. println (). Java envia os resultados para um fluxo abstrato de caracteres conhecidos como saída padrão. Por padrão, o sistema operacional conecta a saída padrão à janela do terminal. Toda a saída em nossos programas até agora vem aparecendo na janela do terminal. RandomSeq. java usa este modelo: É necessário um argumento de linha de comando n e imprime na saída padrão uma seqüência de n números aleatórios entre 0 e 1. Para completar nosso modelo de programação, adicionamos as seguintes bibliotecas: Entrada padrão. Ler números e strings do usuário. Desenho padrão. Gráficos de trama. Áudio padrão. Criar som. Saída padrão. Os métodos Javas System. out. print () e System. out. println () implementam a abstração de saída padrão básica de que precisamos. No entanto, para tratar a entrada padrão e saída padrão de forma uniforme (e para fornecer algumas melhorias técnicas), usamos métodos semelhantes que são definidos em nossa biblioteca StdOut: Javas print () e println () métodos são os que você tem Usando O método printf () nos dá mais controle sobre a aparência da saída. Princípios de impressão formatados. Na sua forma mais simples, printf () leva dois argumentos. O primeiro argumento é chamado de string de formato. Ele contém uma especificação de conversão que descreve como o segundo argumento deve ser convertido em uma seqüência de caracteres para saída. As cadeias de formato começam com e terminam com um código de conversão de uma letra. A tabela a seguir resume os códigos mais usados: Format string. A string de formato pode conter caracteres além daqueles para a especificação de conversão. A especificação de conversão é substituída pelo valor do argumento (convertido para uma cadeia conforme especificado) e todos os caracteres restantes são passados para a saída. Argumentos múltiplos. A função printf () pode ter mais de dois argumentos. Neste caso, a cadeia de formato terá uma especificação de conversão adicional para cada argumento adicional. Aqui está mais documentação sobre printf format string sintax. Standard input. Nossa biblioteca StdIn obtém dados de um fluxo de entrada padrão que contém uma seqüência de valores separados por espaços em branco. Cada valor é uma string ou um valor de um dos tipos primitivos Javas. Um dos principais recursos do fluxo de entrada padrão é que o programa consome valores quando ele os lê. Uma vez que seu programa tenha lido um valor, ele não pode fazer backup e lê-lo novamente. A biblioteca é definida pela seguinte API: Agora consideramos vários exemplos em detalhes. Digitação de entrada. Quando você usa o comando java para invocar um programa Java a partir da linha de comando, você está fazendo três coisas: (1) emitir um comando para iniciar a execução do programa, (2) especificar os valores dos argumentos da linha de comando e ( 3) começando a definir o fluxo de entrada padrão. A seqüência de caracteres que você digita na janela de terminal após a linha de comando é o fluxo de entrada padrão. Por exemplo, AddInts. java toma um argumento de linha de comando n. Depois lê n números da entrada padrão e os adiciona e imprime o resultado na saída padrão: Formato de entrada. Se você digitar abc ou 12.2 ou true quando StdIn. readInt () está esperando um int. Então ele responderá com um InputMismatchException. StdIn trata seqüências de caracteres de espaço em branco consecutivos como idêntico a um espaço e permite que você delimitar seus números com essas seqüências de caracteres. Entrada de usuário interativa. TwentyQuestions. java é um exemplo simples de um programa que interage com seu usuário. O programa gera um inteiro aleatório e, em seguida, dá pistas para um usuário tentando adivinhar o número. A diferença fundamental entre este programa e outros que temos escrito é que o usuário tem a capacidade de alterar o fluxo de controle enquanto o programa está sendo executado. Processando um fluxo de entrada de tamanho arbitrário. Normalmente, os fluxos de entrada são finitos: o programa é ativado pelo fluxo de entrada, consumindo valores até que o fluxo esteja vazio. Mas não há restrição do tamanho do fluxo de entrada. Average. java lê em uma seqüência de números reais de entrada padrão e imprime sua média. Redirecionamento e tubulação. Para muitas aplicações, digitar dados de entrada como um fluxo de entrada padrão a partir da janela do terminal é insustentável porque isso limita o poder de processamento de nossos programas pela quantidade de dados que podemos digitar. Da mesma forma, muitas vezes queremos salvar as informações impressas no fluxo de saída padrão para uso posterior. Podemos usar mecanismos do sistema operacional para resolver ambos os problemas. Redirecionando a saída padrão para um arquivo. Ao adicionar uma diretiva simples ao comando que invoca um programa, podemos redirecionar sua saída padrão para um arquivo, seja para armazenamento permanente ou para entrada para algum outro programa em um momento posterior. Por exemplo, o comando especifica que o fluxo de saída padrão não deve ser impresso na janela do terminal, mas sim deve ser gravado em um arquivo de texto chamado data. txt. Cada chamada para StdOut. print () ou StdOut. println () acrescenta texto no final desse arquivo. Neste exemplo, o resultado final é um arquivo que contém 1.000 valores aleatórios. Redirecionamento de saída padrão de um arquivo. Da mesma forma, podemos redirecionar a entrada padrão para que StdIn leia dados de um arquivo em vez da janela de terminal. Por exemplo, o comando usa uma sequência de números do arquivo data. txt e calcula seu valor médio. Especificamente, o símbolo lt é uma diretiva para implementar o fluxo de entrada padrão lendo o arquivo data. txt em vez de aguardar que o usuário digite algo na janela do terminal. Quando o programa chama StdIn. readDouble (). O sistema operacional lê o valor do arquivo. Esta facilidade para redirecionar a entrada padrão de um arquivo nos permite processar enormes quantidades de dados de qualquer fonte com nossos programas, limitados apenas pelo tamanho dos arquivos que podemos armazenar. Conectando dois programas. A maneira mais flexível de implementar as abstrações padrão de entrada e saída padrão é especificar que elas são implementadas por nossos próprios programas. Esse mecanismo é chamado de tubulação. Por exemplo, o seguinte commandspecifies que a saída padrão para RandomSeq eo fluxo de entrada padrão para Average são o mesmo fluxo. Filtros. Para muitas tarefas comuns, é conveniente pensar em cada programa como um filtro que converte um fluxo de entrada padrão para um fluxo de saída padrão de alguma forma, RangeFilter. java usa dois argumentos de linha de comando e imprime na saída padrão aqueles números da entrada padrão Que se enquadram dentro do intervalo especificado. Seu sistema operacional também fornece uma série de filtros. Por exemplo, o filtro de classificação coloca as linhas na entrada padrão em ordem ordenada: Outro filtro útil é mais. Que lê dados da entrada padrão e exibe na janela do terminal uma tela de cada vez. Por exemplo, se você digitar, verá quantos números caberem na sua janela de terminal, mas mais aguardará que você acerte a barra de espaço antes de exibir cada tela de seleção com êxito. Desenho padrão. Agora introduzimos uma abstração simples para produzir desenhos como saída. Imaginamos um dispositivo de desenho abstrato capaz de desenhar linhas e pontos em uma tela bidimensional. O dispositivo é capaz de responder aos comandos que nossos programas emitem na forma de chamadas para métodos estáticos no StdDraw. A interface principal consiste em dois tipos de métodos: desenhar comandos que fazem com que o dispositivo execute uma ação (como desenhar uma linha ou desenhar um ponto) e comandos de controle que definem parâmetros como o tamanho da caneta ou as escalas de coordenadas. Comandos básicos de desenho. Primeiro, consideramos os comandos de desenho: Estes métodos são quase auto-documentados: StdDraw. line (x0, y0, x1, y1) desenha um segmento de linha reta conectando o ponto (x 0. Y 0) com o ponto 1). StdDraw. point (x, y) desenha um ponto centrado no ponto (x. Y). A escala de coordenadas padrão é a unidade quadrada (todas as coordenadas x e y entre 0 e 1). A implementação padrão exibe a tela em uma janela na tela do computador, com linhas pretas e pontos em um fundo branco. Seu primeiro desenho. O HelloWorld para programação gráfica com StdDraw é desenhar um triângulo com um ponto dentro. Triangle. java faz isso com três chamadas para StdDraw. line () e uma chamada para StdDraw. point (). Comandos de controle. O tamanho da tela padrão é 512 por 512 pixels eo sistema de coordenadas padrão é a unidade quadrada, mas muitas vezes queremos desenhar gráficos em escalas diferentes. Além disso, muitas vezes queremos desenhar segmentos de diferentes espessuras ou pontos de tamanho diferente do padrão. Para acomodar essas necessidades, StdDraw tem os seguintes métodos: Por exemplo, a seqüência de duas chamadas define as coordenadas de desenho para estar dentro de uma caixa delimitadora cujo canto inferior esquerdo está em (x 0. Y 0) e cujo canto superior direito é Em (x1. Y1). Filtragem de dados para um desenho padrão. PlotFilter. java lê uma seqüência de pontos definidos por coordenadas (x. Y) a partir da entrada padrão e desenha um ponto em cada ponto. Adota a convenção de que os quatro primeiros números na entrada padrão especificam a caixa delimitadora, de modo que ela possa escalar o gráfico. Traçar um gráfico de função. FunctionGraph. java traça a função y sin (4 x) sin (20 x) no intervalo (0, pi). Há um número infinito de pontos no intervalo, então temos de nos contentar em avaliar a função em um número finito de pontos dentro do intervalo. Nós amostra a função, escolhendo um conjunto de x-valores, em seguida, computando y-valores, avaliando a função em cada x-valor. Traçar a função conectando pontos sucessivos com linhas produz o que é conhecido como uma aproximação linear por partes. StdDraw também inclui métodos para desenhar círculos, retângulos e polígonos arbitrários. Cada forma define um contorno. Quando o nome do método é apenas o nome da forma, esse contorno é rastreado pela caneta de desenho. Quando o nome do método começa com preenchido. Os argumentos para circle () definem um círculo de raio r os argumentos para square () definem um quadrado de comprimento lateral 2r centrado no ponto dado e os argumentos para polygon () definem um Seqüência de pontos que conectamos por linhas, incluindo um do último ponto para o primeiro ponto. Texto e cor. Para anotar ou destacar vários elementos em seus desenhos, StdDraw inclui métodos para desenhar texto, definir a fonte e definir a tinta na caneta. Neste código, java. awt. Font e java. awt. Color são abstrações que são implementadas Com tipos não primitivos que você aprenderá na Seção 3.1. Até então, deixamos os detalhes para StdDraw. A cor de tinta predefinida é preta a fonte predefinida é uma fonte de 16 pontos simples Serif. Buffer duplo. StdDraw suporta um recurso de computação gráfica poderoso conhecido como buffer duplo. Quando o buffer duplo é habilitado chamando enableDoubleBuffering (). Todo o desenho ocorre na tela offscreen. A tela offscreen não é exibida, ela existe apenas na memória do computador. Somente quando você chama show () o desenho é copiado da tela offscreen para a tela na tela. Onde é exibido na janela de desenho padrão. Você pode pensar em buffer duplo como coletar todas as linhas, pontos, formas e texto que você diga para desenhar e, em seguida, desenhá-los todos simultaneamente, mediante solicitação. Uma razão para usar o buffer duplo é para a eficiência ao executar um grande número de comandos de desenho. Animações de computador. Nosso uso mais importante de buffer duplo é produzir animações de computador. Onde criamos a ilusão de movimento, exibindo rapidamente desenhos estáticos. Podemos produzir animações repetindo as quatro etapas a seguir: Limpe a tela offscreen. Desenhar objetos no ecrã Offscreen Copie o canvas Offscreen para a tela do ecrã. Espere um pouco. Em apoio a estas etapas, o StdDraw tem vários métodos: O programa Olá, Mundo de animação é produzir uma bola preta que parece mover-se sobre a tela, saltando fora do limite de acordo com as leis de colisão elástica. Suponha que a bola está na posição (x. Y) e queremos criar a impressão de tê-la movida para uma nova posição, digamos (x 0,01, y 0,02). Fazemos isso em quatro etapas: Limpe a tela offscreen para branco. Desenhe uma bola preta na nova posição na tela offscreen. Copie a tela offscreen para a tela na tela. Espere um pouco. Para criar a ilusão de movimento, BouncingBall. java itera estes passos para uma seqüência inteira de posições da bola. Imagens. Nossa biblioteca de desenho padrão suporta imagens de desenho, bem como formas geométricas. O comando StdDraw. picture (x, y, filename) traça a imagem no nome do arquivo (JPEG, GIF ou PNG) na tela, centralizada em (x, y). BouncingBallDeluxe. java ilustra um exemplo onde a bola saltando é substituída por uma imagem de uma bola de tênis. Interação do usuário. Nossa biblioteca de desenho padrão também inclui métodos para que o usuário possa interagir com a janela usando o mouse. Um primeiro exemplo. MouseFollower. java é o HelloWorld da interação do mouse. Ele desenha uma bola azul, centrada na localização do mouse. Quando o usuário pressiona o botão do mouse, a bola muda de cor de azul para ciano. Um atractor simples. OneSimpleAttractor. java simula o movimento de uma bola azul que é atraída para o mouse. Também é responsável por uma força de arrasto. Muitos atratores simples. SimpleAttractors. java simula o movimento de 20 bolas azuis que são atraídas para o mouse. Também é responsável por uma força de arrasto. Quando o usuário clica, as bolas se dispersam aleatoriamente. Molas. Springs. java implementa um sistema de mola. Áudio padrão. StdAudio é uma biblioteca que você pode usar para reproduzir e manipular arquivos de som. Permite que você jogue, manipule e sintetice o som. Introduzimos alguns conceitos básicos por trás de uma das áreas mais antigas e mais importantes da informática e da computação científica: processamento de sinais digitais. Concerto A. O concerto A é uma onda senoidal, escalada para oscilar a uma frequência de 440 vezes por segundo. A função sin (t) se repete uma vez a cada 2pi no eixo x, então se medimos t em segundos e plotamos a função sen (2pi t vezes 440) obtemos uma curva que oscila 440 vezes por segundo. A amplitude (valor y) corresponde ao volume. Assumimos que é escalonado para estar entre 1 e 1. Outras notas. Uma fórmula matemática simples caracteriza as outras notas na escala cromática. Eles são divididos igualmente em uma escala logarítmica (base 2): há doze notas na escala cromática, e obtemos a nota i acima de uma determinada nota, multiplicando sua freqüência pela (i 12) potência de 2. Quando você Duplique ou reduza para metade a freqüência, você move para cima ou para baixo uma oitava na escala. Por exemplo 880 hertz é uma oitava acima do concerto A e 110 hertz é duas oitavas abaixo do concerto A. Amostragem. Para o som digital, representamos uma curva por meio da amostragem em intervalos regulares, exatamente da mesma maneira que quando plotamos gráficos de funções. Eu testamos bastante freqüentemente que eu tenho uma representação exata da taxa de amostragem amplamente utilizada curvemdasha é 44.100 amostras por segundo. É assim tão simples: representamos o som como uma matriz de números (números reais que estão entre menos1 e 1). Por exemplo, o fragmento de código a seguir interpreta o concerto A por 10 segundos. Tocar essa melodia. PlayThatTune. java é um exemplo que mostra como facilmente podemos criar música com StdAudio. Ele toma notas de entrada padrão, indexado na escala cromática do concerto A, e reproduz-los em áudio padrão. Escrever um programa MaxMin. java que lê em números inteiros (como muitos como o usuário entra) de entrada padrão e imprime os valores máximo e mínimo. Escreva um programa Stats. java que toma um argumento inteiro de linha de comando n. Lê n números de ponto flutuante a partir da entrada padrão e imprime sua média (valor médio) e desvio padrão da amostra (raiz quadrada da soma dos quadrados de suas diferenças da média, dividida por n menos 1). Escreva um programa LongestRun. java que lê em uma seqüência de inteiros e imprime o inteiro que aparece em uma execução consecutiva mais longa eo comprimento da execução. Por exemplo, se a entrada for 1 2 2 1 5 1 1 7 7 7 7 1 1. Então seu programa deve imprimir Longest run: 4 consecutivos 7s. Escreva um programa WordCount. java que lê no texto a partir da entrada padrão e imprime o número de palavras no texto. Para a finalidade deste exercício, uma palavra é uma seqüência de caracteres não-whitespace que é cercada por whitespace. Escreva um programa Closest. java que toma três argumentos de linha de comando de ponto flutuante (x, y, z), lê da entrada padrão uma seqüência de coordenadas de ponto ((xi, yi, zi)) e imprime as coordenadas do ponto Mais próxima de ((x, y, z)). Lembre-se de que o quadrado da distância entre ((x, y, z)) e ((xi, yi, zi)) é ((x - xi) 2 (y - yi) 2 (z - zi) 2). Para eficiência, não use Math. sqrt () ou Math. pow (). Dadas as posições e massas de uma seqüência de objetos, escreva um programa para calcular seu centro de massa ou centroide. O centróide é a posição média dos n objetos, ponderada por massa. Se as posições e massas são dadas por (xi. Yi. Mi), então o centróide (x. Y. M) é dado por: Escreva um programa Centroid. java que lê em uma seqüência de posições e massas (xi. Mi) a partir da entrada padrão e imprime o seu centro de massa (x. y.m). Dica. Modelo seu programa após Average. java. Escreva um programa Checkerboard. java que toma um argumento de linha de comando n e traça um xadrez n-by-n com quadrados vermelhos e pretos. Colora o vermelho quadrado inferior esquerdo. Escreva um programa Rose. java que toma um argumento de linha de comando n e trace uma rosa com n pétalas (se n é ímpar) ou 2n pétalas (se n é par) traçando as coordenadas polares (r, theta) da função r Sin (n vezes theta) para theta variando de 0 a 2pi radianos. Abaixo está a saída desejada para n 4, 7 e 8. Escreva um programa Banner. java que pegue uma string s da linha de comando e exiba-a em estilo banner na tela, movendo da esquerda para a direita e voltando ao início Da corda quando a extremidade é alcançada. Adicione um segundo argumento de linha de comando para controlar a velocidade. Escreva um programa Circles. java que desenhe círculos cheios de tamanho aleatório em posições aleatórias na unidade quadrada, produzindo imagens como as abaixo. Seu programa deve ter quatro argumentos de linha de comando: o número de círculos, a probabilidade de cada círculo ser preto, o raio mínimo eo raio máximo. Exercícios criativos Spirographs. Escreva um programa Spirograph. java que toma três argumentos de linha de comando R, r e a e desenha o spirograph resultante. A spirograph (technically, an epicycloid) is a curve formed by rolling a circle of radius r around a larger fixed circle or radius R. If the pen offset from the center of the rolling circle is (ra), then the equation of the resulting curve at time t is given by Such curves were popularized by a best-selling toy that contains discs with gear teeth on the edges and small holes that you could put a pen in to trace spirographs. For a dramatic 3d effect, draw a circular image, e. g. earth. gif instead of a dot, and show it rotating over time. Heres a picture of the resulting spirograph when R 180, r 40, and a 15. Clock. Write a program Clock. java that displays an animation of the second, minute, and hour hands of an analog clock. Use the method StdDraw. show(1000) to update the display roughly once per second. Dica. this may be one of the rare times when you want to use the operator with a double - it works the way you would expect. Oscilloscope. Write a program Oscilloscope. java to simulate the output of an oscilloscope and produce Lissajous patterns. These patterns are named after the French physicist, Jules A. Lissajous, who studied the patterns that arise when two mutually perpendicular periodic disturbances occur simultaneously. Assume that the inputs are sinusoidal, so tha the following parametric equations describe the curve: Take the six parameters A x . w x . theta x . theta y . w y . and theta y from the command line. For example, the first image below has Ax Ay 1, w x 2, w y 3, theta x 20 degrees, theta y 45 degrees. The other has parameters (1, 1, 5, 3, 30, 45) Web Exercises Word and line count. Modify WordCount. java so that reads in text from standard input and prints out the number of characters, words, and lines in the text. Rainfall problem. Write a program Rainfall. java that reads in nonnegative integers (representing rainfall) one at a time until 999999 is entered, and then prints out the average of value (not including 999999). Remove duplicates. Write a program Duplicates. java that reads in a sequence of integers and prints back out the integers, except that it removes repeated values if they appear consecutively. For example, if the input is 1 2 2 1 5 1 1 7 7 7 7 1 1, your program should print out 1 2 1 5 1 7 1. Run length encoding. Write a program RunLengthEncoder. java that encodes a binary input using run length encoding. Write a program RunLengthDecoder. java that decodes a run length encoded message. Head and tail. Write programs Head. java and Tail. java that take an integer command line input N and print out the first or last N lines of the given file. (Print the whole file if it consists of For example the message VENI, VIDI, VICI is converted to YHQL, YLGL, YLFL. Write a program Caesar. java that takes a command-line argument k and applies a Caesar cipher with shift k to a sequence of letters read from standard input. If a letter is not an uppercase letter, simply print it back out. Caesar cipher decoding. How would you decode a message encrypted using a Caesar cipher Hint . you should not need to write any more code. Parity check. A Boolean matrix has the parity property when each row and each column has an even sum. This is a simple type of error-correcting code because if one bit is corrupted in transmission (bit is flipped from 0 to 1 or from 1 to 0) it can be detected and repaired. Heres a 4 x 4 input file which has the parity property: Write a program ParityCheck. java that takes an integer N as a command line input and reads in an N-by-N Boolean matrix from standard input, and outputs if (i) the matrix has the parity property , or (ii) indicates which single corrupted bit (i, j) can be flipped to restore the parity property, or (iii) indicates that the matrix was corrupted (more than two bits would need to be changed to restore the parity property). Use as little internal storage as possible. Hint: you do not even have to store the matrix Takagis function. Plot Takagis function: everywhere continuous, nowhere differentiable. Hitchhiker problem. You are interviewing N candidates for the sole position of American Idol. Every minute you get to see a new candidate, and you have one minute to decide whether or not to declare that person the American Idol. You may not change your mind once you finish interviewing the candidate. Suppose that you can immediately rate each candidate with a single real number between 0 and 1, but of course, you dont know the rating of the candidates not yet seen. Devise a strategy and write a program AmericanIdol that has at least a 25 chance of picking the best candidate (assuming the candidates arrive in random order), reading the 500 data values from standard input. Solution: interview for N2 minutes and record the rating of the best candidate seen so far. In the next N2 minutes, pick the first candidate that has a higher rating than the recorded one. This yields at least a 25 chance since you will get the best candidate if the second best candidate arrives in the first N2 minutes, and the best candidate arrives in the final N2 minutes. This can be improved slightly to 1e 0.36788 by using essentially the same strategy, but switching over at time Ne. Nested diamonds. Write a program Diamonds. java that takes a command line input N and plots N nested squares and diamonds. Below is the desired output for N 3, 4, and 5. Regular polygons. Create a function to plot an N-gon, centered on (x, y) of size length s. Use the function to draws nested polygons like the picture below. Bulging squares. Write a program BulgingSquares. java that draws the following optical illusion from Akiyoshi Kitaoka The center appears to bulge outwards even though all squares are the same size. Spiraling mice. Suppose that N mice that start on the vertices of a regular polygon with N sides, and they each head toward the nearest other mouse (in counterclockwise direction) until they all meet. Write a program to draw the logarithmic spiral paths that they trace out by drawing nested N-gons, rotated and shrunk as in this animation. Spiral. Write a program to draw a spiral like the one below. Globe. Write a program Globe. java that takes a real command-line argument alpha and plots a globe-like pattern with parameter alpha. Plot the polar coordinates (r, theta) of the function f(theta) cos(alpha times theta) for theta ranging from 0 to 7200 degrees. Below is the desired output for alpha 0.8, 0.9, and 0.95. Drawing strings. Write a program RandomText. java that takes a string s and an integer N as command line inputs, and writes the string N times at a random location, and in a random color. 2D random walk. Write a program RandomWalk. java to simulate a 2D random walk and animate the results. Start at the center of a 2N-by-2N grid. The current location is displayed in blue the trail in white. Rotating table. You are seated at a rotating square table (like a lazy Susan), and there are four coins placed in the four corners of the table. Your goal is to flip the coins so that they are either all heads or all tails, at which point a bell rings to notify you that you are done. You may select any two of them, determine their orientation, and (optionally) flip either or both of them over. To make things challenging, you are blindfolded, and the table is spun after each time you select two coins. Write a program RotatingTable. java that initializes the coins to random orientations. Then, it prompts the user to select two positions (1-4), and identifies the orientation of each coin. Next, the user can specify which, if any of the two coins to flip. The process repeats until the user solves the puzzle. Rotating table solver. Write another program RotatingTableSolver. java to solve the rotating table puzzle. One effective strategy is to choose two coins at random and flip them to heads. However, if you get really unlucky, this could take an arbitrary number of steps. Goal: devise a strategy that always solves the puzzle in at most 5 steps. Hex. Hex is a two-player board game popularized by John Nash while a graduate student at Princeton University, and later commercialized by Parker Brothers. It is played on a hexagonal grid in the shape of an 11-by-11 diamond. Write a program Hex. java that draws the board. Projectile motion with drag. Write a program BallisticMotion. java that plots the trajectory of a ball that is shot with velocity v at an angle theta. Account for gravitational and drag forces. Assume that the drag force is proportional to the square of the velocity. Using Newtons equations of motions and the Euler-Cromer method, update the position, velocity, and acceleration according to the following equations: Use G 9.8, C 0.002, and set the initial velocity to 180 and the angle to 60 degrees. Heart. Write a program Heart. java to draw a pink heart: Draw a diamond, then draw two circles to the upper left and upper right sides. Changing square. Write a program that draws a square and changes its color each second. Simple harmonic motion. Repeat the previous exercise, but animate the Lissajous patterns as in this applet. Ex: A B w x w y 1, but at each time t draw 100 (or so) points with phi x ranging from 0 to 720 degrees, and phi x ranging from 0 to 1080 degrees. Bresenhams line drawing algorithm. To plot a line segment from (x1, y1) to (x2, y2) on a monitor, say 1024-by-1024, you need to make a discrete approximation to the continuous line and determine exactly which pixels to turn on. Bresenhams line drawing algorithm is a clever solution that works when the slope is between 0 and 1 and x1 Modify Bresenhams algorithm to handle arbitrary line segments. Millers madness. Write a program Madness. java to plot the parametric equation: where the parameter t is in radians. You should get the following complex picture. Experiment by changing the parameters and produce original pictures. Fays butterfly. Write a program Butterfly. java to plot the polar equation: where the parameter t is in radians. You should get an image like the following butterfly-like figure. Experiment by changing the parameters and produce original pictures. Student database. The file students. txt contains a list of students enrolled in an introductory computer science class at Princeton. The first line contains an integer N that specifies the number of students in the database. Each of the next N lines consists of four pieces of information, separated by whitespace: first name, last name, email address, and section number. The program Students. java reads in the integer N and then N lines of data of standard input, stores the data in four parallel arrays (an integer array for the section number and string arrays for the other fields). Then, the program prints out a list of students in section 4 and 5. Shuffling. In the October 7, 2003 California state runoff election for governor, there were 135 official candidates. To avoid the natural prejudice against candidates whose names appear at the end of the alphabet (Jon W. Zellhoefer), California election officials sought to order the candidates in random order. Write a program program Shuffle. java that takes a command-line argument N, reads in N strings from standard input, and prints them back out in shuffled order. (California decided to randomize the alphabet instead of shuffling the candidates. Using this strategy, not all N possible outcomes are equally likely or even possible For example, two candidates with very similar last names will always end up next to each other.) Reverse. Write a program Reverse. java that reads in an arbitrary number of real values from standard input and prints them in reverse order. Time series analysis. This problem investigates two methods for forecasting in time series analysis. Moving average or exponential smoothing. Polar plots. Create any of these polar plots. Java games. Use StdDraw. java to implement one of the games at javaunlimited. Consider the following program. Suppose the file input. txt contains the following integers: What is the contents of the array a after running the following command High-low. Shuffle a deck of cards, and deal one to the player. Prompt the player to guess whether the next card is higher or lower than the current card. Repeat until player guesses it wrong. Game show. used this. Elastic collisions. Write a program CollidingBalls. java that takes a command-line argument n and plots the trajectories of n bouncing balls that bounce of the walls and each other according to the laws of elastic collisions. Assume all the balls have the same mass. Elastic collisions with obstacles. Each ball should have its own mass. Put a large ball in the center with zero initial velocity. Brownian motion. Statistical outliers. Modify Average. java to print out all the values that are larger than 1.5 standard deviations from the mean. You will need an array to store the values. Optical illusions. Create a Kofka ring or one of the other optical illusions collected by Edward Adelson. Computer animation. In 1995 James Gosling presented a demonstration of Java to Sun executives, illustrating its potential to deliver dynamic and interactive Web content. At the time, web pages were fixed and non-interactive. To demonstrate what the Web could be, Gosling presented applets to rotate 3D molecules, visualize sorting routines, and Duke cart-wheeling across the screen. Java was officially introduced in May 1995 and widely adopted in the technology sector. The Internet would never be the same. Program Duke. java reads in the 17 images T1.gif through T17.gif and produces the animation. To execute on your computer, download the 17 GIF files and put in the same directory as Duke. java . (Alternatively, download and unzip the file duke. zip or duke. jar to extract all 17 GIFs.) Cart-wheeling Duke. Modify Duke. java so that it cartwheels 5 times across the screen, from right to left, wrapping around when it hits the window boundary. Repeat this cart-wheeling cycle 100 times. Dica. after displaying a sequence of 17 frames, move 57 pixels to the left and repeat. Name your program MoreDuke. java. Tac (cat backwards). Write a program Tac. java that reads lines of text from standard input and prints the lines out in reverse order. Game. Implement the game dodge using StdDraw . move a blue disc within the unit square to touch a randomly placed green disc, while avoiding the moving red discs. After each touch, add a new moving red disc. Simple harmonic motion. Create an animation like the one below from Wikipedia of simple harmonic motion. Yin yang. Draw a yin yang using StdDraw. arc() . Twenty questions. Write a program QuestionsTwenty. java that plays 20 questions from the opposite point of view: the user thinks of a number between 1 and a million and the computer makes the guesses. Use binary search to ensure that the computer needs at most 20 guesses. Write a program DeleteX. java that reads in text from standard input and deletes all occurrences of the letter X. To filter a file and remove all Xs, run your program with the following command: Write a program ThreeLargest. java that reads integers from standard input and prints out the three largest inputs. Write a program Pnorm. java that takes a command-line argument p, reads in real numbers from standard input, and prints out their p-norm . The p-norm norm of a vector (x 1 . x N ) is defined to be the pth root of (x 1 p x 2 p . x N p ). Consider the following Java program. Suppose that the file input. txt contains the integers 1 and 1. What does the following command do Modify Add. java so that it re-asks the user to enter two positive integers if the user types in a non-positive integer. Modify TwentyQuestions. java so that it re-asks the user to enter a response if the user types in something other than true or false . Hint: add a do-while loop within the main loop. Nonagram. Write a program to plot a nonagram. Star polygons. Write a program StarPolygon. java that takes two command line inputs p and q, and plots the - star polygon. Complete graph. Write a program to plot that takes an integer N, plots an N-gon, where each vertex lies on a circle of radius 256. Then draw a gray line connecting each pair of vertices. Necker cube. Write a program NeckerCube. java to plot a Necker cube. What happens if you move the StdDraw. clear(Color. BLACK) command to before the beginning of the while loop in BouncingBall. java. Responda . try it and observe a nice woven 3d pattern with the given starting velocity and position. What happens if you change the parameter of StdDraw. show() to 0 or 1000 in BouncingBall. java. Write a program to plot a circular ring of width 10 like the one below using two calls to StdDraw. filledCircle() . Write a program to plot a circular ring of width 10 like the one below using a nested for loop and many calls to StdDraw. point() . Write a program to plot the Olympic rings. Write a program BouncingBallDeluxe. java that embellishes BouncingBall. java by playing a sound effect upon collision with the wall using StdAudio and the sound file pipebang. wav. Last modified on February 20, 2017. Copyright copy 2000ndash2016 Robert Sedgewick and Kevin Wayne. Todos os direitos reservados.
Comments
Post a Comment