O que há de errado com minha operação de soma?

1 resposta
F

Gostaria de saber que erro é essa que está dando na operação de soma da minha calculadora? Espero não estar sendo impertinente!

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;



public class CalculadoraMPOO extends JFrame {
	JButton mc, mr, ms, mmais, mmenos;
	JButton apaga, ce, c, sinal, raiz;
	JButton jb1, jb2, jb3, jb4, jb5, jb6, jb7, jb8, jb9, jb0, jb00;
	JButton soma, multiplicacao, divisao, subtracao, igualdade;
	JButton ln, porcentagem, virgula;
	
	JTextField tfTela1, tfTela2;
	
	Font fonte;
	
	char operacao;
	
	String ant;
	
	double num1, num2, resultado;
	
	public CalculadoraMPOO() {
		super("Calculadora");
		
		Container c1 = getContentPane();
		
		GridBagLayout gbLayout = new GridBagLayout();
		GridBagConstraints gbc = new GridBagConstraints();
		
		Color bgCalc = new Color(199, 210, 249);
		Color botao = new Color(233, 235, 255);
				
		c1.setLayout(gbLayout);
		c1.setBackground(bgCalc);
		
		fonte = new Font("Courrier",Font.BOLD, 25);		
				
		tfTela1 = new JTextField();
		tfTela2 = new JTextField();
		tfTela2.setFont(fonte);
		tfTela1.setBorder(null);
		tfTela2.setBorder(null);
		tfTela1.setHorizontalAlignment(tfTela1.RIGHT);
		tfTela2.setHorizontalAlignment(tfTela2.RIGHT);		
		tfTela1.setEditable(false);
		tfTela2.setEditable(false);
		tfTela1.setBackground(Color.WHITE);
		tfTela2.setBackground(Color.WHITE);
		
		mc = new JButton("MC");
		mr = new JButton("MR");
		ms = new JButton("MS");
		mmais = new JButton("M+");
		mmenos = new JButton("M-");
		
		apaga = new JButton("←");
		ce = new JButton("CE");
		c = new JButton("C");
		sinal = new JButton("±");
		raiz = new JButton("√");
		
		
		jb0 = new JButton("0");
		jb1 = new JButton("1");
		jb2 = new JButton("2");
		jb3 = new JButton("3");
		jb4 = new JButton("4");
		jb5 = new JButton("5");
		jb6 = new JButton("6");
		jb7 = new JButton("7");
		jb8 = new JButton("8");
		jb9 = new JButton("9");

		soma = new JButton("+");
		multiplicacao = new JButton("*");
		divisao = new JButton("/");
		subtracao = new JButton("-");
		igualdade = new JButton("=");
		igualdade.setFont(fonte);		
	
		ln = new JButton("1/x");
		porcentagem = new JButton("%");
		virgula = new JButton(",");
		
		jb0.setBackground(botao);
		jb1.setBackground(botao);
		jb2.setBackground(botao);
		jb3.setBackground(botao);
		jb4.setBackground(botao);
		jb5.setBackground(botao);
		jb6.setBackground(botao);
		jb7.setBackground(botao);
		jb8.setBackground(botao);
		jb9.setBackground(botao);
		virgula.setBackground(botao);
		
		gbc.fill = GridBagConstraints.BOTH;
		gbc.weightx = GridBagConstraints.BOTH;
		gbc.weighty = GridBagConstraints.BOTH;
			
		//2ª Linha
		gbc.insets = new Insets(5, 5, 5, 5);
			
		gbc.gridx = 0;
		gbc.gridy = 4;
		c1.add(mc, gbc);
		mc.addActionListener(new EventoBotao());
		
		gbc.gridx = 1;
		gbc.gridy = 4;
		c1.add(mr, gbc);
		mr.addActionListener(new EventoBotao());
		
		gbc.gridx = 2;
		gbc.gridy = 4;
		c1.add(ms, gbc);
		ms.addActionListener(new EventoBotao());
		
		gbc.gridx = 3;
		gbc.gridy = 4;
		c1.add(mmais, gbc);
		mmais.addActionListener(new EventoBotao());
		
		gbc.gridx = 4;
		gbc.gridy = 4;
		c1.add(mmenos, gbc);
		mmenos.addActionListener(new EventoBotao());
	 
		//3ª Linha
		gbc.gridx = 0;
		gbc.gridy = 5;
		c1.add(apaga, gbc);
		apaga.addActionListener(new EventoBotao());
		
		gbc.gridx = 1;
		gbc.gridy = 5;
		c1.add(ce, gbc);
		ce.addActionListener(new EventoBotao());
		
		gbc.gridx = 2;
		gbc.gridy = 5;
		c1.add(c, gbc);
		c.addActionListener(new EventoBotao());
		
		gbc.gridx = 3;
		gbc.gridy = 5;
		c1.add(sinal, gbc);
		sinal.addActionListener(new EventoBotao());
		
		gbc.gridx = 4;
		gbc.gridy = 5;
		c1.add(raiz, gbc);
		raiz.addActionListener(new EventoBotao());
		
		//4ª Linha
		gbc.gridx = 0;
		gbc.gridy = 6;
		c1.add(jb7, gbc);
		jb7.addActionListener(new EventoBotao());
		
		gbc.gridx = 1;
		gbc.gridy = 6;
		c1.add(jb8, gbc);
		jb8.addActionListener(new EventoBotao());
		
		gbc.gridx = 2;
		gbc.gridy = 6;
		c1.add(jb9, gbc);
		jb9.addActionListener(new EventoBotao());
		
		gbc.gridx = 3;
		gbc.gridy = 6;
		c1.add(divisao, gbc);
		divisao.addActionListener(new EventoBotao());
		
		gbc.gridx = 4;
		gbc.gridy = 6;
		c1.add(porcentagem, gbc);
		porcentagem.addActionListener(new EventoBotao());
		
		//5ª Linha
		gbc.gridx = 0;
		gbc.gridy = 7;
		c1.add(jb4, gbc);
		jb4.addActionListener(new EventoBotao());
		
		gbc.gridx = 1;
		gbc.gridy = 7;
		c1.add(jb5, gbc);
		jb5.addActionListener(new EventoBotao());
		
		gbc.gridx = 2;
		gbc.gridy = 7;
		c1.add(jb6, gbc);
		jb6.addActionListener(new EventoBotao());
		
		gbc.gridx = 3;
		gbc.gridy = 7;
		c1.add(multiplicacao, gbc);
		multiplicacao.addActionListener(new EventoBotao());
		
		gbc.gridx = 4;
		gbc.gridy = 7;
		c1.add(ln, gbc);
		ln.addActionListener(new EventoBotao());
		
		//6ª Linha
		gbc.gridx = 0;
		gbc.gridy = 8;
		c1.add(jb1, gbc);
		jb1.addActionListener(new EventoBotao());
		
		gbc.gridx = 1;
		gbc.gridy= 8;
		c1.add(jb2, gbc);
		jb2.addActionListener(new EventoBotao());
		
		gbc.gridx = 2;
		gbc.gridy = 8;
		c1.add(jb3, gbc);
		jb3.addActionListener(new EventoBotao());
		
		gbc.gridx = 3;
		gbc.gridy = 8;
		c1.add(subtracao, gbc);
		subtracao.addActionListener(new EventoBotao());
	
		//7ª Linha
		gbc.gridx = 0;
		gbc.gridy = 9;
		gbc.gridwidth = 2;
		c1.add(jb0, gbc);
		jb0.addActionListener(new EventoBotao());
		
		gbc.gridx = 2;
		gbc.gridy = 9;
		gbc.gridwidth = 1;
		c1.add(virgula, gbc);
		virgula.addActionListener(new EventoBotao());
		
		gbc.gridx = 3;
		gbc.gridy = 9;
		c1.add(soma, gbc);
		soma.addActionListener(new EventoBotao());
		
		gbc.gridx = 4;
		gbc.gridy = 8;
		gbc.gridheight = 2;
		c1.add(igualdade, gbc);
		igualdade.addActionListener(new EventoBotao());
		
		//1ª Linha
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		gbc.insets=new Insets(-2,5,-2,5);
		
		gbc.gridx = 0;
		gbc.gridy = 0;
		c1.add(tfTela1, gbc);
		
		gbc.gridx = 0;
		gbc.gridy = 2;
		c1.add(tfTela2, gbc);

		
		this.setSize(350, 450);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		
	}
	
