Imprimir dados de uma pilha[Resolvido]

2 respostas
J

Boa noite, sou iniciante em java e estou tentando fazer uma Calculadora Polonesa reversa simples com uma pilha.

Estou em dúvida na impressão do resultado, (nas linhas 132-137, 198-201 e 233-236), pois preciso imprimi-lo com o JOptionPane e não com o System.out.println.

Desde já agradeço.

import java.util.Scanner;

import javax.swing.*;

public class Calculadora {

	static int nmr1, nmr2, nmr3, nmr4;
	static String op1, op2, op3;
	static int res1, res2, res3;

	public static class Pilha {

		private String[] Pilha;
		private int topo;
		private final int maximo = 7;

		public Pilha() {
			Pilha = new String[maximo];
			topo = 0;
		}

		public void empilhar(String x) {
			if (topo < maximo) {
				Pilha[topo] = x;
				topo++;
			}
		}

		public void desempilhar() {
			if (topo > 0)
				topo--;
		}

		public boolean pilhaVazia() {
			return topo == 0;
		}

		public String topoPilha() {
			if (topo > 0) {
				return Pilha[topo - 1];
			}
			return null;
		}

	}

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		Pilha x = new Pilha();
		try {
			nmr1 = Integer.parseInt(JOptionPane.showInputDialog(null,
					"Digite o primeiro número da expressão"));
		} catch (NumberFormatException erro) {
			JOptionPane.showMessageDialog(null,
					"Erro, digite um valor inteiro!!!",
					"Entrada de dados inválida!", JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}
		try {
			nmr2 = Integer.parseInt(JOptionPane.showInputDialog(null,
					"Digite o segundo número da expressão"));

		} catch (NumberFormatException erro) {
			JOptionPane.showMessageDialog(null,
					"Erro, digite um valor inteiro!!!",
					"Entrada de dados inválida!", JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}
		op1 = JOptionPane.showInputDialog(null,
				"Digite o primeiro operador da expressão");
		if (op1.equals("+") || op1.equals("-") || op1.equals("*")
				|| op1.equals("/")) {
		} else {
			JOptionPane.showMessageDialog(null,
					"Erro, digite um operador válido!!!",
					"Entrada de dados inválida!", JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}
		try {
			nmr3 = Integer.parseInt(JOptionPane.showInputDialog(null,
					"Digite o terceiro número da expressão"));
		} catch (NumberFormatException erro) {
			JOptionPane.showMessageDialog(null,
					"Erro, digite um valor inteiro!!!",
					"Entrada de dados inválida!", JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}
		try {
			nmr4 = Integer.parseInt(JOptionPane.showInputDialog(null,
					"Digite o quarto número da expressão"));

		} catch (NumberFormatException erro) {
			JOptionPane.showMessageDialog(null,
					"Erro, digite um valor inteiro!!!",
					"Entrada de dados inválida!", JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}
		op2 = JOptionPane.showInputDialog(null,
				"Digite o segundo operador da expressão");
		if (op2.equals("+") || op2.equals("-") || op2.equals("*")
				|| op2.equals("/")) {
		} else {
			JOptionPane.showMessageDialog(null,
					"Erro, digite um operador válido!!!",
					"Entrada de dados inválida!", JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}
		op3 = JOptionPane.showInputDialog(null,
				"Digite o terceiro operador da expressão");
		if (op3.equals("+") || op3.equals("-") || op3.equals("*")
				|| op3.equals("/")) {
		} else {
			JOptionPane.showMessageDialog(null,
					"Erro, digite um operador válido!!!",
					"Entrada de dados inválida!", JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}

		String nmr1s = String.valueOf(nmr1);
		String nmr2s = String.valueOf(nmr2);
		String nmr3s = String.valueOf(nmr3);
		String nmr4s = String.valueOf(nmr4);
		x.empilhar(op3);
		x.empilhar(op2);
		x.empilhar(nmr4s);
		x.empilhar(nmr3s);
		x.empilhar(op1);
		x.empilhar(nmr2s);
		x.empilhar(nmr1s);

		System.out.print("A expressão digitada foi: ");
		while (!x.pilhaVazia()) {
			System.out.print(x.topoPilha() + "");
			x.desempilhar();

		}

		x.empilhar(op3);

		if (op2.equals("+")) {
			res2 = nmr3 + nmr4;
			String res2s = String.valueOf(res2);
			x.empilhar(res2s);
		}

		if (op2.equals("-")) {
			res2 = nmr3 - nmr4;
			String res2s = String.valueOf(res2);
			x.empilhar(res2s);
		}

		if (op2.equals("*")) {
			res2 = nmr3 * nmr4;
			String res2s = String.valueOf(res2);
			x.empilhar(res2s);
		}

		if (op2.equals("/")) {
			if (nmr4 == 0) {
				String res2s = "ERRO, IMPOSSIVEL DIVIDIR POR ZERO!";
				x.empilhar(res2s);
			} else {
				res2 = nmr3 / nmr4;
				String res2s = String.valueOf(res2);
				x.empilhar(res2s);
			}
		}

		if (op1.equals("+")) {
			res1 = nmr1 + nmr2;
			String res1s = String.valueOf(res1);
			x.empilhar(res1s);
		}

		if (op1.equals("-")) {
			res1 = nmr1 - nmr2;
			String res1s = String.valueOf(res1);
			x.empilhar(res1s);
		}

		if (op1.equals("*")) {
			res1 = nmr1 * nmr2;
			String res1s = String.valueOf(res1);
			x.empilhar(res1s);
		}

		if (op1.equals("/")) {
			if (nmr2 == 0) {
				String res1s = "ERRO, IMPOSSIVEL DIVIDIR POR ZERO!";
				x.empilhar(res1s);
			} else {
				res1 = nmr1 / nmr2;
				String res1s = String.valueOf(res1);
				x.empilhar(res1s);
			}
		}
		System.out.print("\nO resultado da primeira expressão é: ");
		while (!x.pilhaVazia()) {
			System.out.print(x.topoPilha() + "");
			x.desempilhar();

		}

		if (op3.equals("+")) {
			res3 = res1 + res2;
			String res3s = String.valueOf(res3);
			x.empilhar(res3s);
		}

		if (op3.equals("-")) {
			res3 = res1 - res2;
			String res3s = String.valueOf(res3);
			x.empilhar(res3s);
		}

		if (op3.equals("*")) {
			res3 = res1 * res2;
			String res3s = String.valueOf(res3);
			x.empilhar(res3s);
		}

		if (op3.equals("/")) {
			if (res2 == 0) {
				String res3s = "ERRO, IMPOSSIVEL DIVIDIR POR ZERO!";
				x.empilhar(res3s);
			} else {
				res3 = res1 / res2;
				String res3s = String.valueOf(res3);
				x.empilhar(res3s);
			}
		}
		System.out.print("\nO resultado final é: ");
		while (!x.pilhaVazia()) {
			System.out.print(x.topoPilha() + "");
			x.desempilhar();

		}
	}

}

2 Respostas

ViniGodoy
Exemplo adaptando as linhas 132-137:
StringWriter sw = new StringWriter();
PrintWriter out = new PrintWriter(sw);

out.print("A expressão digitada foi: <br>");  
while (!x.pilhaVazia()) {  
     out.print(x.topoPilha() + "<br>");  
     x.desempilhar();  
}  

JOptionPane.showMessageDialog(null, sw.toString());
J

Valeu! Deu certinho…

Criado 18 de outubro de 2014
Ultima resposta 18 de out. de 2014
Respostas 2
Participantes 2