Buenas
Estoy con un proyecto de la materia compiladores, lo cual el objetivo es hacer una una pequeña calculadora, antecesora de las hojas electrónicas en el lenguaje java. Si alguien tiene algo que me pueda ayudar se lo agradecería o un boceto del frame de como lo puedo hacer....
Compiladores
Moderador: Moderadores
- GonzaloVazquez
- Junior
- Mensajes: 10
- Registrado: Lun Dic 09, 2024 6:10 pm
- Contactar:
Re: Compiladores
¡Hola! 
Es genial que estés trabajando en un proyecto de compiladores. Aquí te dejo una idea básica para implementar una calculadora en Java. Puedes usar Swing para diseñar el marco (frame) y los botones, que es bastante intuitivo y fácil para proyectos iniciales.
Boceto del frame:
Tu interfaz podría incluir:
Una barra de entrada de texto para escribir los números o expresiones.
Botones para los números (0-9) y operadores (+, -, *, /).
Un botón "C" para limpiar la entrada y "=" para calcular el resultado.
Código inicial para la interfaz gráfica:
Aquí tienes un ejemplo básico de cómo construir el frame con Swing:
Siguientes pasos:
Extender funcionalidades: Puedes añadir más operadores como potencia (^) o raíz cuadrada.
Manejo de errores: Asegúrate de manejar errores como divisiones por cero o entradas no válidas.
Optimizaciones: Considera usar una pila para manejar expresiones más complejas (como las hojas electrónicas).
¡Espero que esto te sirva como punto de partida!
Si necesitas más ayuda, no dudes en preguntar. 
Es genial que estés trabajando en un proyecto de compiladores. Aquí te dejo una idea básica para implementar una calculadora en Java. Puedes usar Swing para diseñar el marco (frame) y los botones, que es bastante intuitivo y fácil para proyectos iniciales.
Boceto del frame:
Tu interfaz podría incluir:
Una barra de entrada de texto para escribir los números o expresiones.
Botones para los números (0-9) y operadores (+, -, *, /).
Un botón "C" para limpiar la entrada y "=" para calcular el resultado.
Código inicial para la interfaz gráfica:
Aquí tienes un ejemplo básico de cómo construir el frame con Swing:
Código: Seleccionar todo
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculadora extends JFrame implements ActionListener {
private JTextField textField;
private JPanel panel;
private String operator = "";
private double num1 = 0, num2 = 0;
public Calculadora() {
// Configuración de la ventana
setTitle("Calculadora");
setSize(300, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
// Campo de texto para mostrar la entrada y resultados
textField = new JTextField();
textField.setHorizontalAlignment(JTextField.RIGHT);
textField.setEditable(false);
add(textField, BorderLayout.NORTH);
// Panel para los botones
panel = new JPanel();
panel.setLayout(new GridLayout(4, 4));
// Botones de la calculadora
String[] botones = {
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"C", "0", "=", "+"
};
for (String b : botones) {
JButton boton = new JButton(b);
boton.addActionListener(this);
panel.add(boton);
}
add(panel, BorderLayout.CENTER);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String comando = e.getActionCommand();
// Acciones según el botón presionado
if (comando.matches("\\d")) { // Si es un número
textField.setText(textField.getText() + comando);
} else if (comando.equals("C")) { // Limpiar
textField.setText("");
num1 = num2 = 0;
operator = "";
} else if (comando.equals("=")) { // Calcular resultado
num2 = Double.parseDouble(textField.getText());
switch (operator) {
case "+": textField.setText(String.valueOf(num1 + num2)); break;
case "-": textField.setText(String.valueOf(num1 - num2)); break;
case "*": textField.setText(String.valueOf(num1 * num2)); break;
case "/":
if (num2 != 0)
textField.setText(String.valueOf(num1 / num2));
else
textField.setText("Error");
break;
}
} else { // Guardar operador y primer número
num1 = Double.parseDouble(textField.getText());
operator = comando;
textField.setText("");
}
}
public static void main(String[] args) {
new Calculadora();
}
}
Extender funcionalidades: Puedes añadir más operadores como potencia (^) o raíz cuadrada.
Manejo de errores: Asegúrate de manejar errores como divisiones por cero o entradas no válidas.
Optimizaciones: Considera usar una pila para manejar expresiones más complejas (como las hojas electrónicas).
¡Espero que esto te sirva como punto de partida!