Pages

Subscribe:

Entradas



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

Espero que el ejemplo le sea de utilidad















3 comentarios:

Anónimo dijo...

chanda k copie lo mismo de otros blogs;
y si lo va ser agalo mejor .|.

josè cevallos dijo...

el codigo lo vi en otro blog pero no lo copie ademas las cosas no son para copiar sino para giarse este codigo lo utilice para hacer otra calculadora tipo cientifica....

espero que se grave eso.

Anónimo dijo...

podria subir el programa para descargarlo y verlo en netbeans?

Publicar un comentario