sábado, 5 de abril de 2008

Calculadora en Java

Hoy traigo un ejemplo sencillo que implementa ejemplo de herencia y composición, la idea es hacer una calculadora que opere en binario, octal, decimal y hexadecimal; ya que no es idea del ejercicio enseñar los sistemas numéricos sino mostrar un ejemplo sencillo en java, la calculadora solo operará en enteros y hará las operaciones básicas: suma, resta, multiplicación y división.


Para las transformaciones entre los sistemas usaremos los métodos de la clase Integer Integer.parseInt() para convertir de los binario, octal o hexadecimal a decimal e Integer.toBinaryString(), Integer.toOctalString() e Integer.toHexString() para convertir de cada uno de los sistemas a decimal.

Para implementar la herencia lo haremos de una clase "Sistema" hacia cada uno de los sistemas numéricos representados en el ejemplo y la composición estará implementada en nuestro modelo por una clase "Conversion" que servirá como componente para hacer conversiones entre sistemas, además de los elementos que nos servirán para componer nuestra interfaz gráfica, asi como manejadores para cada uno de los sistemas numéricos.

Entonces la clase base ne nuestro aplicativo sera la llamada "Sistema" que sera la que se encarga de sumar, restar, multiplicar y dividir en base decimal y cada clase que herede de ella determinará en que base va a trabajar.

Veamos como quena nuestra clase Sistema:

abstract public class Sistema {
protected int numeroA;
protected int numeroB;
protected int resultado;
protected char operacion;
protected int base;

public Sistema() {
this.numeroA = 0;
this.numeroB = 0;
this.resultado = 0;
this.operacion = ' ';
}

public void setNumeroA(int n){
this.numeroA = n;
}

public void setNumeroB(int n){
this.numeroB = n;
}

public void setResultado(int n){
this.resultado = n;
}

public void setOperacion(char o){
this.operacion = o;
}

public int getNumeroA(){
return this.numeroA;
}

public int getNumeroB(){
return this.numeroB;
}

public int getResultado(){
return this.resultado;
}

public char getOperacion(){
return this.operacion;
}

public void suma(){
this.resultado = this.numeroA + this.numeroB;
}
public void resta(){
this.resultado = this.numeroA - this.numeroB;
}
public void multiplicacion(){
this.resultado = this.numeroA * this.numeroB;
}
public void division(){
this.resultado = this.numeroA / this.numeroB;
}

public void establecerNumeroA(String a){
int n = Integer.parseInt(a,base);
this.setNumeroA(n);
}
public void establecerNumeroB(String b){
int n = Integer.parseInt(b,base);
this.setNumeroB(n);
}
public String retornarNumeroA(){
String cad="";
switch(base){
case 2:
cad = Integer.toBinaryString(numeroA);
break;
case 8:
cad = Integer.toOctalString(numeroA);
break;
case 10:
cad = String.valueOf(numeroA);
break;
case 16:
cad = Integer.toHexString(numeroA);
break;
}
return cad;

}
public String retornarNumeroB(){
String cad="";
switch(base){
case 2:
cad = Integer.toBinaryString(numeroB);
break;
case 8:
cad = Integer.toOctalString(numeroB);
break;
case 10:
cad = String.valueOf(numeroB);
break;
case 16:
cad = Integer.toHexString(numeroB);
break;
}
return cad;
}
public String retornarResultado(){
String cad="";
switch(base){
case 2:
cad = Integer.toBinaryString(resultado);
break;
case 8:
cad = Integer.toOctalString(resultado);
break;
case 10:
cad = String.valueOf(resultado);
break;
case 16:
cad = Integer.toHexString(resultado);
break;
}
return cad;
}

}


Ahora como queda la clase "Binario" que hereda de "Sistema"

public class Binario extends Sistema{
public Binario() {
this.base=2;
}
}


Ahora como queda la clase "Octal" que hereda de "Sistema"

public class Octal extends Sistema{
public Octal() {
this.base=8;
}
}


Ahora como queda la clase "Decimal" que hereda de "Sistema"

public class Decimal extends Sistema{
public Decimal() {
this.base=10;
}
}


Ahora como queda la clase "Hexadecimal" que hereda de "Sistema"

public class Hexadecimal extends Sistema{
public Hexadecimal() {
this.base=16;
}
}


Ahora como queda la clase "Conversion"

