Compiladores

Cuestiones y dudas acerca de lenguajes de programación diversos.

Moderador: Moderadores

Avatar de Usuario
sistemascrack1

Compiladores

Mensaje por sistemascrack1 » Mié Sep 14, 2016 12:39 am

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....

Avatar de Usuario
GonzaloVazquez
Junior
Mensajes: 10
Registrado: Lun Dic 09, 2024 6:10 pm
Contactar:

Re: Compiladores

Mensaje por GonzaloVazquez » Lun Dic 09, 2024 6:36 pm

¡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:

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();
    }
}
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. 😊

Responder