Entrada de Dados

12 respostas
F

Olá pessoal!

Tenho um programa que roda somente jogando um argumento nele para processar, args[].

Queria receber esse dado no JOptionPane e processar a partir dai, so que nao tenho conseguido. Deve ser coisa boba, pois o programa é simples, converte numeros para a forma escrita(extensa). O problema nao seria o JOptionPane, seria exatamente o metodo para tratar isso.

Alguem poderia me ajudar? Pois tenho q apresentar o programa amanha dia 25/06.

Eu envio o programa para quem se propor a ajudar.

Obrigado!
Fábio Heleno

12 Respostas

D

Naum to entendendo a duvida…

esse args, eh um array de Strings… e soh vc pegar a posicao q vc quer q eh a string digitada, dai vc pode exibir no JOptionPane

F

Certo, mas é que ele está funcionado como se fosse via dos.

ex: programa 121

se for executar via Eclipse, tenho q imbutir o argumento para ele receber e processar. queria que ele recebe-se pelo optionpane, nao acerto o metodo para tratar isso.

R

se vc explicar melhor o que vc quer, a gente ajuda
:lol:

F

OK! Vou tentar explicar melhor.

Meu programa não recebe o dado a ser processado(no caso numero) atraves de janelas, tenho que ir em Executar… e em argumentos ponho o valor para o programa processar.

Queria usar o JOptionPane para inserir os valores a serem transformado põr extenso, facilitanto, ao inves de a cada numero que eu queira transforma, tenha que ir em Executar como… e ir em argumentos e especificar.

D

vc quer fazer um programa sem interface grafica, q tem um JOptionPane como entrada de dados?? nao entendi direito o q vc quer… :?:

da dando algum erro??
posta o codigo pra gente te ajudar melhor!

flw!

H

public static void main (String [] args){ if(args.length > 0) { JOptionPane.showMessageDialog(null, args[0]); } }[/code]

F

“Heber”:
public static void main (String [] args){ if(args.length > 0) { JOptionPane.showMessageDialog(null, args[0]); } }[/code]

o meu programa está assim, como nosso colega Heber mostrou, só que neste caso ele está mostrando o que tem em args[0], e eu quero inserir o valor atraves do JOptioPane.

O problema que para eu dizer ao programa que quero converter o numero 20, tenho q ir em “Executar…” e inserir 20 no ARGUMENTOS. Para cada numero que tenha que converter tenho que fazer isso e na realidade, quero usar o JOptionPane para ir inserindo e ele vai convertendo, para ficar mas dinamico, entende?

Qualquer coisa, envio o codigo por email para quem se propuser ajudar. Por favor!

F

aqui segui o programa...

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

public class NExtenso { 
   private ArrayList nro; 
   private BigInteger num;

   private String Classificadores[][] = { 
         {"centavo", "centavos"}, 
         {"", ""}, 
         {"mil", "mil"}, 
         {"milhão", "milhões"} 
         }; 
   private static 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"} 
         }; 

   public NExtenso() { 
      nro = new ArrayList(); 
   } 

   public NExtenso(BigDecimal dec) { 
      this(); 
      setNumero(dec); 
   } 

   public NExtenso(double dec) { 
      this(); 
      setNumero(dec); 
   } 

   public void setNumero(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 setNumero(double dec) { 
      setNumero(new BigDecimal(dec)); 
   } 

   public void show() { 
      Iterator valores = nro.iterator(); 

      while (valores.hasNext()) { 
         System.out.println(((Integer) valores.next()).intValue()); 
      } 
      System.out.println(toString()); 
   } 

   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) { 
         while (buf.toString().endsWith(" ")) 
            buf.setLength(buf.length()-1); 
         if (nro.size() == 2 && ((Integer)nro.get(1)).intValue() == 1) { 
            buf.append(""); 
         } else { 
            buf.append(""); 
         } 
         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; 
   } 

   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]; 
   } 

   private boolean temMaisGrupos(int ps) { 
      for (; ps > 0; ps--) { 
         if (((Integer) nro.get(ps)).intValue() != 0) { 
            return true; 
         } 
      } 
      return false; 
   } 

   private boolean ehUltimoGrupo(int ps) { 
      return (ps > 0) && ((Integer)nro.get(ps)).intValue() != 0 && !temMaisGrupos(ps - 1); 
   } 

   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; 
   } 
    
   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(Classificadores[escala][0]); 
         } 
         else { 
            buf.append(Classificadores[escala][1]); 
         } 
      } 
      return buf.toString(); 
   } 

  public static void main(String[] args) {
 	
	if (args.length == 0) { 
		System.out.println("Sintax : ...Número <de 0 à 999999999>"); 
		return; 
	}
	if (args.length >= 10) {
		System.out.println("Valor informado, é maior que milhão"); 
		return;
	}
	
	NExtenso saida = new NExtenso(new BigDecimal(args[0]));
	
	System.out.println("Número  : " + (new DecimalFormat().format(Double.valueOf(args[0])))); 
	System.out.println("Extenso : " + saida.toString()); 

	}
}

Alguém saberia como fazer com que eu receba atraves do JOptionPane? ao inves de "Executar..." "ARGUMENTOS" ?

S

Acho que isso responde sua pergunta!

Aqui vai um exemplo:

package mypackage1;

import javax.swing.*;

public class Class1 
{
  public Class1()
  {
  }
  
  public String pegainput()
  {
    return JOptionPane.showInputDialog(null, "Insira o número:");
  }
  
  public static void main(String[] args)
  {
    Class1 c = new Class1();
    System.out.println(c.pegainput());
  }
}

Tá aí cara! Vc agora pega os argumentos de uma String retornada pela método showInputDialog() do JOptionPane.

Acho que era isso.

F

Bem, agora ele mostra a janela, até aqui tranquilo, mas nao sei como pega esse valor que recebi e fazer o programa converter.

Essa parte eu nao consigo fazer.

S
public static void main(String[] args) {
    
//   if (args.length == 0) {
//      System.out.println("Sintax : ...Número <de 0 à 999999999>");
//      return;
//   }
//   if (args.length >= 10) {
//      System.out.println("Valor informado, é maior que milhão");
//      return;
//   }
   
   BigDecimal bigD = new BigDecimal(JOptionPane.showInputDialog(null, "Fala o Número ae:"));
   NExtenso saida = new NExtenso(bigD);
   
   System.out.println("Número  : " + (new DecimalFormat().format(Double.valueOf(bigD.toString()))));
   System.out.println("Extenso : " + saida.toString());
   
   System.exit(0);
   }
}

Substitui o seu main por esse aqui!

F

sergiogameiro…Você acertou de cheio!

Valeu pela força de todos, me ajudaram bastante a resolver o problema.

Abraços a todos e obrigado.

[]`s
Fábio Heleno

Criado 24 de junho de 2004
Ultima resposta 25 de jun. de 2004
Respostas 12
Participantes 6