public class Conversion {

public Integer fromHexadecimal(String cad){
return Integer.parseInt(cad,16);
}

public Integer fromOctal(String cad){
return Integer.parseInt(cad,8);
}

public Integer fromBinario(String cad){
return Integer.parseInt(cad,2);
}

public String toHexadecimal(int i){
return Integer.toHexString(i);
}

public String toOctal(int i){
return Integer.toOctalString(i);
}

public String toBinario(int i){
return Integer.toBinaryString(i);
}

public String combertirSistema(int actual,int nuevo, String cad){
String res = "";
int num=0;
if(cad.length()>0){
switch(actual){
case 2:
num = fromBinario(cad);
break;
case 8:
num = fromOctal(cad);
break;
case 10:
num = Integer.parseInt(cad,10);
break;
case 16:
num = fromHexadecimal(cad);
break;
}
switch(nuevo){
case 2:
res = toBinario(num);
break;
case 8:
res = toOctal(num);
break;
case 10:
res = Integer.toString(num);
break;
case 16:
res = toHexadecimal(num);
break;
}
}
return res;
}

}


Y ahora como queda la clase "AppCalculadora" que sera la que pone todo junto en una interfaz gráfica que representa la calculadora

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import co.edu.udistrital.prycalculadora.logica.*;

public class AppCalculadora implements ActionListener{

private JFrame frame;
private ButtonGroup btgSistema;
private JButton[] btnBotones;
private JRadioButton[] jrbSistemas;
private JTextField txtResultado;
private Container cpane;
int s;
Sistema d;
Conversion c;

public AppCalculadora() {
initComponents();
}

private void initComponents(){
s=10;
d = new Decimal();
c = new Conversion();
frame = new JFrame("Calculadora de Cuatro Sistemas") ;
btgSistema = new ButtonGroup();
btnBotones = new JButton[24];
jrbSistemas = new JRadioButton[4] ;
txtResultado = new JTextField(0);

int cont=0;
btnBotones[cont++]=new JButton("D");
btnBotones[cont++]=new JButton("E");
btnBotones[cont++]=new JButton("F");
btnBotones[cont++]=new JButton("/");
btnBotones[cont++]=new JButton("A");
btnBotones[cont++]=new JButton("B");
btnBotones[cont++]=new JButton("C");
btnBotones[cont++]=new JButton("*");
btnBotones[cont++]=new JButton("7");
btnBotones[cont++]=new JButton("8");
btnBotones[cont++]=new JButton("9");
btnBotones[cont++]=new JButton("-");
btnBotones[cont++]=new JButton("4");
btnBotones[cont++]=new JButton("5");
btnBotones[cont++]=new JButton("6");
btnBotones[cont++]=new JButton("+");
btnBotones[cont++]=new JButton("1");
btnBotones[cont++]=new JButton("2");
btnBotones[cont++]=new JButton("3");
btnBotones[cont++]=new JButton("=");
btnBotones[cont++]=new JButton("0");
btnBotones[cont++]=new JButton("Acerca de ... ");
btnBotones[cont++]=new JButton("Cl");
btnBotones[cont++]=new JButton("CE");

cont=0;
jrbSistemas[cont++]=new JRadioButton("BIN");
jrbSistemas[cont++]=new JRadioButton("OCT");
jrbSistemas[cont++]=new JRadioButton("DEC");
jrbSistemas[cont++]=new JRadioButton("HEX");

for(int i=0;i<jrbSistemas.length;i++){
btgSistema.add(jrbSistemas[i]);
}

cpane = frame.getContentPane();
cpane.setLayout(null);

txtResultado.setBounds(10,10,260,30);
txtResultado.setEditable(false);
txtResultado.setBackground(Color.white);
txtResultado.setHorizontalAlignment(JTextField.RIGHT);
cpane.add(txtResultado);

int x=10;
int y=45;
for(int i=0;i<jrbSistemas.length;i++){
x=i*70+10;
jrbSistemas[i].setBounds(x,y,60,20);
jrbSistemas[i].addActionListener(this);
cpane.add(jrbSistemas[i]);

}
x=10;
y=35;
for(int i=0;i<btnBotones.length;i++){
if(i%4==0){
x=10;
y+=35;
}else{
x+=70;
}
if(i!=20 && i!=21){
btnBotones[i].setBounds(x,y,50,30);
}else{
if(i==20)
btnBotones[i].setBounds(x,y,120,30);
if(i==21)
btnBotones[i].setBounds(10,y+35,260,30);
}


btnBotones[i].addActionListener(this);
cpane.add(btnBotones[i]);
}

jrbSistemas[2].setSelected(true);

elegirSistema(10);

frame.pack();
frame.setSize(290,350);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

private void elegirSistema(int sistema){

for(int i=0;i<btnBotones.length;i++){
if(!btnBotones[i].getText().equals("+")&&
!btnBotones[i].getText().equals("-")&&
!btnBotones[i].getText().equals("*")&&
!btnBotones[i].getText().equals("/")&&
!btnBotones[i].getText().equals("=")){
btnBotones[i].setEnabled(false);
}
}
switch(sistema){
case 2:
for(int i=0;i<btnBotones.length;i++){
if(!btnBotones[i].getText().equals("A")&&
!btnBotones[i].getText().equals("B")&&
!btnBotones[i].getText().equals("C")&&
!btnBotones[i].getText().equals("D")&&
!btnBotones[i].getText().equals("E")&&
!btnBotones[i].getText().equals("F")&&
!btnBotones[i].getText().equals("9")&&
!btnBotones[i].getText().equals("8")&&
!btnBotones[i].getText().equals("7")&&
!btnBotones[i].getText().equals("6")&&
!btnBotones[i].getText().equals("5")&&
!btnBotones[i].getText().equals("4")&&
!btnBotones[i].getText().equals("3")&&
!btnBotones[i].getText().equals("2")){
btnBotones[i].setEnabled(true);
}
}
break;
case 8:
for(int i=0;i<btnBotones.length;i++){
if(!btnBotones[i].getText().equals("A")&&
!btnBotones[i].getText().equals("B")&&
!btnBotones[i].getText().equals("C")&&
!btnBotones[i].getText().equals("D")&&
!btnBotones[i].getText().equals("E")&&
!btnBotones[i].getText().equals("F")&&
!btnBotones[i].getText().equals("9")&&
!btnBotones[i].getText().equals("8")){
btnBotones[i].setEnabled(true);
}
}
break;
case 10:
for(int i=0;i<btnBotones.length;i++){
if(!btnBotones[i].getText().equals("A")&&
!btnBotones[i].getText().equals("B")&&
!btnBotones[i].getText().equals("C")&&
!btnBotones[i].getText().equals("D")&&
!btnBotones[i].getText().equals("E")&&
!btnBotones[i].getText().equals("F")){
btnBotones[i].setEnabled(true);
}
}
break;
case 16:
for(int i=0;i<btnBotones.length;i++){
btnBotones[i].setEnabled(true);
}
break;
}
txtResultado.setText(c.combertirSistema(s, sistema, txtResultado.getText()));
s=sistema;
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
AppCalculadora c = new AppCalculadora();
}

public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("Cl")||e.getActionCommand().equals("CE")){
txtResultado.setText("");
}
if(e.getActionCommand().equals("BIN")){
elegirSistema(2);
d = new Binario();
}
if(e.getActionCommand().equals("OCT")){
elegirSistema(8);
d = new Octal();
}
if(e.getActionCommand().equals("DEC")){
elegirSistema(10);
d = new Decimal();
}
if(e.getActionCommand().equals("HEX")){
elegirSistema(16);
d = new Hexadecimal();
}
if(!e.getActionCommand().equals("+")&&
!e.getActionCommand().equals("-")&&
!e.getActionCommand().equals("*")&&
!e.getActionCommand().equals("/")&&
!e.getActionCommand().equals("=")&&
!e.getActionCommand().equals("Acerca de ... ")&&
!e.getActionCommand().equals("Cl")&&
!e.getActionCommand().equals("CE")&&
!e.getActionCommand().equals("BIN")&&
!e.getActionCommand().equals("OCT")&&
!e.getActionCommand().equals("DEC")&&
!e.getActionCommand().equals("HEX")){
txtResultado.setText(txtResultado.getText()+e.getActionCommand());
}

if(e.getActionCommand().equals("+")||
e.getActionCommand().equals("-")||
e.getActionCommand().equals("*")||
e.getActionCommand().equals("/")){
d.setOperacion(e.getActionCommand().charAt(0));
switch(s){
case 2:
d.establecerNumeroA(txtResultado.getText());
break;
case 8:
d.setNumeroA(c.fromOctal(txtResultado.getText()));
break;
case 10:
d.setNumeroA(Integer.parseInt(txtResultado.getText()));
break;
case 16:
d.setNumeroA(c.fromHexadecimal(txtResultado.getText()));
break;
}
txtResultado.setText("");
}

if(e.getActionCommand().equals("=")){
switch(s){
case 2:
d.setNumeroB(c.fromBinario(txtResultado.getText()));
break;
case 8:
d.setNumeroB(c.fromOctal(txtResultado.getText()));
break;
case 10:
d.setNumeroB(Integer.parseInt(txtResultado.getText()));
break;
case 16:
d.setNumeroB(c.fromHexadecimal(txtResultado.getText()));
break;
}
switch(d.getOperacion()){
case '+':
d.suma();
break;
case '-':
d.resta();
break;
case '*':
d.multiplicacion();
break;
case '/':
d.division();
break;
}
switch(s){
case 2:
txtResultado.setText(c.toBinario(d.getResultado()));
break;
case 8:
txtResultado.setText(c.toOctal(d.getResultado()));
break;
case 10:
txtResultado.setText(String.valueOf(d.getResultado()));
break;
case 16:
txtResultado.setText(c.toHexadecimal(d.getResultado()));
break;
}
}
if(e.getActionCommand().equals("Acerca de ... ")){
JOptionPane.showMessageDialog(null, "Calculadora de ejemplo");
}
}


}




