ola pessoal estou desenvolvendo esta calculadora e estou me batendo nas operações de bases diferentes, alguém se habilita em me ajudar?? eu estou ainda só na base decimal e binaria (acho que pro resto a teoria é a mesma) olha o código ai .Se quiserem me add no MSN: edimaxx2005@hotmail.com metodo principal //Home Pagehttp://guigenie.cjb.net - Check often for new versions! import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; @SuppressWarnings({ "unused", "serial" }) public class Calculadora extends JPanel implements ActionListener { private JButton n1; private JButton n2; private JButton n3; private JButton n4; private JButton n5; private JButton n6; private JButton n7; private JButton n8; private JButton n9; private JButton n0; private JButton na; private JButton nb; private JButton nc; private JButton nd; private JButton ne; private JButton nf; private JButton igual; private JButton soma; private JButton sub; private JButton div; private JButton virg; private JButton mult; private JTextField teste; private JTextField tela; private JRadioButton dec; private JRadioButton bin; private JRadioButton oct; private JRadioButton hex; private JButton limpa; private ButtonGroup grupoRadio = new ButtonGroup(); public Calculadora() { //construct components n1 = new JButton ("1"); n2 = new JButton ("2"); n3 = new JButton ("3"); n4 = new JButton ("4"); n5 = new JButton ("5"); n6 = new JButton ("6"); n7 = new JButton ("7"); n8 = new JButton ("8"); n9 = new JButton ("9"); n0 = new JButton ("0"); na = new JButton ("A"); nb = new JButton ("B"); nc = new JButton ("C"); nd = new JButton ("D"); ne = new JButton ("E"); nf = new JButton ("F"); igual = new JButton ("="); soma = new JButton ("+"); sub = new JButton ("--"); div = new JButton ("/"); virg = new JButton (","); mult = new JButton ("*"); teste = new JTextField (5); tela = new JTextField (5); dec = new JRadioButton ("decimal"); bin = new JRadioButton ("binario"); oct = new JRadioButton ("octal"); hex = new JRadioButton ("hexa"); limpa = new JButton ("C"); // dec.setSelected(true); //adjust size and set layout setPreferredSize (new Dimension (335, 374)); setLayout (null); //add components add (n1); add (n2); add (n3); add (n4); add (n5); add (n6); add (n7); add (n8); add (n9); add (n0); add (na); add (nb); add (nc); add (nd); add (ne); add (nf); add (igual); add (soma); add (sub); add (div); add (virg); add (mult); add (teste); add (tela); add (dec); add (bin); add (oct); add (hex); add (limpa); //set component bounds (only needed by Absolute Positioning) n1. setBounds (20, 260, 55, 50); n2. setBounds (80, 260, 55, 50); n3. setBounds (140, 260, 55, 50); n4. setBounds (200, 260, 55, 50); n5. setBounds (20, 205, 55, 50); n6. setBounds (80, 205, 55, 50); n7. setBounds (140, 205, 55, 50); n8. setBounds (200, 205, 55, 50); n9. setBounds (20, 150, 55, 50); n0. setBounds (20, 315, 115, 50); na. setBounds (80, 150, 55, 50); nb. setBounds (140, 150, 55, 50); nc. setBounds (200, 150, 55, 50); nd. setBounds (20, 95, 55, 50); ne. setBounds (80, 95, 55, 50); nf. setBounds (140, 95, 55, 50); igual. setBounds (260, 260, 55, 104); soma. setBounds (260, 150, 55, 50); sub. setBounds (260, 205, 55, 50); div. setBounds (200, 95, 55, 50); virg. setBounds (140, 315, 55, 50); mult. setBounds (260, 95, 55, 50); teste. setBounds (40, 5, 245, 25); tela. setBounds (20, 30, 291, 30); dec. setBounds (95, 65, 70, 25); bin. setBounds (30, 65, 70, 25); oct. setBounds (175, 65, 56, 25); hex. setBounds (245, 65, 70, 25); limpa. setBounds (200, 315, 55, 50); grupoRadio.add(dec); grupoRadio.add(bin); grupoRadio.add(oct); grupoRadio.add(hex); n1. addActionListener(this); n2. addActionListener(this); n3. addActionListener(this); n4. addActionListener(this); n5. addActionListener(this); n6. addActionListener(this); n7. addActionListener(this); n8. addActionListener(this); n9. addActionListener(this); n0. addActionListener(this); na. addActionListener(this); nb. addActionListener(this); nc. addActionListener(this); nd. addActionListener(this); ne. addActionListener(this); nf. addActionListener(this); igual. addActionListener(this); soma. addActionListener(this); sub. addActionListener(this); div. addActionListener(this); virg. addActionListener(this); mult. addActionListener(this); teste. addActionListener(this); tela. addActionListener(this); dec. addActionListener(this); bin. addActionListener(this); oct. addActionListener(this); hex. addActionListener(this); limpa. addActionListener(this); n0.setEnabled(false); n1.setEnabled(false); n2.setEnabled(false); n3.setEnabled(false); n4.setEnabled(false); n5.setEnabled(false); n6.setEnabled(false); n7.setEnabled(false); n8.setEnabled(false); n9.setEnabled(false); na.setEnabled(false); nb.setEnabled(false); nc.setEnabled(false); nd.setEnabled(false); ne.setEnabled(false); nf.setEnabled(false); } static double variavel1 = 0, variavel2 = 0, resultado = 0, tmp = 0; static String retorna = null; static int op = 0, base = 0, baseAnt = 0; public static void main (String[] args) { JFrame frame = new JFrame ("Trabalho Algoritimo BSI 2SA"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); frame.getContentPane().add (new Calculadora()); frame.pack(); frame.setVisible (true); } @Override public void actionPerformed(ActionEvent arg0) { Object obj = arg0.getSource(); // controle para liberar ou não o teclado em relação a base selecionada. // decimal if ( obj == dec ){ n0.setEnabled(true); n1.setEnabled(true); n2.setEnabled(true); n3.setEnabled(true); n4.setEnabled(true); n5.setEnabled(true); n6.setEnabled(true); n7.setEnabled(true); n8.setEnabled(true); n9.setEnabled(true); na.setEnabled(false); nb.setEnabled(false); nc.setEnabled(false); nd.setEnabled(false); ne.setEnabled(false); nf.setEnabled(false); base = 1; } // binario else if( obj == bin ){ n0.setEnabled(true); n1.setEnabled(true); n2.setEnabled(false); n3.setEnabled(false); n4.setEnabled(false); n5.setEnabled(false); n6.setEnabled(false); n7.setEnabled(false); n8.setEnabled(false); n9.setEnabled(false); na.setEnabled(false); nb.setEnabled(false); nc.setEnabled(false); nd.setEnabled(false); ne.setEnabled(false); nf.setEnabled(false); virg.setEnabled(false); base = 2; } // octal else if( obj == oct ){ n0.setEnabled(true); n1.setEnabled(true); n2.setEnabled(true); n3.setEnabled(true); n4.setEnabled(true); n5.setEnabled(true); n6.setEnabled(true); n7.setEnabled(true); n8.setEnabled(false); n9.setEnabled(false); na.setEnabled(false); nb.setEnabled(false); nc.setEnabled(false); nd.setEnabled(false); ne.setEnabled(false); nf.setEnabled(false); base = 3; } // hexa else if( obj == hex ){ n0.setEnabled(true); n1.setEnabled(true); n2.setEnabled(true); n3.setEnabled(true); n4.setEnabled(true); n5.setEnabled(true); n6.setEnabled(true); n7.setEnabled(true); n8.setEnabled(true); n9.setEnabled(true); na.setEnabled(true); nb.setEnabled(true); nc.setEnabled(true); nd.setEnabled(true); ne.setEnabled(true); nf.setEnabled(true); base = 4; } // fim do controle para liberar ou não o teclado em relação a base selecionada. if ( base == 1 ){ if ( baseAnt != 0 ){ //resultado = Double.parseDouble(tela.getText()); retorna = (tela.getText()); tmp = (operações.converteParaDecimal(retorna, baseAnt)); tela.setText(String.valueOf(retorna)); } teste.setText(String.valueOf(base)); teste.setText(String.valueOf(retorna)); if ( obj == n0){ tela.setText(tela.getText() + 0); } if ( obj == n1){ tela.setText(tela.getText() + 1); } if ( obj == n2){ tela.setText(tela.getText() + 2); } if ( obj == n3){ tela.setText(tela.getText() + 3); } if ( obj == n4){ tela.setText(tela.getText() + 4); } if ( obj == n5){ tela.setText(tela.getText() + 5); } if ( obj == n6){ tela.setText(tela.getText() + 6); } if ( obj == n7){ tela.setText(tela.getText() + 7); } if ( obj == n8){ tela.setText(tela.getText() + 8); } if ( obj == n9){ tela.setText(tela.getText() + 9); } if ( obj == virg){ tela.setText(tela.getText() + "."); virg.setEnabled(false); } if ( ( obj == div) || ( obj == mult) || ( obj == sub) || ( obj == soma) ){ if ( obj == soma){ op = 1; } if ( obj == sub){ op = 2; } if ( obj == mult){ op = 3; } if ( obj == div){ op = 4; } variavel1 = Double.parseDouble(tela.getText()); tela.setText(null); } if ( obj == igual ){ variavel2 = Double.parseDouble(tela.getText()); tela.setText(null); resultado = operações.operação(op, variavel1, variavel2); tela.setText(String.valueOf(resultado)); } if ( obj == limpa ){ tela.setText(null); variavel1 = 0; variavel2 = 0; resultado = 0; } }else if( base == 2 ){ resultado = Double.parseDouble(tela.getText()); retorna = (operações.converte(resultado, base)); tela.setText(retorna); teste.setText(String.valueOf(base)); teste.setText(String.valueOf(retorna)); if ( obj == n0){ tela.setText(tela.getText() + 0); } if ( obj == n1){ tela.setText(tela.getText() + 1); } if ( ( obj == div) || ( obj == mult) || ( obj == sub) || ( obj == soma) ){ if ( obj == soma){ op = 1; } if ( obj == sub){ op = 2; } if ( obj == mult){ op = 3; } if ( obj == div){ op = 4; } retorna = (tela.getText()); variavel1 = (double)operações.converteParaDecimal(retorna, 1); tela.setText(null); } retorna = null; if ( obj == igual ){ retorna = (tela.getText()); variavel2 = (double)operações.converteParaDecimal(retorna, 1); tela.setText(null); resultado = operações.operação(op, variavel1, variavel2); retorna = (operações.converte(resultado, base)); tela.setText(String.valueOf(retorna)); } retorna = null ; if ( obj == limpa ){ tela.setText(null); variavel1 = 0; variavel2 = 0; resultado = 0; } baseAnt = 1; }else if ( base == 3 ){ resultado = Double.parseDouble(tela.getText()); retorna = (operações.converte(resultado, base)); tela.setText(String.valueOf(retorna)); teste.setText(String.valueOf(base)); teste.setText(String.valueOf(retorna)); baseAnt = 2; }else if ( base == 4 ){ resultado = Double.parseDouble(tela.getText()); retorna = (operações.converte(resultado, base)); tela.setText(String.valueOf(retorna)); teste.setText(String.valueOf(base)); teste.setText(String.valueOf(retorna)); baseAnt = 3; } } } método das operações e conversões public class operações { public static double operação( int op , double variavel1 , double variavel2 ){ double result = 0; switch(op){ case 1: result = variavel1 + variavel2; break; case 2: result = variavel1 - variavel2; break; case 3: result = variavel1 * variavel2; break; case 4: result = variavel1 / variavel2; break; } return result; } public static String converte( double num , int base ){ int valor = (int)num; String result = ""; switch (base){ case 2 : result =Integer.toString(valor,2); break; case 3 : result = Integer.toOctalString(valor); break; case 4 : result = Integer.toHexString(valor); break; } return result; } public static int converteParaDecimal( String num , int base ){ int result = 0; switch (base){ case 1 : result =Integer.parseInt(num, 2); break; case 2 : result = Integer.parseInt(num, 8); break; case 3 : result = Integer.parseInt(num, 16); break; } return result; } }