	public class EventoBotao implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			if(e.getSource() == jb0){
				clickBotao("0");
			}else if(e.getSource() == jb1){
				clickBotao("1");
				
			}else if(e.getSource() == jb2){
				clickBotao("2");
				
			}else if(e.getSource() == jb3){
				clickBotao("3");
				
			}else if(e.getSource() == jb4){
				clickBotao("4");
				
			}else if(e.getSource() == jb5){
				clickBotao("5");
				
			}else if(e.getSource() == jb6){
				clickBotao("6");
				
			}else if(e.getSource() == jb7){
				clickBotao("7");
				
			}else if(e.getSource() == jb8){
				clickBotao("8");
				
			}else if(e.getSource() == jb9){
				clickBotao("9");
				
			}else if(e.getSource() == virgula){
				clickBotao(",");
			
			}else if (e.getSource() == soma){
				clickOperacao('+');
				
			}else if (e.getSource() == subtracao){
				clickOperacao('-');
				
			}else if (e.getSource() == divisao){
				clickOperacao('/');
				
			}else if (e.getSource() == multiplicacao){
				clickOperacao('*');
						
			}else if (e.getSource() == igualdade){
				num2 = Double.parseDouble(tfTela2.getText());
				
				switch (operacao) {
					case '+':
						resultado = num1 + num2;
						break;
					}
				tfTela2.setText(String.valueOf(resultado));				
					
			}

	}

	public void clickOperacao(char op) {
		operacao = op;
		num1 = Double.parseDouble(tfTela1.getText());
		
		tfTela2.setText("");
	}

	public void clickBotao(String n) {
		ant = tfTela2.getText();
		ant = ant + n;	
		tfTela2.setText(ant);
		
	}
}
	
	public static void main(String[] args) {
		new CalculadoraMPOO();
	}
	
}