Espero que el ejemplo le sea de utilidad

87 comentarios:

Anónimo dijo...

MEN CREO QUE NO ENTENDI xDDD.

Anónimo dijo...

Hola, me llamo leopoldo,me es interezante tu blog yo stoy empezando en esto de java,pero me gusta.
sobre el codigo de la calcualdora una duda:
cual es el metodo que logra la interfaz entre la clase Sistema y la clase AppCalculadora, es decir cual es el metodo que hace que la calculadora haga una operacion (suma,resta.,,,,)
este es mi e-mail lym26_10@hotmail.com
Espero q me entiendas mi duda y de antemano gracias
saludos

alejo dijo...

Hola Leopoldo, en el método actionPerformed de AppCalculadora cuando detecta que el botón accionado es "=" llama a la operación que corresponde segun el operador seleccionado previamente por ejemplo si fue "+" llama a d.sumar donde d es una instancia del sistema elegido, si verificas la manera de realizar la instanciación y la relacion de herencia entre la clase Sistema y las clases Binario, Octal, Decimal y Hexadecimal veras que existe "ligadura dinámica" en este llamado.

Espero haber resuelto tu duda y gracias por consultar mi blog

Anónimo dijo...

Hola, mi nombre es luis.. por cierto felicidades, tu blog esta muy bien... Oyep, me preguntaba que si no podrias poner el codigo de la calculadora para descargar en un zip o rar, por fas te lo agradeceria mucho..

