Ver Mensaje Individual
  #5 (permalink)  
Antiguo 28/06/2011, 22:25
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Transformacion de numero binario a decimal

Hola,

Cita:
Iniciado por Xerelo Ver Mensaje
... Pues que tu método sería completamente ineficiente, por ponerte un ejemplo, para hexadecimal (que también se puede hacer con el método que he puesto) necesitarías 16 if. ...
Exactamente, y agregando algo más, la programación en Java es muy diferente a otros lenguajes, está orientada a objetos, por lo que los métodos son mucho más eficientes que la programación procedural y secuencial. Por ejemplo, el mismo programa pero usando las herramientas que te provee Java,

Código Java:
Ver original
  1. import java.awt.Component;
  2. import java.awt.FlowLayout;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5.  
  6. import javax.swing.JApplet;
  7. import javax.swing.JButton;
  8. import javax.swing.JPanel;
  9. import javax.swing.JTextField;
  10.  
  11. public class TransBinDec extends JApplet implements ActionListener {
  12.  
  13.     private static final long serialVersionUID = 1L;
  14.  
  15.     private String text = "Presione en los botones binarios.";
  16.     private JTextField field;
  17.     private JPanel panel;
  18.    
  19.     @Override
  20.     public void init() {
  21.         panel = new JPanel();
  22.         panel.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
  23.  
  24.         JButton button;
  25.         for (int i = 0; i < 16; i++) {
  26.             button = new JButton("0");
  27.             button.addActionListener(this);
  28.             panel.add(button);
  29.         }
  30.  
  31.         field = new JTextField(text);
  32.  
  33.         getContentPane().removeAll();
  34.         getContentPane().add(panel, java.awt.BorderLayout.CENTER);
  35.         getContentPane().add(field, java.awt.BorderLayout.PAGE_END);
  36.     }
  37.  
  38.     @Override
  39.     public void actionPerformed(ActionEvent e) {
  40.         if (e.getSource() instanceof JButton) {
  41.             JButton f = (JButton)e.getSource();
  42.             f.setText(f.getText().equals("0") ? "1" : "0");
  43.             calc();
  44.         }
  45.     }
  46.  
  47.     private void calc() {
  48.         StringBuilder builder = new StringBuilder();
  49.         for (Component component : panel.getComponents())
  50.             if (component instanceof JButton)
  51.                 builder.append(((JButton)component).getText());
  52.  
  53.         Integer bin = Integer.parseInt(builder.toString(), 2);
  54.         field.setText(String.format("%s. El valor binario %s en decimal es %d.",
  55.                 text, builder.toString(), bin));
  56.     }
  57.  
  58. }
Aunque contraviniendo las instrucciones de Xerelo, pero creo que ElMeoS necesita mas ejemplos en Java puro, puro Java, que según lo que observo tiene ya experiencia en C y similares.

Si observas bien no necesité 16 variables diferentes para los botones, simplemente están contenidos en una Collection de Component, los cuales puedo accesar por medio del panel.getComponents(). Así también no necesito accesar 16 variables en el ActionListener puesto que comparten el mismo código, la única diferencia es que estoy usando 'Objetos' diferentes que me entrega el getSource().

Saludos,

ps:

Olvidaba lo mas importante, para que funcione con 24 digitos solamente tienes que cambiar esta línea, lo cual hace que el código sea muy versátil, extensible y escalable. (No lo probé con más digitos).

Código Java:
Ver original
  1. for (int i = 0; i < 24; i++) {

Última edición por HackmanC; 28/06/2011 a las 22:45