[RESOLVIDO] Estou tendo problemas em fazer uma calculadora em java

bom dia galera, estou fazendo meu primeiro projeto maior no java, que no caso é uma calculadora porem estou com problemas, pois ela não soma números maiores que 10, e quando eu tento somar aparece o seguinte erro:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "+"

alguém poderia me ajudar, vou colocar o codigo que escrevi dela a baixo caso ajude (desculpa pelo codigo cheio de gambiarra, foi o que eu consegui fazer kkkkkkkkk).

     package br.com.gabriel.Calculadora.Classes;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class CalcSimples extends JFrame implements ActionListener {
	public static void main(String[] args) {
		JFrame image = new JFrame();
		JTextField tela;
		JButton botao0, botao1, botao2, botao3, botao4, botao5, botao6, botao7, botao8, botao9, botaoigual, botaovir,
				botaomais, botaomenos, botaovezes, botaodiv, botaoapa;
		image.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		image.setSize(325, 350);
		image.setVisible(true);
		image.setTitle("calculadora");
		image.setLocationRelativeTo(null);

		tela = new JTextField();
		tela.setBounds(5, 5, 300, 80);
		;
		image.add(tela);

		botao0 = new JButton("0");
		botao0.setBounds(5, 270, 70, 40);
		image.add(botao0);
		botao0.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("0")) {
					tela.setText(tela.getText() + 0);
				}
			}
		});

		botaovir = new JButton(".");
		botaovir.setBounds(80, 270, 70, 40);
		image.add(botaovir);
		botaovir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals(".")) {
					tela.setText(tela.getText() + ".");
				}
			}
		});

		botaomais = new JButton("+");
		botaomais.setBounds(230, 270, 70, 40);
		image.add(botaomais);
		botaomais.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("+")) {
					tela.setText(tela.getText() + "+");
				}
			}
		});

		botao1 = new JButton("1");
		botao1.setBounds(5, 225, 70, 40);
		image.add(botao1);
		botao1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("1")) {
					tela.setText(tela.getText() + 1);
				}
			}
		});

		botao2 = new JButton("2");
		botao2.setBounds(80, 225, 70, 40);
		image.add(botao2);
		botao2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("2")) {
					tela.setText(tela.getText() + 2);
				}
			}
		});

		botao3 = new JButton("3");
		botao3.setBounds(155, 225, 70, 40);
		image.add(botao3);
		botao3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("3")) {
					tela.setText(tela.getText() + 3);
				}
			}
		});

		botaomenos = new JButton("-");
		botaomenos.setBounds(230, 225, 70, 40);
		image.add(botaomenos);
		botaomenos.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("-")) {
					tela.setText(tela.getText() + "-");
				}
			}
		});

		botao4 = new JButton("4");
		botao4.setBounds(5, 180, 70, 40);
		image.add(botao4);
		botao4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("4")) {
					tela.setText(tela.getText() + 4);
				}
			}
		});

		botao5 = new JButton("5");
		botao5.setBounds(80, 180, 70, 40);
		image.add(botao5);
		botao5.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("5")) {
					tela.setText(tela.getText() + 5);
				}
			}
		});

		botao6 = new JButton("6");
		botao6.setBounds(155, 180, 70, 40);
		image.add(botao6);
		botao6.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("6")) {
					tela.setText(tela.getText() + 6);
				}
			}
		});

		botaovezes = new JButton("X");
		botaovezes.setBounds(230, 180, 70, 40);
		image.add(botaovezes);
		botaovezes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("X")) {
					tela.setText(tela.getText() + "X");
				}
			}
		});

		botao7 = new JButton("7");
		botao7.setBounds(5, 135, 70, 40);
		image.add(botao7);
		botao7.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("7")) {
					tela.setText(tela.getText() + 7);
				}
			}
		});

		botao8 = new JButton("8");
		botao8.setBounds(80, 135, 70, 40);
		image.add(botao8);
		botao8.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("8")) {
					tela.setText(tela.getText() + 8);
				}
			}
		});

		botao9 = new JButton("9");
		botao9.setBounds(155, 135, 70, 40);
		image.add(botao9);
		botao9.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("9")) {
					tela.setText(tela.getText() + 9);
				}
			}
		});

		botaodiv = new JButton("/");
		botaodiv.setBounds(230, 135, 70, 40);
		image.add(botaodiv);
		botaodiv.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("/")) {
					tela.setText(tela.getText() + "/");
				}
			}
		});

		botaoapa = new JButton("C");
		botaoapa.setBounds(110, 90, 80, 40);
		image.add(botaoapa);
		botaoapa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("C")) {
					tela.setText("");
				}
			}
		});

		botaoigual = new JButton("=");
		botaoigual.setBounds(155, 270, 70, 40);
		image.add(botaoigual);
		botaoigual.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String[] numeros = tela.getText().split("");
				long acumulador = 0;
				String sinal = "";

				for (int i = 0; i < numeros.length; i++) {
					if (i == 0) {
						acumulador = Long.parseLong(numeros[i]);
					} else if (i % 2 == 1) {
						sinal = numeros[i];
					} else {
						if (sinal.contentEquals("+")) {
							acumulador += Long.parseLong(numeros[i]);
						} else if (sinal.contentEquals("-")) {
							acumulador -=  Long.parseLong(numeros[i]);
						} else if (sinal.contentEquals("X")) {
							acumulador *=  Long.parseLong(numeros[i]);
						} else {
							acumulador /=  Long.parseLong(numeros[i]);

						}
					}
				}
				tela.setText(""+ acumulador);
			}
		});

	}
	

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
	}
}

