package umcastec;import java.math.BigDecimal;import java.math.BigInteger;import java.util.ArrayList;import java.util.Iterator;public class Escrver_Extenso{private ArrayList nro;private BigInteger num;private String Qualificadores[][] = {{"centavo", "centavos"},{"", ""}, {"mil", "mil"},{"milhão", "milhões"},{"bilhão", "bilhões"},{"trilhão", "trilhões"},{"quatrilhão", "quatrilhões"}, {"quintilhão", "quintilhões"},{"sextilhão", "sextilhões"}, {"septilhão", "septilhões"}};private String Numeros[][] = {{"zero", "um", "dois", "três", "quatro", "cinco", "seis", "sete","oito", "nove", "dez", "onze", "doze", "treze", "quatorze","quinze", "desesseis", "desessete", "dezoito", "desenove"},{"vinte", "trinta", "quarenta", "cinquenta", "sessenta","setenta", "oitenta", "noventa"},{"cem", "cento", "duzentos", "trezentos", "quatrocentos","quinhentos", "seiscentos", "setecentos", "oitocentos","novecentos"}};/** * Construtor */public JExtenso() {nro = new ArrayList();}/** * Construtor** @param dec* valor para colocar por extenso */public JExtenso(BigDecimal dec) {this();setNumber(dec);}/*** Constructor for the JExtenso object* @param dec* valor para colocar por extenso */public JExtenso(double dec) {this();setNumber(dec); }/*** Sets the Number attribute of the JExtenso object** @param dec* The new Number value */public void setNumber(BigDecimal dec) {// Converte para inteiro arredondando os centavosnum = dec.setScale(2, BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100)).toBigInteger();// Adiciona valoresnro.clear();if (num.equals(BigInteger.ZERO)) {// Centavosnro.add(new Integer(0));// Valornro.add(new Integer(0));} else {// Adiciona centavosaddRemainder(100);// Adiciona grupos de 1000while (!num.equals(BigInteger.ZERO)) {addRemainder(1000);}}}public void setNumber(double dec) {setNumber(new BigDecimal(dec)); }/** * Description of the Method */public void show() {Iterator valores = nro.iterator();while (valores.hasNext()) {System.out.println(((Integer) valores.next()).intValue());}System.out.println(toString()); }/*** Description of the Method ** @return Description of the Returned Value */@Override public String toString() {StringBuffer buf = new StringBuffer();int numero = ((Integer) nro.get(0)).intValue();int ct;for (ct = nro.size() - 1; ct > 0; ct--) {// Se ja existe texto e o atual n�o � zeroif (buf.length() > 0 && !ehGrupoZero(ct)) {buf.append(" e "); }buf.append(numToString(((Integer) nro.get(ct)).intValue(), ct)); }if (buf.length() > 0) {if (ehUnicoGrupo()) {buf.append(" de "); }while (buf.toString().endsWith(" ")) {buf.setLength(buf.length() - 1); }if (ehPrimeiroGrupoUm()) {buf.insert(0, ""); }if (nro.size() == 2 && ((Integer) nro.get(1)).intValue() == 1) {buf.append(" real");} else {buf.append(" reais"); }if (((Integer) nro.get(0)).intValue() != 0) {buf.append(" e "); } }if (((Integer) nro.get(0)).intValue() != 0) {buf.append(numToString(((Integer) nro.get(0)).intValue(), 0)); }return buf.toString(); }private boolean ehPrimeiroGrupoUm() {if (((Integer) nro.get(nro.size() - 1)).intValue() == 1) {return true; } return false; }/*** Adds a feature to the Remainder attribute of the JExtenso object** @param divisor* The feature to be added to the Remainder attribute */private void addRemainder(int divisor) {// Encontra newNum[0] = num modulo divisor, newNum[1] = num dividido// divisorBigInteger[] newNum = num.divideAndRemainder(BigInteger.valueOf(divisor));// Adiciona modulonro.add(new Integer(newNum[1].intValue()));// Altera numeronum = newNum[0]; }/** * Description of the Method ** @param ps* Description of Parameter* @return Description of the Returned Value */private boolean temMaisGrupos(int ps) {for (; ps > 0; ps--) {if (((Integer) nro.get(ps)).intValue() != 0) {return true; } }return false; }/** * Description of the Method** @param ps* Description of Parameter* @return Description of the Returned Value */private boolean ehUltimoGrupo(int ps) {return (ps > 0) && ((Integer) nro.get(ps)).intValue() != 0&& !temMaisGrupos(ps - 1); }/*** Description of the Method** @return Description of the Returned Value */private boolean ehUnicoGrupo() {if (nro.size() <= 3) {return false; }if (!ehGrupoZero(1) && !ehGrupoZero(2)) {return false; }boolean hasOne = false;for (int i = 3; i < hasone =" true;">= nro.size()) {return true;} return ((Integer) nro.get(ps)).intValue() == 0; }/** * Description of the Method** @param numero* Description of Parameter* @param escala*Description of Parameter* @return Description of the Returned Value */private String numToString(int numero, int escala) {int unidade = (numero % 10);int dezena = (numero % 100); // * nao pode dividir por 10 pois// verifica de 0..19int centena = (numero / 100);StringBuffer buf = new StringBuffer();if (numero != 0) {if (centena != 0) {if (dezena == 0 && centena == 1) {buf.append(Numeros[2][0]);} else {buf.append(Numeros[2][centena]); }} if ((buf.length() > 0) && (dezena != 0)) {buf.append(" e "); }if (dezena > 19) {dezena /= 10;buf.append(Numeros[1][dezena - 2]);if (unidade != 0) {buf.append(" e ");buf.append(Numeros[0][unidade]);}} else if (centena == 0 || dezena != 0) {buf.append(Numeros[0][dezena]);}buf.append(" ");if (numero == 1) {buf.append(Qualificadores[escala][0]);} else {buf.append(Qualificadores[escala][1]);}}return buf.toString();} }Main.javapackage umcastec;import java.math.BigDecimal;public class Main {public static void main(String[] args) {String extenso;Double totProd = 1000.0;JExtenso je = new JExtenso(new BigDecimal(totProd));extenso = je.toString().toUpperCase();System.out.println(extenso + " - "+ je);//sída console//UM MIL REAIS - um mil reais//} }Código enviado por Ciro S. Santos
quinta-feira, 29 de abril de 2010
Escrever valor monetário por extenso
Criando uma ArrayList do tipo Inteiro
sexta-feira, 23 de abril de 2010
Operador ternário
sexta-feira, 16 de abril de 2010
Mês atual em Java
quinta-feira, 15 de abril de 2010
Contar total de letras, vogais e consoantes de uma String
Entendendo a plataforma Java, para leigos
Quando falamos em programação Java, muitas pessoas pensam estamos nos referindo a uma linguagem de programação. Mas Java além de uma linguagem de programação, é também uma máquina virtual, APIs e especificações. Nesse tutorial iremos organizar o pensamento para entender o que é cada parte da plataforma Java e também o que são todas aquelas siglas.
1. Um pouco de história
Voltando um pouco no tempo, no início da programação, nós tinhamos a linguagem Assemby. A linguagem assembly nada mais é do que instruções diretas para o processador. Cada comando nessa linguagem equivale a um comando para o processador executar. Dizemos que esses comandos são instruções de máquina.
Com a evolução da computação começamos a ter linguagens mais robustas de mais alto nível como a linguagem C. Numa linguagem de programação dessas, um comando no código fonte equivale a várias instruções de máquina. A relação não é um para um, como era no assembly. Então um novo componente da programação entrou em questão: o compilador. O compilador é o responsável em traduzir o programa em linguagem C para um programa em linguagem de máquina. Essa linguagem de máquina, serve para um processador específico, ou seja, um programa compilado para um processador não serve para um processador diferente.
Os sistemas operacionais também possuem seu conjunto de instruções e a forma como deve ser montado o executável é diferente. Então, além da compilação ser feita especificamente para determinado processador, ela deve ser feita para determinado sistema operacional também. Por isso um programa compilado para Windows não roda no Linux, e vice versa. Vamos chamar essas instruções para o sistema operacional de código nativo.
2. .java .class e bytecodes
Em Java, as coisas mudam novamente. Um programa Java não é compilado para um código nativo como é feito em um programa C. Quando compilamos um arquivo .java (que é a extensão de um programa Java, assim como .c é a extensão de um programa C) geramos um código intermediário, chamado bytecode que fica em um aquivo .class.
Um arquivo .java contém o código fonte, que depois de compilado vira um arquivo .class. Esse arquivo .classcontém instruções chamadas de bytecodes. Esses bytecodes são um código intermediário e não servem para ser executados por nenhum sistema operacional, não é um código nativo.
3. A máquina virtual
Os bytecodes não servem para ser executados por nenhum sistema operacional. Ao invés de executar os bytecodes diretamente, precisaremos de um programa, que leia cada bytecode e traduza para um código nativo. Assim podemos executar nosso programa Java. Esse programa que faz a tradução dos bytecodes e envia código nativo para o sistema executar é a máquina virtual, conhecida também como JVM (Java Virtual Machine). A máquina virtual é um programa, e vimos que um programa é especifico para determinado sistema operacional. Logo, existe uma máquina virtual para o windows que traduzirá os bytecodes para códigos nativos de windows, outra máquina virtual para linux que traduzirá os bytecodes para código nativo de linux, e assim por diante. No windows o programa da máquina virtual é o java.exe, e ele recebe como parâmetro quais arquivos .class devem ser executados. Lembrando que dentro dos arquivos .class existem os bytecodes.
4. Linguagem Orientada a Objetos
A linguagem Java é orientada a objetos. Cada classe Java está em um arquivo .java (geralmente) e cada arquivo.java é compilado e vira um .class. Para cada classe temos um .class então. Numa aplicação teremos centenas de arquivos .java e .class. Podemos agrupar um conjunto de arquivos .class em um arquivo .jar, um arquivo JAR (Java Archive) nada mais é um arquivo no formato zip com vários arquivos .class dentro (pode ser incluido opcionalmente os arquivos .java se desejar levar o código fonte junto). Os arquivos JAR as vezes podem ser referênciados como bibliotecas.
Um grupo de classes que servem para resolver determinado problema, como leitura e escrita em arquivos, nós chamamos de API (Application Program Interface). Inclusive, a API utilizada para manipulação de arquivos chama-se Java IO. As APIs são distribuidas em arquivos JAR, mas um arquivo JAR pode ter mais de uma API. O conceito de API é apenas para nós humanos, para a máquina virtual isso não faz diferença, o que importa são as classes.
A plataforma Java além da máquina virtual e da linguagem de programação é constituida também de uma série de APIs. Todo programa Java necessita de um conjunto básico de classes para funcionar, esse conjunto básico você consegue quando baixa a plataforma.
5. Ambiente de execução
Vimos que para executar um programa Java, precisamos de uma máquina virtual e as APIs do Java no mínimo. Onde conseguimos isso? A máquina virtual e as APIs são distribuidas num pacote chamado JRE (Java Runtime Environment). Esse pacote pode ser baixado no site da SUN http://java.sun.com/javase/downloads/index.jsp, a SUN é a mantenedora da plataforma Java. Voce já deve ter acessado algum site de banco que necessitou que você tivesse o Java instalado, esse Java a que o site se refere é o JRE. É no JRE que está o java.exe, que é a máquina virtual.
6. Java para desenvolvedores
Se você é um programador, necessitará algo mais do que o JRE. Precisará também do compilador da linguagem e seria interessante ter os códigos fonte das APIs (isso facilita muito o desenvolvimento). Esse conjunto destinado ao programador é o JDK (Java Development Kit). Dentro do JDK está também o JRE, então, não será necessário baixar os dois. O JDK também está disponível no site da Sun. No JDK vem o programa compilador da linguagem Java, no windows seria o javac.exe.
7. As diversas plataformas Java
Existem três conjuntos básicos de APIs em Java, que se diferem pela API utilizada principalmente, são eles:
Java ME (Micro Edition): Java para celulares e palm, tem uma máquina virtual que já vem com os equipamentos e possui uma API mais restrita já que os recursos computacionais desses equipamentos são mais limitados.
Java SE (Standard Edition): Java para desktop, contém a máquina virtual e APIs para programação em Java. Se for aprender Java começe por essa plataforma.
Java EE (Enterprise Edition): Java para web, contém tudo da plataforma SE e mais um pouco. Utiliza a mesma máquina virtual do SE.
Quando você for fazer download, com exceção do Java ME, não existirá distinção entre qual plataforma você precisará. Independente se é SE ou EE, você precisará do JRE ou JDK (que são o Java SE).
As APIs do Java EE geralmente vem em plugins para o ambiente de desenvolvimento ou no servidor de aplicações que for utilizar. Há sim, em JEE você precisará de um servidor de aplicações que roda na JVM.
8. Ambiente de desenvolvimento
Ao invés de ficar programando em bloco de notas e utilizando o javac em linha de comando, é mais interessante utilizar um ambiente de desenvolviemnto, chamdo IDE (Integrated Development Environment). Os ambientes mais comuns em Java são o Eclipse e o NetBeans.
9. Considerações finais
Apesar de muitos conceitos e siglas, a plataforma Java é muito poderosa e está presente em grande parte dos parques de programação do mundo. Agora que você já sabe quem é quem, está apto a começar seus estudos, é recomendável começar com o SE (Java para desktop) e quando tiver mais maturidade, entre no mundo web com o EE. Espero que tenha sido útil a explicação, até mais.
Formatando campos Data com SimpleDateFormat
quarta-feira, 14 de abril de 2010
Converter uma Palavra para letras maiúsculas e vise versa
Exemplo:
public class ConverterString {
public static void main(String args[]) {
//declaração das variáves
String min = "umcastec";
String mai = "UMCASTEC";
//metódo que converte Minúscula para Minúscula toUpperCase()
min = min.toUpperCase();
//metódo que converte Minúscula para Minúscula toLowerCase()
mai = mai.toLowerCase();
//imprime no console
System.out.println("Minúscula para Minúscula: " + min + " - " + mai);
System.out.println("Minúscula para Minúscula: " + mai + " - " + min);
/*saída no console:
Minúscula para Minúscula: UMCASTEC - umcastec
Minúscula para Minúscula: umcastec - UMCASTEC
*/
}
}