Diferenciar número real e inteiro. [RESOLVIDO]

8 respostas
H

Bom dia pessoal, estou com a seguinte dúvida: Preciso diferenciar um número inteiro e real, estou a usar vírgula para isso. Segue o que eu tenho feito:

if (Character.isDigit(AtualCaracter)) { // Vai verificar se o caracter digitado é um número ou nao

                int contador = Posicao;
                Token = "";

                do { // Faça enquanto ele for número
                    AtualCaracter = EntradaCodigoFonte.charAt(contador);
                    Token = Token + AtualCaracter;
                    contador++; //Vai encrementando.

                } while (contador < EntradaCodigoFonte.length() && (Character.isDigit(EntradaCodigoFonte.charAt(contador))));

                // Vai voltar a posicao que foi dada a mais.
                Posicao = contador - 1;
                SaidaCodigoFonte = SaidaCodigoFonte + "Linha" + Linha + "- 26 Inteiro: " + Token + "\n";
                TextoAreaSaida.setText(SaidaCodigoFonte);

            } else {

                char seguinte = EntradaCodigoFonte.charAt(Posicao + 1);

                if (seguinte == ',') {

                    SaidaCodigoFonte = SaidaCodigoFonte + "Linha" + Linha + "- 4 Real: " + Token + "\n";
                    TextoAreaSaida.setText(SaidaCodigoFonte);

                }

            }

Quando digito 18,5 o resultado é:

Linha1- 26 Inteiro: 18
Linha1- 34 Operador : “,”
Linha1- 26 Inteiro: 5

Até aí está certo, mas precisava que no fim ele dissesse que é um número real, daí pensei em criar uma variável com o nome “seguinte” e colocar a vírgula na posição +1, encontrando a vírgula e em seguida outro número daria o que eu quero, foi o que eu pensei, mas não está a dar certo.

Alguém ajuda.

Valeu. Abraços.

8 Respostas

E
  1. Você já viu como se faz análise léxica com máquinas de estados?
    Desenhando uma máquina de estados você consegue resolver seu problema de maneira muito simples.
  2. Todo número inteiro é real :slight_smile:
drsmachado

O que diferencia um número inteiro de um real? Assim que responder esta pergunta consegue resolver o problema.

H

Tenho o autômato com os estados já no papel, agora estou a fazer funcionar no programa de análise léxica, e só falta esse detalhe.

H

Sei que todo número inteiro é real, mas número reais não são inteiros, acho que o separador decimal é que diferencia isso, foi isso que pensei e o que fiz, mas não está a dar certo.

E

Como você já tem o autómato, o que deve estar lhe dando problemas pode ser uma de duas coisas:

a) É um pouco chato você voltar um caracter para trás (a menos que você use um PushbackReader ( <a href="http://docs.oracle.com/javase/6/docs/api/java/io/PushbackReader.html">http://docs.oracle.com/javase/6/docs/api/java/io/PushbackReader.html</a> ), que tem o “unread” que é semelhante ao “ungetchar” usado naqueles livros que ensinam a fazer análise léxica, mas em C;

b) De fato, pela definição da linguagem Java, uma constante de ponto flutuante (o que você chama de “número real”), simplificadamente, é algo que está em notação científica (ou seja, tem uma letra E no meio) e/ou então tem um ponto e/ou termina com a letra F (para simbolizar “float”).

Por exemplo, 1E12, 1.2E12, 1.2 são constantes de ponto flutuante.

c) Seu autómato está realmente completo (ou seja, leva em conta os números em notação científica?)
H

Boa tarde, o programa é um analisador léxico, já tenho a gramática feita e já esta a funcionar tudo certo, excepto essa parte de no final dizer que é real. Queria saber o que posso fazer nesse meu código para arrumar esse problema.

Obrigado.

K
if(numero == Math.floor(numero)){
System.out.println(num + " é inteiro");

}else{
System.out.println(num + "é real");
}
H

Obrigado pela dica Kazdum.

Att.

Criado 22 de abril de 2013
Ultima resposta 2 de mai. de 2013
Respostas 8
Participantes 4