Você está tentando transformar um sinal de mais em um número.

mano primeiramente valeu, e desculpa o incomodo mas como eu posso consertar isso ?, ainda sou novo no mundo da programação e não sei como posso resolver kkkkkk

Tens que rever sua lógica.
O sinal de + não é um número.
Não podes tentar covertê-lo.

Então gabriel_vd o seu problema está na sua lógica. Pelo jeito que vc fez o seu código está tentando converter um sinal em número, por exemplo, converter a string “+” em um número, não tem como.

[quote=“gabriel_vd, post:1, topic:404617, full:true”]

            String[] numeros = tela.getText().split("");
			long acumulador = 0;
			String sinal = "";

			for (int i = 0; i < numeros.length; i++) {
				if (i == 0) {
					acumulador = Long.parseLong(numeros[i]);
				} else if (i % 2 == 1) {
					sinal = numeros[i];
				} else {
					if (sinal.contentEquals("+")) {
						acumulador += Long.parseLong(numeros[i]);
					} else if (sinal.contentEquals("-")) {
						acumulador -=  Long.parseLong(numeros[i]);
					} else if (sinal.contentEquals("X")) {
						acumulador *=  Long.parseLong(numeros[i]);
					} else {
						acumulador /=  Long.parseLong(numeros[i]);

					}
				}
			}
			tela.setText(""+ acumulador);
		}

Nessa linha “String[] numeros = tela.getText().split(”");", vc quebra a string em números e em operadores, porém a String “10+2”, como exemplo, fica assim dentro do array números [“1”,“0”,"+",“2”], entendeu vc não pega o 10 aí quebra ele em “1” e “0”. Continuando, quando vc usa essa condição "else if (i % 2 == 1) " não é certo que nessa posição tenha um operador, vou mostrar:

1 + 2
no array numeros : [“1”,"+",“2”]
indice do array:         0    1   2
10+ 2
no array numeros : [“1”,“0”,"+",“2”]
indice no array:         0   1    2   3

Viu quando he apenas um número sua lógica funfa que é uma blz, só que quando vc pega um número com dois digitos não. Aí pela sua lógica esse '+' he um número e o Long.parseLong('+'); retorna esse erro ao tentar converter.

O que vc pode fazer é pegar a String do número de um ponto de partida até o primeiro primeiro operador aritmético que encontrar, desse modo vc quebra a string em números e operadores possibilitando os cálculos. E ainda tente usar Doube.parseDouble(""); Long he tipo um inteiro grandão e contas na calculadora podem retornar valores quebrados.

Espero que tenha ajudado :smiley:

1 curtida

vlw mano consigui arrumar,vc ajudou bastante.

1 curtida