1 Resposta

WillianDias

Olá, Filipe DeMolay!

você colocou tfTela1.getText() no método clickOperacao:

public void clickOperacao(char op) {  
        operacao = op;  
        num1 = Double.parseDouble(tfTela1.getText());  
          
        tfTela2.setText("");  
}

quando deveria ter colocado tfTela1.getText(), ficando assim:

public void clickOperacao(char op) {  
        operacao = op;  
        num1 = Double.parseDouble(tfTela2.getText());  
          
        tfTela2.setText("");  
}

Já no switch, você esqueceu de terminar, depois de pronto, ficará assim:

switch (operacao) {  
    case '+':  
        resultado = num1 + num2;  
        break;
                     
    case '-':
        resultado = num1 - num2;
        break;

    case '/':
        resultado = num1 / num2;
        break;
      
    case '*':
        resultado = num1 * num2;
        break;
}

Também observei que, quando clica no botão vírgula, você setou, na sua TextField, uma "," ,porém, em inglês, nos números, é usado . no lugar de ,
então para não dar erro quando você fazer uma operação com número de ponto flutuante, deve colocar assim:

else if (e.getSource() == soma){  
       clickBotao(".");
}

Espero que agora dê certo, cara. Se não der, me avise.

Criado 31 de março de 2013
Ultima resposta 31 de mar. de 2013
Respostas 1
Participantes 2