Diferenciar número real e inteiro. [RESOLVIDO]

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.

  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:

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

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.

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.

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 ( http://docs.oracle.com/javase/6/docs/api/java/io/PushbackReader.html ), 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?)

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.

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

}else{
System.out.println(num + “é real”);
}
[/code]

Obrigado pela dica Kazdum.

Att.