De antemano te agradesco por que te hayas tomado el tiempo para leerlo.. Saludos!!!

alejo dijo...

Luis me place mucho que consultes el blog y que este sea de utilidad, por ahora no he verificado el como subir el código al blog pero si tratare de hacerlo pronto

Anónimo dijo...

EY MAN , SI NOS HARIAS UN GRAN FAVOR SI PONES EL CODIGO LISTO PARA DESCARGARLO , BIEN SEA AKI EN EL BLOG O ALGUN HOST COMO RAPID,MU POR FAVOR , MI NOMBRE ES MANUEL xD.

Anónimo dijo...

Gracias,soy leopoldo. pues mas o menos ya tengo una idea mas clara de lo q hace. Al parecer cuando colocaste el codigo del programa se modificaron 2 simbolos en la class AppCalculadora, en los 2 primeros ciclos for,(en ves de:< es el simnolo <)
y una preguntita q hace esta linea de codigo,import co.edu.udistrital.prycalculadora.logica.*;

me markaba q no existia asi q solo la elimine y la calculadora funciono bien

gracias
saludos

alejo dijo...

Gracias Leopoldo, lo de los for ya quedo corregido lo de los import es por que las clases se crean en paquetes diferentes y en la clase AppCalculadora que esta creada dentro del paquete gui se deben importar las clases que están en el paquete logica para poder usarlas, pero si todas las clases se crean en un mismo paquete no es necesario usar las lineas de import

Nueva mente gracias por las observaciones Leopoldo

Unknown dijo...

buenos dias No se si me podrias pasar el codigo ya listo por favor porque si lo necesito para un proyecto y mi problema esta en que no puedo acceder desde AppCalculadora a Sistema y conversion porq me dice que no found tal clase y la tengo en un mismo directorio y ya modificado..

Gracias de antemano y te felicito.

Anónimo dijo...

Hola, me llamo Diana Jacquelinn, soy nueva enh esto, estudiante de tecnologia en sistemas del SENA, muy interesante tu blog, me ha sido de gran ayuda, ahora estoy intentando hacer una especie de libreta, ya hice la parte de contactos, y necesito que me ayudes para relacionar la tabla contactos con las citas...mi mail es depat_perez@hotmail.com...muchas gracias por tu ayuda

ruby dijo...

oye me podrias ayudar a elaborar un protector de pantalla en java....porfavor...

ruby dijo...

porfavor ayudame..... mi correo es:alegria_diare@hotmail.com....ruby...

alejo dijo...

Para los que me piden el codigo, recuerden que la idea del blog es hacer mas clara la aplicación de los conceptos de poo, siempre que se pueda usando ejemplos aplicables en la realidad, y no simplemente regalarles un codigo ya hecho sin que se entieda que se esta haciendo en el.

Si tienen problemas con el manejo de paquetes no usen en los archivos .java la linea que inicia con package y creen todas las clases en el "default package" si usan un ide como netbeans o eclipse y para los que lo hacen "a mano" creenlas en la misma carpeta y de esa manera no tendran problemas de alcance o visibilidad

alejo dijo...

