Afinal o que é Generics?
Generics é uma facilidade de programação que foi adicionada à linguagem de Java como parte do J2SE 5.0 em 2004. Este recurso permite que um tipo ou método para operar com objetos de vários tipos e ao mesmo tempo que fornece, em tempo de compilação, validação do tipo. Não entendeu?
Vamos imaginar uma pilha ... lembra de pilha? É aquela estrutura de dados que você vai colocando as coisas dentro dela e a sequência de retirada destas coisa é da última para a primeira (LIFO).
Vamos ver o teste.
Criamos duas pilhas uma de Strings denominada sg e outra de Inteiros denominada ig. Se você tentar inserir uma String, por exemplo, em ig com ig.push(new Integer(1)) vai dar erro de compilação. O Java não deixa você nem mesmo executar o programa.
PS: para quem que conhecer um pouco mais de estrutura de dados, dê um clique para o site da Professora Anita Lopes.
sábado, 10 de novembro de 2012
Gerando um número reverso e MDC
Dois números naturais (1,2,3,4,...) tem sempre um divisor comum, isto é, um número que divide ambos os números e resta zero (mesmo que este número seja 1). O maior divisor comum destes dois números é chamado de máximo divisor comum destes números, e é abreviado por MDC.
Para representar uma fração normalmente fazemos com que o numerador e denominador sejam números primos, isto é, o MDC entre eles é 1. Assim se consideramos 2 números quaisquer a e b, uma fração a/b pode ser simplificada para c/d onde c e d são primos realizando a seguinte operação. Achamos os MDC(a,b) = m e achamos a = m * c e b = m * d.
Podemos achar o MDC por fatoração dos 2 números ou pelo método das divisões sucessivas. Eu acho melhor implementar o segundo método, portanto:
Vamos agora fazer uma classe bem simples - só para a gente treinar um pouco mais esta parte de manipulação matemática de inteiros. O que vamos fazer? Uma classe que passamos um número inteiro abcdef e a classe retorna outro número na ordem invertida. Temos diversos métodos de resolver este problema, os mais comuns são:
Notem a linha 28, vocês se lembram do último post? Dá para reescrever como
Para representar uma fração normalmente fazemos com que o numerador e denominador sejam números primos, isto é, o MDC entre eles é 1. Assim se consideramos 2 números quaisquer a e b, uma fração a/b pode ser simplificada para c/d onde c e d são primos realizando a seguinte operação. Achamos os MDC(a,b) = m e achamos a = m * c e b = m * d.
Podemos achar o MDC por fatoração dos 2 números ou pelo método das divisões sucessivas. Eu acho melhor implementar o segundo método, portanto:
Vamos agora fazer uma classe bem simples - só para a gente treinar um pouco mais esta parte de manipulação matemática de inteiros. O que vamos fazer? Uma classe que passamos um número inteiro abcdef e a classe retorna outro número na ordem invertida. Temos diversos métodos de resolver este problema, os mais comuns são:
- transformar o inteiro em uma String e ler as posições da string na ordem inversa, gerando uma segunda String. Ao terminar convertemos esta segunda String em inteiro;
- usamos restos sucessivos;
- etc
Notem a linha 28, vocês se lembram do último post? Dá para reescrever como
numero /= 10
segunda-feira, 5 de novembro de 2012
Operando com frações
Pode-se dizer que uma fração, representada de modo genérico como
, designa o inteiro dividido em b partes iguais ao qual se toma o número a de partes.
Neste caso, a corresponde ao numerador, enquanto b corresponde ao denominador, que não pode ser igual a zero.
O denominador corresponde ao número de partes que um todo será dividido e o numerador corresponde ao número de partes que serão consideradas.

Você já pensou em trabalhar com esta definição em Java? Para quê você vai me perguntar? Por diversão? Para permitir um estudante resolver os exercícios de casa sem ter que pensar muito? Sei não...
Basicamente estou utilizando uma classe que denominei Fracoes para criar, somar e subtrair as frações.
Notem que uma vez que o denominador não pode ser zero, eu gero uma exceção java.lang.IllegalArgumentException. A gente poderia mandar uma ArithmeticExpection como o erro vem de um parâmetro, achei mais interessante esta exceção.
Para quem é novato: vejam as divisões nas linhas 65 e 66.
Criei uma classe de teste que basicamente instancia 3 frações. Apresento abaixo a soma e a subtração dos valores.
Vejam a saída do programa:
Tem bastante coisa para melhorar ainda. Como por exemplo dá para criar uma fração 1/-2 que deveria ser representada por -1/2. Dá para acrescentar a multiplicação e divisão. Mas isto fica para um próximo post.
Se vocês notarem atentamente no código vão ver que tem uma classe que eu não coloquei... MDC que quer dizer máximo divisor comum. Para que eu uso ela? Para garantir que minhas frações fiquem sempre simplificadas. Como assim? Vejam que criei f3 como sendo 10/4 (linha 19 do código) mas na saída do programa ela já foi apresentada como 5/2.
Vou deixar vocês pensarem um pouco com fiz isto e no próximo post coloco para vocês a solução.

Neste caso, a corresponde ao numerador, enquanto b corresponde ao denominador, que não pode ser igual a zero.
O denominador corresponde ao número de partes que um todo será dividido e o numerador corresponde ao número de partes que serão consideradas.

Você já pensou em trabalhar com esta definição em Java? Para quê você vai me perguntar? Por diversão? Para permitir um estudante resolver os exercícios de casa sem ter que pensar muito? Sei não...
Basicamente estou utilizando uma classe que denominei Fracoes para criar, somar e subtrair as frações.
Notem que uma vez que o denominador não pode ser zero, eu gero uma exceção java.lang.IllegalArgumentException. A gente poderia mandar uma ArithmeticExpection como o erro vem de um parâmetro, achei mais interessante esta exceção.
Para quem é novato: vejam as divisões nas linhas 65 e 66.
Criei uma classe de teste que basicamente instancia 3 frações. Apresento abaixo a soma e a subtração dos valores.
Vejam a saída do programa:
- Na primeira linha temos f, seguido de f2 e f3.
- Na quarta linha temos f + f2 e
- Na quinta linha temos f - f3
Tem bastante coisa para melhorar ainda. Como por exemplo dá para criar uma fração 1/-2 que deveria ser representada por -1/2. Dá para acrescentar a multiplicação e divisão. Mas isto fica para um próximo post.
Se vocês notarem atentamente no código vão ver que tem uma classe que eu não coloquei... MDC que quer dizer máximo divisor comum. Para que eu uso ela? Para garantir que minhas frações fiquem sempre simplificadas. Como assim? Vejam que criei f3 como sendo 10/4 (linha 19 do código) mas na saída do programa ela já foi apresentada como 5/2.
Vou deixar vocês pensarem um pouco com fiz isto e no próximo post coloco para vocês a solução.
Assinar:
Postagens (Atom)