Ajuda (sem dizer qual) para fazer um trabalho da facul

Estou precisando de um help, tenho que fazer um trabalho da facul , um programa em java,Tenho algumas duvidas.por favor se algue puder me ajudar
meu msn é mmiliquita@hotmail.com

Só faltou a foto sexy :twisted:

Dúvida de quê? Poderia ser mais precisa?

Se você tem dúvidas, aqui no forum é o lugar de tirar as dúvidas e tentar resolver problemas.

Eu venho observando que de uns tempos para cá as faculdades estão adotando Java para as matérias de Programação, Estrutura de dados, Analise e desenho de algoritmos etc.

Por isso que existe muita gente se cadastrando no forum e fazendo perguntas semelhantes a essa. E acredito que esse numero vai aumentar cada vez mais!

Acho que que devemos fazer uma campanha do tipo “Tirar dúvidas é diferente de fazer dever de casa para vc”.

Muita gente vem postado a questão e pedindo ajuda para resolver e não tirar dúvidas.

Nada contra a Nanda, mas postar as dúvidas aqui seria legal porque pode ser a mesma dúvida para outras pessoas.

http://www.nanda.org/

NANDA-I is the premier international
Nursing Diagnosis association.

Be a Part of the Nursing Diagnosis Movement

The future of nursing practice is in our hands. It’s up to us to define our own work. We need to make sure that the important judgments we make and the language that expresses them are deeply valued. That’s what NANDA International is all about.

[quote=thingol]http://www.nanda.org/

NANDA-I is the premier international
Nursing Diagnosis association.

Be a Part of the Nursing Diagnosis Movement

The future of nursing practice is in our hands. It’s up to us to define our own work. We need to make sure that the important judgments we make and the language that expresses them are deeply valued. That’s what NANDA International is all about.[/quote]

O que o Google não faz rs…

[quote=nanda]Estou precisando de um help, tenho que fazer um trabalho da facul , um programa em java,Tenho algumas duvidas.por favor se algue puder me ajudar
meu msn é mmiliquita@hotmail.com[/quote]

Eh gatinha ? Vai pagar pela ajuda ? :slight_smile:

PS: Aceito em serviços … :twisted:

Pessoal,
Apesar da Nanda ter sido infeliz no tópico que criou, não acho legal baixarmos o nível ou agredir a pessoa.
É bem provável que tenha ela feito isso de má fé, mas também pode estar na iminência te tomar um Zerowski bem gostoso (Provavelmente por que naum estudou, ficou esperando a galera aqui responder).
Acho que isso pode causar uma má impressão no pessoal que entra agora.
E, Nanda, por favor, estude o seu problema, anote as dúvidas pontuais e posta-as aqui que tentaremos responder (desde que sejam dúvidas, e não o trabalho inteiro)

Desculpe ai qualquer coisa mas minha intenção nao era que fizessem o dev de casa não.Mas é que começo a fazer o programa e ele nem roda da erro …dentre milhares de outras duvidas que tenho no decorrer do programa que tenho que fazer ,mas tudo bem.Como tenho muitas duvidas achei que fosse ruim postar inumeras duvidas.
De qualquer forma quem puder dar help…agradeço.

O programa é como se fosse uma micro folha de pagamento que ira cadastrar no maximo 10 pessoas.O campo data deve considerar a possibilidade do cadastro acontecer final de semana e o sistema deve impedir e mandar uma msg,e considerar a possibilidade do cadastro acontecer no ano bissexto.Caso o funcionario seja homem ñ permitir que seja contratado com menos de 18 anos, sendo mulher deve ser maior de 14 anos. …e aio programa segue com desconttos do inss a depender do salario e Imposto de renda.

Duvida:Não sei como fazer pra que o cadastramento ñ possa ser feito nos finais de semana a considear ano bissexto. E fazer com que o valor seja escrito por extenso.Tenho a classe por extenso mas não sei como impotar …chama-la ñ sei como dizer:
tai o esboço do programa, esta dando erro e ñ sei como consertar

import javax.swing.JOptionPane;
import java.awt.Graphics;
import javax.swing.JApplet;