Diana que pena por no responder antes tu inquietud, una forma de relacionar las tablas en mysql para el ejercicio que tu tienes que hacer seria manejar Ids para los contactos y las citas, no se, se me ocurre que los campos serian algo asi como id_contacto en la tabla contactos y id_citas en la tabla de citas y para crear la relación crea un campo en citas que contega el id del contacto que se relaciona con esa cita y declaras una llave foranea en citas con el campo que contiene el id del contacto.

Anónimo dijo...

Hola:Profe usted es un "DURO",me parece que de todos los prof de sistemas la UD usted es el mejor.La verdad me alegra mucho conocerlo y tener el placer de aprender a su lado.Espero que todo lo que emprenda de hoy en adelante le salga muy bien. Le deseo muchisimos exitos y que este muy bien.

CATALINA dijo...

Hola:Profe usted es un "DURO", la verdad de todos los prof de sisitemas de la UD usted es el mejor.La verdad me alegra mucho conocerlo y tener el placer de trabajar con usted. Gracias por todo.Ojala siga asi, que todo lo que se proponga hacer le salga muy bien. Le deseo muchisimos exitos en su vida.
Att:Catalina Tellez.

adictoazul375 dijo...

oie necesito ayuda , necesito crear una calculadora normal en java, orientada a objetos que sume, reste, multiplique, divida,saque la raiz y la potencia

Unknown dijo...
Este comentario ha sido eliminado por el autor.
Anónimo dijo...

hola alejo ya implemente tu codigo en java pero al pasarlo a la interfaz grafica no se puede ver los botones que esta contienen pero cuando lo voy a ejecutar si se pueden observar.
como hago para ver los botones en la interfaz grafica aun sin ejecutarlo?

alejo dijo...

Hola Eliana, si quisieras ver como va quedando tu interfaz, tendrías que usar un editor que soporte el modo de diseño para los JFrames, y crearla por este medio, pero me parece mas didáctico hacerlo escribiendo el código y así aprender que pasa por debajo cuando utilizo herramientas de ese tipo

Anónimo dijo...

hola, me llamo marta y me han mandado crear una calculadora que sume,reste,multiplique y divida numeros enteros en java usando eclipse y no tengo idea de como hacerlo, x favor si alguien m pudiera exar una mano mi email es chacon3868@msn.com

Anónimo dijo...

hola, tengo un problemita, lo que pasa que me dejaron hacer una calculadora normal en java, y ese dia no fui a clases y se deve entregar ya!!!.
ojala y me pudieran pasar un ejemplo gracias.
rodolh13@hotmail.com
saludos!!!!

Anónimo dijo...

Muy buena la calculadora, yo estaba usando esta http://www.clubdesarrolladores.com/articulos/mostrar/37-calculadora-con-interfaz-grafica-en-10-minutos pero la tuya es mucho mas completa, se pueden aprender muchas cosas nuevas con tu codigo. Gracias por compartir, haces un gran aporte a la comunidad.

gracias.

Anónimo dijo...

Hola, este codigo es muy bueno para entenderlo. Soy estudiante de Telemática y mi ultima practica consiste en una calculadora, tu aportación me ha servido de mucho. Pero agradeceria que me explicaras como puedo hacer la funcion ANS, la que guarda el resultado de la ultima operacion para poder ser utilizada a posteriori.Gracias

alejo dijo...

Para guardar el valor podrías crear un atributo que se encargue de almacenar este valor con sus respectivo setter y getter asocias el setter a la acción del botón que uses para la función y cuando necesites recuperarlo llamas al getter.

Espero haber ayudado y gracias por consultar el blog

Anónimo dijo...

que honda vato me llamo fer el codigo de una calculadora pero para poder sacar raiz

Unknown dijo...

Hola, pura vida??, me llamo Gunar, dejame decirte q esa calculadora esta muy completa, pero como hago para q sirva pasar FFFFFFFF a decimal, xq no encuentro como pasa un numero tan grande a decimal, te agradeceria montones q me puedas ayudar con eso gracias!!! gunarba@hotmail.com

alejo dijo...

Hola Gunar, tendrías que manejar algo mas grande que un entero para poder manejar esta representación por ejemplo un long que te da una capacidad de 32 bits

Unknown dijo...

Muchas gracias alejo me funciono muy bien!!

Anónimo dijo...

hola me llamo Mijael soy estudiante de ingenieria de sistemas y bueno me interesó tu tutorial el de la calculadora, justo y preciso lo que queria; me gustó la estructura de tu class sistemas, pero en el entorno grafico no enlazas con los botones para que haga las operaciones basicas....weno quisá ya lo obviaste por tu amplio conocimiento...pero yo quisiera entenderlo todo el codigo completo, si no seria mucho pedir me lo envias a: simplemente_mijael@hotmail.com
estaria agredecido eternamente gracias..

