Expressões Lógicas 2 (help)

3 respostas
R

Eu consegui fazer esse código:

import javax.swing.*;

public class LogicalExpression {

	/**
	 * @param args
	 */

	public static void main(String[] args) {

		// Declaração de Variáveis

		final String TITULO = "THE ANALIZATOR - 1.0";

		String texto;

		String saida;

		String expressao = "";

		String variavelP, variavelQ;

		int valorP, valorQ, i;

		int expressaoFinal;

		char n = '~';

		char e = '.';

		char o = '+';

		char x = 'x';

		char p = 'p';

		char q = 'q';

		String regras;

		regras = "OBSERVAÇÕES PARA A UTILIZAÇÃO DO PROGRAMA :"
				+ "\n\n - As variáveis são somente P e Q assumindo valores 1 ou 0"
				+ "\n\n OPERADORES A UTILIZAR :"
				+ "\n\n - ' ~ ' para operação de negação"
				+ "\n - ' . ' para operação e" + "\n - ' + ' para operação ou"
				+ "\n - ' x ' para operação xor";

		// Processamento

		JOptionPane.showMessageDialog(null, regras, TITULO,
				JOptionPane.INFORMATION_MESSAGE);

		do {

			do {

				variavelP = JOptionPane.showInputDialog(null,
						"Defina um valor para P :", TITULO,
						JOptionPane.QUESTION_MESSAGE);

				if (variavelP.equalsIgnoreCase(""))

					JOptionPane.showMessageDialog(null,
							"VALOR INVÁLIDO!!! \n\n Digite novamente :",
							TITULO, JOptionPane.ERROR_MESSAGE);

			} while (variavelP.equalsIgnoreCase(""));

			valorP = Integer.parseInt(variavelP);

			if ((valorP != 0 && valorP != 1))

				JOptionPane.showMessageDialog(null,
						"VALOR INVÁLIDO!!! \n\n Digite novamente :", TITULO,
						JOptionPane.ERROR_MESSAGE);

		} while (valorP != 0 && valorP != 1);

		do {

			do {

				variavelQ = JOptionPane.showInputDialog(null,
						"Defina um valor para Q :", TITULO,
						JOptionPane.QUESTION_MESSAGE);

				if (variavelQ.equalsIgnoreCase(""))

					JOptionPane.showMessageDialog(null,
							"VALOR INVÁLIDO!!! \n\n Digite novamente :",
							TITULO, JOptionPane.ERROR_MESSAGE);

			} while (variavelQ.equalsIgnoreCase(""));

			valorQ = Integer.parseInt(variavelQ);

			if (valorQ != 0 && valorQ != 1)

				JOptionPane.showMessageDialog(null,
						"VALOR INVÁLIDO!!! \n\n Digite novamente :", TITULO,
						JOptionPane.ERROR_MESSAGE);

		} while (valorQ != 0 && valorQ != 1);

		do {

			do {

				texto = JOptionPane.showInputDialog(null,
						"Digite uma expressão lógica válida :", TITULO,
						JOptionPane.QUESTION_MESSAGE);

				if (texto.equalsIgnoreCase(""))

					JOptionPane.showMessageDialog(null,
							"VALOR INVÁLIDO!!! \n\n Digite novamente :",
							TITULO, JOptionPane.ERROR_MESSAGE);

			} while (texto.equalsIgnoreCase(""));

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

				if ((texto.charAt(0) != n) && (texto.charAt(0) != p)
						&& (texto.charAt(0) != q))

					JOptionPane.showMessageDialog(null,
							"Expressão Inválida. Digite Novamente!", TITULO,
							JOptionPane.INFORMATION_MESSAGE);

			}

		} while (((texto.charAt(0) != n) && (texto.charAt(0) != p) && (texto
				.charAt(0) != q)));

		for (i = 0; i < texto.length(); i++)

			if (texto.charAt(i) == n)

				expressao = expressao + "!";

			else if (texto.charAt(i) == e)

				expressao = expressao + "&&";

			else if (texto.charAt(i) == o)

				expressao = expressao + "||";

			else if (texto.charAt(i) == x)

				expressao = expressao + "^";

			else if (texto.charAt(i) == p)

				expressao = expressao + valorP;

			else
				expressao = expressao + valorQ;

		JOptionPane.showMessageDialog(null, expressao, TITULO,
				JOptionPane.INFORMATION_MESSAGE);

                               // acho que é a partir daqui que esta errado

		expressaoFinal = Integer.parseInt(expressao);

		saida = "Resultado = " + expressaoFinal;

		JOptionPane.showMessageDialog(null, saida, TITULO,
				JOptionPane.INFORMATION_MESSAGE);

		System.exit(0);

	}
}

só que ele me dá um erro no final… number format exception…

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Reifel[/color][/size] :joia:

me ajudem por favor

3 Respostas

C

Isso acontece quanto tu tenta passar algo pra um tipo numerico e esse algo nao e um tipo valido!

I

Acho que o problema está aqui.
Para o parseInt funcionar, a expressao só pode ter números inteiros.

expressao = expressao + !;

expressao = expressao + ||;

expressao = expressao + &&;

expressao = expressao + ^;

Não estás tentando transformar esses caracteres em números inteiros?

J
Muda:

expressaoFinal = Integer.parseInt(expressao);

saida = "Resultado = " + expressaoFinal;

Para:
saida = "Resultado = " + expressao;

Criado 2 de julho de 2006
Ultima resposta 4 de jul. de 2006
Respostas 3
Participantes 4