public class folhadepagamento extends JApplet
{
	public void paint (Graphics g)
	{
		super.paint(g);
		
		String nome,sexo;
		int cont=0, idade;
		double valor,inss ;
				
		
	while ( cont <= 10 ) { //cadastramento de no maximo 10 funcionarios//
		cont=cont+1;
		nome=JOptionPane.showInputDialog ("Digite o nome do funcionario: ");
		idade=JOptionPane.showInputDialog ("Digite a idade: ");
		sexo=JOptionPane.showInputDialog ("Digite o sexo: M ou F:");
		valor=JOptionPane.showInputDialog ("Qual o valor do salario: ");
		
		if (sexo.equals ("M") )//Homem com menos de 18 não pode ser contratado//
		
		if ( idade<=18 ) 
		JOptionPane.showMessageDialog (null, "o funcionario não pode ser cadastrado");
		else
		
		if (sexo.equals ("F") )//Mulher deve ter mais de 14 anos p/ ser contratada//
		if(idade<=14)
		JOptionPane.showMessageDialog (null, "A funcionaria não pode ser cadastrada");

        if(valor<=600) //salario ate 600 deconta 7%//
         inss=valor*0.07;
         
        if(valor>600 && valor<=780)//salario ate 780 desconta 7.65%//
         inss=valor* 0.0765;
         
        if (valor>780 && valor<=990) //salario ate 990 desconta 8.65%//
         inss=valor*0.0865; 
        
        if (valor>990 && valor<=1200)//salario ate 1200 desconta 11%//
         inss=valor*0.11; 
         
        if (valor>=1200)// maior que 1200 tb desconta 11%// 
         inss=valor*0.11;  
        
        
                 
         
         
		}
	}	
		
		
}		

Vou fazer uma pequena pergunta.
É absolutamente necessário que o programa seja um applet? (Ou seja, o professor nem vai aceitar o trabalho se não for um applet?)
É que acho que é bem mais difícil escrever applets que os professores acham.
Seria possível que fosse uma simples aplicação Java, aquelas que têm “public static void main”? Assim seria bem mais fácil trabalhar.

Outra coisa - vamos dividir o problema em partes.

a) Impedir que o cadastro ocorra nos fins de semana.

Para começar, como é que se obtém a data atual?

Como é que você sabe que a data atual é sábado ou domingo?