alejo dijo...

Mijael, dale una ojeada al método actionPerformed que es el que evalúa que acción ha sido ejecutada desde la interfaz gráfica para ejecutar un parte del código

Anónimo dijo...

Hola de nuevo soy Mijael...!!si tenes razon....y al fin hice mi calculadora de la forma correcta gracias de verdad........pero la vida no es llegar a la cima.. si no seguir subiendo por alcanzar la cima mas alta (que nunca llegaras) jeje....
weno ahora tengo un problema en un programa ...q nos dejó...se trata de simular una tienda.. donnde los atributos son Id, producto, descripcion, precio y stock.. nos pidió hacerlo en Archivos....!!las acciones son Ingresar producto,vender, modificar producto y eliminar producto....el problema esta en modificar y eliminar producto...pero en archivos (escritura y lectura)....!! de nuevo molestandote... quisiera orientaciones y consejos para hacer este programa...!!!! t lo agradeceria ...!!!!!!!! graciasssss

Anónimo dijo...

Hola, mi nombre es Camilo, me ha parecido muy bueno el aporte ya que soy estudiante de ing. de sistemas y el codigo es sencillo de entender, sin embargo tengo una duda.. en caso de querer solo operar enteros, en el metodo public void establecerNumeroA
Integer.parseInt(a,base); luego del parseint podria usar algo como Numero1.getText

Muchas Gracias de antemano y felicitaciones por el Blog.

alejo dijo...

Camilo al hacer un "parseo" usando el metodo parseInt de la clase Integer ya tienes un valor numérico entero con el cual puedes operar, espero haber resuelto tu duda y gracias por leer el blog

Anónimo dijo...

mmmm que pregunta mas rara lo que pregunta por lo q entendí son las instrucciones pero es logico es la manera en que mandas a un programa sumar restar..etc :S no se q pregunta realmnte

Unknown dijo...

hey cabron tu calculadora no puede multiplicar ahi hechale un ojo al codigo aun asi gracias.

alejo dijo...

Alfredo, un poco más de respeto en los comentarios por favor, por otra parte verificando el código la calculadora si multiplica

Anónimo dijo...

ey mano necesito saber como hacer esta calculadora en jframe, pero nesecito este favor antes del lunes se lo agradesco en el alma

alejo dijo...

Anónimo, la calculadora es un jFrame, dale una ojeada al código de AppCalculadora....
...
private JFrame frame;
...

Anónimo dijo...

Hola me parece muy interesante lo que has hecho, yo tengo que hacer un trabajo en NetBeans Mobility Pack para MIDP / CLDC 5.5 y me da fallo en esto (no lo encuentra):

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import co.edu.udistrital.prycalculadora.logica.*;


¿¿como lo soluciono??

agredeceria mucho la ayuda

alejo dijo...

Tienes que revisar la documentación sobre J2ME, porque no tienes disponible en un dispositivo móvil toda la memoria necesaria para ejecutar aplicaciones tipo Swing como la calculadora, entonces tienes que modificar la interfaz para manejarla con las capacidades de J2ME

Anónimo dijo...

Hola, me llamo Omar soy estudiante de bachiderato en computacion II año, yo quisiera que si me pudiere enviar la aplicacion de la calculadora te lo agradeceria mucho
o ayudarme a acerla con la interfaz grafica me podria contestar a mi correo d_omar_1992@hotmail.com gracias por leer mi comentario

nati dijo...

hola cual es el main del programa xq no puedo ejecutar..esto copie en jgras..q plataforma me recomendarias..gracias

Anónimo dijo...

hola que tal buen dia....
q excelentes aportes as logrado
me a servido mucho
se te agradece que personas como tu tengan la molestia de hacer estos post...
yo tengo una duda de como hacer un traductor de español a ingles en java me agradaria q me respondieras a mi correo
y te agradeceria tu respuesta
byron.gomez89@hotmail.com
de antemano gracias

Anónimo dijo...

Hola...
muy interesante el programa pero tengo una dadu para que se pone en la clase Sistema "abstract" que funcion cumple? y porq pones los atributos en protected no funciona lo mismo poniendolos private¿?

Anónimo dijo...

Amigo...
Me gustaria tomar tu trabajo como ejemplo para el mio pero yo deseaba crear mi propia gui ponerla mas presentable y eso como haria para que me realize lo q ya hace pero con otra gui.. agradeceria tu pronta ayuda..

manuel alejandro dijo...

hola migo quisiera darte una felizitacion por tu blog y pedirte un favor esque me pidieron hacer la misma calculadora y quisiera saber si se podria que me mandes el codigo completo y seguido para ejecutarlo en netbeans te agradeceria mucho y tambien saber los nombres de las clases y de el proyecto??

