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.
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 ?
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
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!
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]