import java.util.Calendar;
...
Calendar cal = Calendar.getInstance();
if (cal.get (Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || 
cal.get (Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
... caso "fim de semana"...
} else {
... caso "cadastro possível" ...
}

b) Chamar a rotina que escreve o dado “por extenso”. - Isso fica por sua conta, já que não estou com essa rotina para ver como é que você deve fazer.

Boa noite Nanda,

Inicialmente eu encontrei dois erros de imcompatiblidade aqui:

while ( cont <= 10 ) { //cadastramento de no maximo 10 funcionarios//
 		cont=cont+1;
 		nome=JOptionPane.showInputDialog ("Digite o nome do funcionario: ");
 		idade=JOptionPane.showInputDialog ("Digite a idade: "); <-- aqui 
 		sexo=JOptionPane.showInputDialog ("Digite o sexo: M ou F:");
 		valor=JOptionPane.showInputDialog ("Qual o valor do salario: "); <-- aqui
....

Ficaria assim:

while ( cont <= 10 ) { //cadastramento de no maximo 10 funcionarios// cont=cont+1; nome=JOptionPane.showInputDialog ("Digite o nome do funcionario: "); idade=Integer.parseInt(JOptionPane.showInputDialog ("Digite a idade: ")); sexo=JOptionPane.showInputDialog ("Digite o sexo: M ou F:"); valor= Double.parseDouble(JOptionPane.showInputDialog ("Qual o valor do salario: "));

Quanto a parte lógica do programa eu não testei.
Surgindo mais dúvidas estamos ai.

Até mais

OBRIGADA!
Concertei A INCOMPATIBILIDADE .

Esse codigo vai entrar onde no meu programa… é uma classe que preciso chamar ? é pra por no programa principal
Ah não precisa ser no applet nao é qie nao sei o outro metodo muito não.
Com faço pro metodo mais simples.

import java.util.Calendar;

Calendar cal = Calendar.getInstance();
if (cal.get (Calendar.DAY_OF_WEEK) == Calendar.SATURDAY ||
cal.get (Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
… caso “fim de semana”…
} else {
… caso “cadastro possível” …
}

Esta dando erro, mas ñ sei como concerta-lo.
Como faço pra esse programa nao cadastrar nos finais de semana?

import javax.swing.JOptionPane;
public class folhadepagamento
{
public static void main (String args[])
{

	String nome,sexo;
	int cont=0, idade;
	double valor,inss,valor2,IR ;
			
	
while ( cont <= 10 ) { //cadastramento de no maximo 10 funcionarios//
	cont=cont+1;
	nome=JOptionPane.showInputDialog ("Digite o nome do funcionario: ");
	idade=Integer.parseInt(JOptionPane.showInputDialog ("Digite a idade: "));
	sexo=JOptionPane.showInputDialog ("Digite o sexo: M ou F:");		
	
	
	if (sexo.equals ("M") ) //Homem com menos de 18 não pode ser contratado//
	if ( idade<=18 ) 
	JOptionPane.showMessageDialog (null, "o funcionario não pode ser cadastrado");
	else
	
	if (sexo.equals ("F") )//Mulher deve ter mais de 14 anos p/ ser contratada//
	if(idade<=14)
	JOptionPane.showMessageDialog (null, "A funcionaria não pode ser cadastrada");
	

    valor= Double.parseDouble(JOptionPane.showInputDialog ("Qual o valor do salario: "));
    
    if(valor<=600){ //salario ate 600 deconta 7%//
     inss=valor*0.07;
     JOptionPane.showMessageDialog (null, "O  desconto: "+inss, "inss", JOptionPane.PLAIN_MESSAGE);}
     
    if(valor>600 && valor<=780){//salario ate 780 desconta 7.65%//
     inss=valor* 0.0765;
     JOptionPane.showMessageDialog (null, "O  desconto: "+inss, "inss", JOptionPane.PLAIN_MESSAGE);}
     
    if (valor>780 && valor<=990){ //salario ate 990 desconta 8.65%//
     inss=valor*0.0865; 
     JOptionPane.showMessageDialog (null, "O  desconto: "+inss, "inss", JOptionPane.PLAIN_MESSAGE);}
    
    if (valor>990 && valor<=1200){//salario ate 1200 desconta 11%//
     inss=valor*0.11; 
     JOptionPane.showMessageDialog (null, "O  desconto: "+inss, "inss", JOptionPane.PLAIN_MESSAGE);}
     
    if (valor>=1200){// maior que 1200 tb desconta 11%// 
     inss=valor*0.11;  
     JOptionPane.showMessageDialog (null, "O  desconto: "+inss, "inss", JOptionPane.PLAIN_MESSAGE);}
     
     valor2=valor-inss;
   if(idade<=65)
    if (valor2>900 && valor2<=1200){
       IR=valor2-valor2*0.15-100;
       JOptionPane.showMessageDialog (null, "O  Imposto de Renda: "+IR, "IR", JOptionPane.PLAIN_MESSAGE);}
    if (valor2>1200) {
      IR=valor-valor*0.275-150; 
      JOptionPane.showMessageDialog (null, "O  Imposto de Renda: "+IR, "IR", JOptionPane.PLAIN_MESSAGE);}
   if (idade>65) 
    if (valor2>900 && valor2<=1200){
       IR=valor2-valor2*0.075-100;
       JOptionPane.showMessageDialog (null, "O  Imposto de Renda: "+IR, "IR", JOptionPane.PLAIN_MESSAGE);}
    if (valor2>1200) {
      IR=valor-valor*0.275-150; 
      JOptionPane.showMessageDialog (null, "O  Imposto de Renda: "+IR, "IR", JOptionPane.PLAIN_MESSAGE);}
       
    
     System.exit(0);        
     
    
    } 
	
}	

}

Seu código está faltando, alem de indentação, delimitar bem os ifs.

Acho que o seu programa poderia ficar assim:

[code]import javax.swing.JOptionPane;
public class FolhadePagamento{

public static void show (String msg){
	JOptionPane.showMessageDialog (null,msg);
}

public static String lerInfo(String msg){
	return JOptionPane.showInputDialog(msg);
}

public static void main (String args[]){

	int   max=10;
	String buffer;

	int   idade;
	String nome;

	double salario; // salario propriamente dito R$
	double inss;    // parte retida pelo inss R$
	double leao;    // parte retida pelo imposto de renda R$

	double porcentagem_inss; // autoexplicativo
	double IR;   // % do imposto de renda
	double fix;  // aquele valor fixo que vc subtrai do imposto


	boolean homem;

	for(int i=0; i< max ;i++) {

		nome   = lerInfo("Digite o nome do funcionario: ");

		idade  = Integer.parseInt(lerInfo("Digite a idade: "));

		buffer = JOptionPane.showInputDialog ("Digite o sexo: M ou F:");

		homem  = buffer.equalsIgnoreCase("m"); // simples né?

		// uso simples de operações lógicas and e or
		if((homem && idade <18) || (!homem && idade<14)){
				show("Este funcionario(a) não pode ser cadastrado(a)");
				continue;
		}

		salario = Double.parseDouble(lerInfo("Qual o valor do salario: "));

		if (salario<=600){
			porcentagem_inss = 0.07;
		} else if (salario>600 && salario<=780){
			porcentagem_inss = 0.0765;
		} else if (salario>780 && salario<=990){
			porcentagem_inss = 0.0865;
		} else if (salario>990 && salario<=1200){
			porcentagem_inss = 0.11;
		} else {
			porcentagem_inss = 0.11;
		}

		inss = salario * porcentagem_inss;

		IR  = 0.0; // porcentagem que o imposto paga
		fix = 0.0; // valor fixo descontado

		if((salario - inss) > 900){ // se o que sobrar eh maior que 900
			if(idade<=65 && (salario - inss) <= 1200){
				IR  = 0.15;
				fix = 100;
			} else if (idade <=65){
				IR  = 0.275;
				fix = 150;
			} else if (idade > 65 && (salario - inss) <= 1200){
				IR  = 0.075;
				fix = 100;
			} else {
				IR  = 0.275;
				fix = 150;
			}
		}

		leao = 0.0; // caso nao seja necessario pagar

		if((salario - inss) * IR > fix){ // verifique esta conta, pliz!
			leao = (salario - inss) * IR - fix;
		}

		show(   "Funcionario " + nome
		    + "\nSexo        " + ((homem)?"masculino":"feminino")
			+ "\nIdade       " + idade
			+ "\nSalario     " + salario
			+ "\nDescontos:"
			+ "\nINSS " + inss
			+ "\nIR   " + leao);
	}

	System.exit(0);
}

}[/code]

ou assim (mais ‘orientado’ a objeto):

[code]import javax.swing.JOptionPane;

public class FolhadePagamento{

public static void show (String msg){
	JOptionPane.showMessageDialog (null,msg);
}

public static String lerInfo(String msg){
	return JOptionPane.showInputDialog(msg);
}

public static void main (String args[]){

	Funcionario [] func = new Funcionario[10];

	for(int i=0; i< func.length ;i++) {

		int idade;
		String buffer, nome;
		double salario;
		double porcentagem_inss;
		double IR;
		double fix;
		boolean homem;

		nome   = lerInfo("Digite o nome do funcionario: ");

		idade  = Integer.parseInt(lerInfo("Digite a idade: "));

		buffer = JOptionPane.showInputDialog ("Digite o sexo: M ou F:");

		homem  = buffer.equalsIgnoreCase("m"); // simples né?

		// uso simples de operações lógicas and e or
		if((homem && idade <18) || (!homem && idade<14)){
				show("Este funcionario(a) não pode ser cadastrado(a)");
				continue;
		}

		salario = Double.parseDouble(lerInfo("Qual o valor do salario: "));

		func[i] = new Funcionario(nome,idade,salario,homem);

		if (salario<=600){
			porcentagem_inss = 0.07;
		} else if (salario>600 && salario<=780){
			porcentagem_inss = 0.0765;
		} else if (salario>780 && salario<=990){
			porcentagem_inss = 0.0865;
		} else if (salario>990 && salario<=1200){
			porcentagem_inss = 0.11;
		} else {
			porcentagem_inss = 0.11;
		}

		func[i].setInss(porcentagem_inss);

		IR  = 0.0; // porcentagem que o imposto paga
		fix = 0.0; // valor fixo descontado

		// se o que sobrar eh maior que 900
		if((salario * (1 - porcentagem_inss)) > 900){
			if(idade<=65 && (salario * (1 - porcentagem_inss)) <= 1200){
				IR  = 0.15;
				fix = 100;
			} else if (idade <=65){
				IR  = 0.275;
				fix = 150;
			} else if (idade > 65 && (salario *(1 - porcentagem_inss)) <= 1200){
				IR  = 0.075;
				fix = 100;
			} else {
				IR  = 0.275;
				fix = 150;
			}
		}

		func[i].setLeao(IR,fix);

		show(func[i].toString());
	}

	System.exit(0);
}

}

class Funcionario{
private int idade;
private String nome;

	private double salario; // salario propriamente dito R$
	private double inss;    // parte retida pelo inss R$
	private double leao;    // parte retida pelo imposto de renda R$

	private boolean homem;

	public Funcionario(String nome, int idade, double salario, boolean homem){
		this.nome    = nome;
		this.idade   = idade;
		this.salario = salario;
		this.homem   = homem;
		this.inss    = 0.0;
		this.leao    = 0.0;
	}

	public void setInss(double porcentagem_inss){
		this.inss = this.salario * porcentagem_inss;
	}

	public void setLeao(double IR, double fix){
		this.leao = (this.salario - this.inss) * IR - fix;
	}

	public String toString(){
			return   "Funcionario " + nome
				+ "\nSexo        " + ((homem)?"masculino":"feminino")
				+ "\nIdade       " + idade
				+ "\nSalario     " + salario
				+ "\nDescontos:"
				+ "\nINSS " + inss
				+ "\nIR   " + leao;
	}

}[/code]

De qq forma, procure

  • reutilizar codigo, se o mesmo codigo esta ali varias vezes, de repente é bom coloca-lo em um método
  • sempre mostrar onde termina e onde começa um if
  • usar if {} else if {} else {} nos lugares certos
  • pensar orientado a objeto. vc esta lidando com funcionarios, certo? pense nisso :wink:

Olá nanda…

Bom a classe que nosso amigo peczenyj está bem legal né? então agora…para você fazer sua validação se pode haver ou não cadastro é só criar um método dentro da classe funcionario…que poderia se chamar validaCadastro, exemplo:

import java.util.Calendar; //de o import da classe

public static boolean validaCadastro()
{

Calendar cal = Calendar.getInstance();

if (cal.get (Calendar.DAY_OF_WEEK) == Calendar.SATURDAY ||
cal.get (Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
return false;
} else {
return true;
} 
}

Esse metodo ficaria dentro de funcionario mesmo, ai quando você chamasse o construto de funcionario, você faria uma validação se é possível cadastrar ou não


//construto da classe funcionario

public Funcionario(String nome, int idade, double salario, boolean homem){
if (validaCadastro())
{
 			this.nome    = nome;
 			this.idade   = idade;
 			this.salario = salario;
 			this.homem   = homem;
 			this.inss    = 0.0;
 			this.leao    = 0.0;
}
else 
      System.out.println("Cadastro não pode ser feito de finais de semana!!!o funcionario: " +nome+ " não pode ser cadastrado!");
 		}

Bom, espero termos ajudado! :smiley:

eita q topico polemico heim!!!

Esse codigo abaixo ta beleza …só que qdo eu digitar salario tenho que mostrar por extenso.Abaixo segue a classe extenso … não sei como fazer a ligação da classe com o programa principal .
Deixo a classe separado do programa princiipalsalvano mesmo direitorio?ou tem que jogar a classe pra dentro?

package temp;
import javax.swing.JOptionPane;
import java.util.Calendar;

public class FolhadePagamento0{

public static void show (String msg){
	JOptionPane.showMessageDialog (null,msg);
}

public static String lerInfo(String msg){
	return JOptionPane.showInputDialog(msg);
}

public static void main (String args[]){

	Funcionario [] func = new Funcionario[10];

	for(int i=0; i< func.length ;i++) {

		int idade;
		String buffer, nome;
		double salario;
		double porcentagem_inss;
		double IR;
		double fix;
		boolean homem;

		nome   = lerInfo("Digite o nome do funcionario: ");

		idade  = Integer.parseInt(lerInfo("Digite a idade: "));

		buffer = JOptionPane.showInputDialog ("Digite o sexo: M ou F:");

		homem  = buffer.equalsIgnoreCase("m"); // simples né?

		// uso simples de operações lógicas and e or
		if((homem && idade <18) || (!homem && idade<14)){
				show("Este funcionario(a) não pode ser cadastrado(a)");
				continue;
		}

		salario = Double.parseDouble(lerInfo("Qual o valor do salario: "));

		func[i] = new Funcionario(nome,idade,salario,homem);

		if (salario<=600){
			porcentagem_inss = 0.07;
		} else if (salario>600 && salario<=780){
			porcentagem_inss = 0.0765;
		} else if (salario>780 && salario<=990){
			porcentagem_inss = 0.0865;
		} else if (salario>990 && salario<=1200){
			porcentagem_inss = 0.11;
		} else {
			porcentagem_inss = 0.11;
		}

		func[i].setInss(porcentagem_inss);

		IR  = 0.0; // porcentagem que o imposto paga
		fix = 0.0; // valor fixo descontado

		// se o que sobrar eh maior que 900
		if((salario * (1 - porcentagem_inss)) > 900){
			if(idade<=65 && (salario * (1 - porcentagem_inss)) <= 1200){
				IR  = 0.15;
				fix = 100;
			} else if (idade <=65){
				IR  = 0.275;
				fix = 150;
			} else if (idade > 65 && (salario *(1 - porcentagem_inss)) <= 1200){
				IR  = 0.075;
				fix = 100;
			} else {
				IR  = 0.275;
				fix = 150;
			}
		}

		func[i].setLeao(IR,fix);

		show(func[i].toString());
	}

	System.exit(0);
}

}

class Funcionario{

boolean validaCadastro(){
	Calendar cal = Calendar.getInstance();

	if (cal.get (Calendar.DAY_OF_WEEK) == Calendar.SATURDAY ||
		cal.get (Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) 
	{
		return false;
	} else {
		 return true;
	} 
}		


	private int   idade;
	private String nome;

	private double salario; // salario propriamente dito R$
	private double inss;    // parte retida pelo inss R$
	private double leao;    // parte retida pelo imposto de renda R$

	private boolean homem;
	
	public Funcionario(String nome, int idade, double salario, boolean homem){
		if (validaCadastro()) {
  			this.nome    = nome;
  			this.idade   = idade;
  			this.salario = salario;
  			this.homem   = homem;
  			this.inss    = 0.0;
  			this.leao    = 0.0;
 		} else {
			System.out.println("Cadastro não pode ser feito de finais de semana!!!o funcionario: " +nome+ " não pode ser cadastrado!");
  		}
	}
	
	public void setInss(double porcentagem_inss){
		this.inss = this.salario * porcentagem_inss;
	}

	public void setLeao(double IR, double fix){
		this.leao = (this.salario - this.inss) * IR - fix;
	}

	public String toString(){
			return   "Funcionario " + nome
				+ "\nSexo        " + ((homem)?"masculino":"feminino")
				+ "\nIdade       " + idade
				+ "\nSalario     " + salario
				+ "\nDescontos:"
				+ "\nINSS " + inss
				+ "\nIR   " + leao;
	}
}

A classe extenso

import java.math.BigInteger;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.text.DecimalFormat;

public class 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 Extenso() {
	nro = new ArrayList();
}


/**
 *  Construtor
 *
 *@param  dec  valor para colocar por extenso
 */
public Extenso(BigDecimal dec) {
	this();
	setNumber(dec);
}


/**
 *  Constructor for the Extenso object
 *
 *@param  dec  valor para colocar por extenso
 */
public Extenso(double dec) {
	this();
	setNumber(dec);
}


/**
 *  Sets the Number attribute of the Extenso object
 *
 *@param  dec  The new Number value
 */
public void setNumber(BigDecimal dec) {
	// Converte para inteiro arredondando os centavos
	num = dec
		.setScale(2, BigDecimal.ROUND_HALF_UP)
		.multiply(BigDecimal.valueOf(100))
		.toBigInteger();

	// Adiciona valores
	nro.clear();
	if (num.equals(BigInteger.ZERO)) {
		// Centavos
		nro.add(new Integer(0));
		// Valor
		nro.add(new Integer(0));
	}
	else {
		// Adiciona centavos
		addRemainder(100);
		
		// Adiciona grupos de 1000
		while (!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
 */
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 é zero
		if (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, "h");
		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 Extenso 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 divisor
	BigInteger[] newNum = num.divideAndRemainder(BigInteger.valueOf(divisor));

	// Adiciona modulo
	nro.add(new Integer(newNum[1].intValue()));

	// Altera numero
	num = 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 < nro.size(); i++) {
		if (((Integer)nro.get(i)).intValue() != 0) {
			if (hasOne)
				return false;
			hasOne = true;
		}
	}
	return true;
}

boolean ehGrupoZero(int ps) {
	if (ps <= 0 || ps >= 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..19
	int 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();
}


/**
 *  Para teste
 *
 *@param  args  numero a ser convertido
 */
public static void main(String[] args) {
	if (args.length == 0) {
		System.out.println("Sintax : ...Extenso <numero>");
		return;
	}
	Extenso teste = new Extenso(new BigDecimal(args[0]));
	System.out.println("Numero  : " + (new DecimalFormat().format(Double.valueOf(args[0]))));
	System.out.println("Extenso : " + teste.toString());
}

}

não vou olhar mais nenhum codigo que não esteja entre tags [ code] e [/ code]