mi correo es sema_chino@hotmail.com
gracias

Anónimo dijo...

hola carnal,soy _Omar no pues aqui para felicitarte por blog y pues espero que sigas asi muy buen ejemplo me sirvio... nomas una pregunta como puedo crear un ejecutable???

Anónimo dijo...

Que tal oye tengo un problema con tu codigo tal vez sabes porque cuando lo hago correr en el ide netbeans se demora mucho y nunca sale la calculadora se queda corriendo....Mi nombre es Carlos
Gracias

Juaquin dijo...

hola ingeniero,
felicidades por su blog,
soy nuevo en esto pero necesito un codigo fuente en java netbeans de un descansa pantalla. mi correo es juako.m@hotmail.com

Muchas Gracias...

Chrisitan dijo...

Hola, q tal muy interezante el codigo casi justo es mi proyecto me podrias proporcionar ya tu codigo con el interfaz quiero ejecutarlo...please te lo agradecria mucho. mi correo es christianportillo_31@hotmail.com

carlos perez dijo...

oye amigo no se si me podrias explicar o poner un ejemplo sobre como hacer para que en mi calculadora pueda sumar varias veces n numeros y que al presionar la tecla igual me muestre el resultado de n numeros y si quiero seguir sumando me permita hacerlo... porfa ayudame, esque la verdad ya no se como rascarle a mi codigo.

Anónimo dijo...

Hola Leopoldo mi nombre es Luis, no se si pudieras orientarme un poco acerca de un programa que ingrese en un JTextField por ejemplo la siguiente operación
6*5/6-59* y que la calcule, solo quiero q me ayudes en esa parte de código en java que la GUI es facil...saludo de antemano y que tengas muchos éxitos.

Anónimo dijo...

nuevamente yo Luis perdon xD... confundi tu nombre saludos Alejo.

carlos perez dijo...

para Luis: mira hermano lo mejor ke podrias hacer para ke te haga esas funciones es: ps en cada signo ke le asignaste a tu boton utilices if`s anidados men!!! has la comparacion ke si es suma ke te haga la suma, ke si es resta te haga la resta y asi sucesivamente, para ke puedas hacer operaciones multiples en tu calcu.

carlos perez dijo...

yo donde tengo problemas es en la hora de mostrar resultado pf!!! :(

alejo dijo...

Luis, parece ser que estas utilizando notación infija en la expresión que quieres calcular, te sugiero que hagas split de esta cadena por los operadores para procesarla, dame unos días y te publico una entrada que trabaje con expresiones de este tipo

Anónimo dijo...

parce muy interesante esto, pero como todavía soy novato en esto y si pudieras de regarme un correo con este programa que has hecho me serviría de mucho ya me pondré a estudiar para el parcial que tengo este miércoles,

este es mi correo
radamantys.florez@hotmail.com

te lo agradecería muchísimo y gracias por este blog

Anónimo dijo...

hola yo te queria preguntar si me podias enviar el programa para calculadora mi correo es roylan-16@hoymail.com

te agradeceria mucho

fred1780 dijo...

hola, en verdad soy novato en esto y agradeceria si me enviaras el programa de calculadora a mi correo fred1780@hotmail.com

Anónimo dijo...

Alejo, realmente está excelente, pero te faltaron 2 pequeñas cosas que agregar: la raíz cuadrada y el punto decimal, pero aun así, excelente trabajo. :) +10

MerceFlakitaEleven dijo...

Por favor pueden ayudarme con la codificacion de una calculadora en java que contenga raiz cuadrada

MerceFlakitaEleven dijo...

Hola me podrina ayudar por favor con la codificacion d una calculadora en java pero con raiz cuadrada

Anónimo dijo...

hola me podrias decir porfavor como se llama el programa donde hiciste la calculadora de antemano muchas gracias

Anónimo dijo...

hola ALEJO ni mobre es Mary nesecito ayuda con un programa para portar una base de datos a un ordenador y que funcione correctamente como hago........
a si conoces un programa bakar para que funcione esto dime por que yo no encuentro por fis ayudame

micke dijo...

hola ante todo excelente aporte e, bueno quisiera saber como hacer una calculadora en donde al pasar el cursor por cualquier boton este resalte, al hacer clic resalte de otra manera y al dejar de hacer clic se muestre el boton de otra manera. Ojala se haya entendido y porfavor me podrias ayudar con esto, tal vez algunos tutoriales o informacoion
GRACIAS....

David dijo...

hola!!... me parece muy bien este aporte, me sirvio de mucho, pero tengo una duda....en caso de que solo necesitara el convertor y no realizar aplicaciones que parte tendria que eliminar del codigo?

de antemano gracias por la ayuda

damian dijo...

hola, mira una pregunta si pudiste hacer una calculadora que calcule decimal,octal,etc,por que no pones tambien el de una basica que solo tenga suma,resta,mult,y div,porfavor si!!!!!!!!!!esq apenas estoy empesando en esto

damian dijo...

pero x favor contestame....grasias

Anónimo dijo...

gracias por tu conocimiento

Anónimo dijo...

Esta muy bueno pero no entiendo como programar en el frame -.-

Anónimo dijo...

Hola alejo me sirvió de mucha ayuda es blog y quería agradecerte por este post que publicaste, nomas quería pedirte un favor como hago para que cuando este en hexadecimal me de el resultado de las letra en mayúsculas, por todos los resultados me los da en miniculas, espero y puedas ayudarme soy novato en esto, saludos desde México y muchas gracias espero me puedas ayudar.

Daniel Antonio Cruz dijo...

Gracias men tu programa me fue de mucha ayuda, ami me encargaron algo smenjante en la escuela

Anónimo dijo...

hola, soy arturo, tengo una duda para poder hacer que la calculadora al momento de oprimir dos veces el mismo numero lo tome con ese valor, quiero decir que si oprimo 22 tome el valor de 22 y no el de 2 solamente

Anónimo dijo...

Hola.. Soy Iginia :) y mi amigo Virginio y yo tenemos una duda al momento de compilar!! me aparece errores D: y estoy muy asustada y aterrorizada mil D: HELP ME NIGGA...!!!!

Unknown dijo...

hola alejo quiero saber si me puedes ayudar con un programa en java la verdad lo veo complicado y recien estoy empezando en esto de la progrmacion

le agradeceria sua atencion

Realice una solución para un sistema Matemático que cumpla las siguientes características,
• Conversión de números
o Decimales a Binarios.
o Binarios a Decimales.
o Decimales a Octales.
o Octales a Decimales.
o Decimales a Hexadecimales.
o Hexadecimales a Decimales.
o Binarios a Octales.
o Octales a Binarios.
o Binarios a Hexadecimales.
o Hexadecimales a Binarios.
• Las 4 operaciones básicas entre:
o Decimales con Decimales
o Binarios con Binarios
o Octales con Octales
o Hexadecimales con Hexadecimales.

Se recomienda tener clases para cada una de las conversiones y de las operaciones básicas con cada uno de los distintos tipos de datos numéricos, o por lo menos encapsular cierta información para que resulte mas fácil la manipulación de la misma, además no olviden revisar las reglas que rigen este tipo de sistema matemático.

Unknown dijo...


hola alejo quiero saber si me puedes ayudar con este programa, se me esta haciendo dificil recien estoy iniciando en esto de la progrmacion

gracias por sua atencion


Realice una solución para un sistema Matemático que cumpla las siguientes características,
• Conversión de números
o Decimales a Binarios.
o Binarios a Decimales.
o Decimales a Octales.
o Octales a Decimales.
o Decimales a Hexadecimales.
o Hexadecimales a Decimales.
o Binarios a Octales.
o Octales a Binarios.
o Binarios a Hexadecimales.
o Hexadecimales a Binarios.
• Las 4 operaciones básicas entre:
o Decimales con Decimales
o Binarios con Binarios
o Octales con Octales
o Hexadecimales con Hexadecimales.

Se recomienda tener clases para cada una de las conversiones y de las operaciones básicas con cada uno de los distintos tipos de datos numéricos, o por lo menos encapsular cierta información para que resulte mas fácil la manipulación de la misma, además no olviden revisar las reglas que rigen este tipo de sistema matemático.

joseRamos dijo...
Este comentario ha sido eliminado por el autor.
joseRamos dijo...

tengo una pregunta: si le quisiera cambiar el icono x defecto de la tacita de cafe como seria? es diferente a como se hace en un JFrame si m puedes ayudar grasias

joseRamos dijo...
Este comentario ha sido eliminado por el autor.
Unknown dijo...

Amigo tienes el programa para descargarlo?es que no pude hacer la interface

jorge dijo...

ayudaaaaaaaaaaaaaaa!!!!!!!!!!!! necesito agregarle el punto decimal por favor ayudenme ya busque por mil lados

Marcos dijo...

lo unico que no entendi es a donde va la ultima clase de "APPCalculadora", como es que se implementa esa parte

Anónimo dijo...

Como hago para que funcione la calculadora.
todo va en un archivo o como?
no puedo hacer que funcione ayudenme porfa.
saludos!!

Samuel Valle buscame en fb dijo...

aa perro el profe trae su omitrix xdd

Unknown dijo...

Disculpen ayuda urgente , tendras el programa hecho y comprimido
para descargar ayudaaaaaaaaaa

mi correo Furby472@gmail.com

porfavor

Unknown dijo...

Samuel Valle , habra forma de comunicarme contigo para la calculadora
¡