Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - DarkSorcerer

#71
¿ Encuentran justificable que deberían empezar con C para luego seguir con C++ o Java ?
#72
Java / Ayuda con Eventos y libreria Swing
5 Febrero 2013, 01:33 AM
Hola, necesito ayuda con eventos, para ejercitar lo aprendido, me decidí programar un conversor de numeros, es decir, el usuario escribe un numero en el campo, despues selecciona en un boton de radio si quiere convertirlo a binario o hexadecimal, si no lo escogio arrojará un mensaje de que seleccione el tipo de numero a convertir, pero el problema que me da es cuando el usuario apreta el boton "Calcular" sin que haya un numero en el campo y se me cae el programa, pese a que programe a que el sistema desplegara un mensaje cuando no ingreso un numero, pero no me hace caso

Les dejo mi codigo y algunas imagenes, ojala me puedan ayudar ya que soy nuevo en esto, por el momento me calcula bien a binario y hexadecimal por que lo comprobe, pero el problema es cuando ejecuto el boton Calcular sin que haya numero y deberia avisar por mensaje de que se debe ingresar un numero

Cualquier recomendacion o correccion de algun errores que haya cometido, bienvenido sean, o si hay una forma mas corta, tambien, asi ganamos todos en este tema xD

Clase Convertidor
[/b]

package ejercicio117;

//Se importa las las clases necesarias para el convertidor

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
import javax.swing.JOptionPane;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

public class Convertidor extends JFrame {
   
    //Declaracion de variables
   
    private JLabel etiqueta1;
    private JLabel etiqueta2;
    private JTextField campo1;
    private JTextField campo2;
    private JButton botonCalcular;
    private JRadioButton botonBinario;
    private JRadioButton botonHexadecimal;
    private ButtonGroup grupoBotones;
    private boolean esBinario;
    private boolean esHexadecimal;
    private int numeroDecimal;
   
    public Convertidor(){
       
        super("Convertidor");
        setLayout(new FlowLayout());
       
        //Se crean las etiquetas
       
        etiqueta1 = new JLabel("Numero a convertir");
        etiqueta2 = new JLabel("Numero convertido ");
       
        //Se crean los campos, el primero para ingresar y el otro para imprimir
       
        campo1 = new JTextField(10);
        campo2 = new JTextField(10);
        campo2.setEditable(false);
       
        //Se crean los botones de Radio y uno normal
       
        botonCalcular = new JButton("Calcular");
        botonBinario = new JRadioButton("Binario");
        botonHexadecimal = new JRadioButton("Hexadecimal");
       
        //Se crean booleanos necesarios para determinar el tipo de numero a convertir
       
        esBinario = false;
        esHexadecimal = false;
        numeroDecimal = 0;
       
        //Se crea el grupo de botones de radio y se agregan los botones radio a
        //dicho grupo
       
        grupoBotones = new ButtonGroup();
        grupoBotones.add(botonCalcular);
        grupoBotones.add(botonBinario);
        grupoBotones.add(botonHexadecimal);
       
       
        //Se agregan las etiquetas, campos y botones a la ventana
       
        add(etiqueta1);
        add(campo1);
       
        add(etiqueta2);
        add(campo2);
       
        add(botonBinario);
        add(botonHexadecimal);
        add(botonCalcular);
       
        //Se crea instancia AdministradorEventos para controlar los eventos
       
        AdministradorEventos administrador = new AdministradorEventos();
       
        //Se le agregan eventos a los botones a utilizar
       
        botonBinario.addItemListener(administrador);
        botonHexadecimal.addItemListener(administrador);
        botonCalcular.addActionListener(administrador);
       
    }
   
    private class AdministradorEventos implements ActionListener, ItemListener {
       
        /**
         *
         * Metodo que permite calcular el numero numero decimal a binario, hexade
         * cimal o viceversa, segun lo que se haya seleccionado en los botones
         * de radio
         *
         */
       
        public void actionPerformed(ActionEvent evento){
           
            if(esBinario){
               
                if(campo1.getText() == null){
                   
                    JOptionPane.showMessageDialog(null, "No ha ingresado ningun numero", "ERROR", 0);
                   
                }else{
                   
                    numeroDecimal = Integer.parseInt(campo1.getText());
                    String binario = "";
                   
                    while(numeroDecimal != 0){
                       
                        binario += numeroDecimal%2; //Se concatena
                        numeroDecimal = numeroDecimal / 2;
                       
                    }
                   
                    char arregloChar[] = binario.toCharArray();
                    binario = "";
                   
                    for(int i=0; i<arregloChar.length; i++){
                       
                        binario += arregloChar[(arregloChar.length-1)-i];
                       
                    }
                   
                    campo2.setText(binario);
                }
               
            }else{
               
                if(esHexadecimal){
                   
                    if(campo1.getText() == null){
                       
                        JOptionPane.showMessageDialog(null, "No ha ingresado ningun numero", "ERROR", 0);
                       
                    }else{
                       
                       
                        numeroDecimal = Integer.parseInt(campo1.getText());
                        String hexadecimal = "";
                        int resto = 0;
                       
                        while(numeroDecimal != 0){
                           
                            resto = numeroDecimal % 16;
                           
                            switch(resto){
                               
                                case 10:
                                   
                                    hexadecimal += "A";
                                    break;
                                   
                                case 11:
                                   
                                    hexadecimal += "B";
                                    break;
                                   
                                case 12:
                                   
                                    hexadecimal += "C";
                                    break;
                                   
                                case 13:
                                   
                                    hexadecimal += "D";
                                    break;
                                   
                                case 14:
                                   
                                    hexadecimal += "E";
                                    break;
                                   
                                case 15:
                                   
                                    hexadecimal += "F";
                                    break;
                                   
                                default:
                                   
                                    hexadecimal += resto;
                                    break;
           
                            }//Fin del Switch
                           
                            numeroDecimal = numeroDecimal / 16;
                            System.out.println(numeroDecimal);
                           
                        }//Fin del ciclo While
                       
                        char arregloChar[] = hexadecimal.toCharArray();
                        hexadecimal = "";
                       
                        for(int i=0; i<arregloChar.length; i++){
                           
                            hexadecimal += arregloChar[(arregloChar.length-1)-i];
                           
                        }
                       
                        campo2.setText(hexadecimal);
                    }
                   
                   
                   
                }else{
                   
                    JOptionPane.showMessageDialog(null,"Seleccione el tipo de numero a convertir","Error", 0);
                   
                }
            }
           
        }
       
        /**
         * Metodo que permite seleccionar el tipo de numero a convertir
         */
       
        public void itemStateChanged(ItemEvent evento){
           
            if(botonBinario.isSelected()){
               
                esBinario = true;
                esHexadecimal = false;
               
            }
           
            if(botonHexadecimal.isSelected()){
               
                esBinario = false;
                esHexadecimal = true;
               
            }
           
        }
       
    }
   
}


Programa principal
[/b]

package ejercicio117;

public class Ejercicio117 {

    public static void main(String[] args) {
       
        Convertidor convertidor = new Convertidor();
       
        convertidor.setSize(250,150);
        convertidor.setDefaultCloseOperation(Convertidor.EXIT_ON_CLOSE);
        convertidor.setResizable(false);
        convertidor.setVisible(true);
       
    }
}


Esta es la vista normal del programa

Este error ocurre cuando se hace Click en calcular sin haber elegido el tipo de numero a convertir

Este error se produce cuando no hay un numero en el campo una vez que se selecciono el tipo de numero a convertir, yo esperaba que lanzara el mensaje que diga al usuario ingresar un numero
#73
Muchas gracias, me sirvió tu ayuda, ahora me funciona como yo lo quería  ;-)

Aunque tuve un pequeño problema en el boton de la division, no me arrojaba decimales, a si que lo modifique de tal manera que mostrara


Lo hice asi

 if(evento.getSource() == botonDivision){

               numero1 = Integer.parseInt(campo1.getText());
               numero2 = Integer.parseInt(campo2.getText());
               double resultado = (double)numero1/(double)numero2;
               
               campoResultado.setText(String.format("%.3f", resultado));
               
           }

De todas maneras, muchas gracias por la ayuda, me fue muy util

Ahora mi proximo objetivo es programar una calculadora pero esta vez usando botones  ;D
#74
Me anime a programar una calculadora sencilla, se trata de 2 campos de textos donde se ingresa el numero, abajo hay 5 botones, hay para sumar, restar, multiplicar y dividir, mas un boton adicional para borrar todo, los resultados de las operaciones se muestra en un campo inmodificable, pero mi problema es que para que pueda guardar los numeros a operar, hay que apretar el boton Enter  y lo que yo busco es que cuando el usuario escribe el numero en los campos, no tenga que acudir al enter, solo es llegar y escribir los numeros y clickear el boton de la operacion deseada.

Yo estoy leyendo el libro de Deitel 7ma edicion si es que alguien lo leyo para que me pueda ayudar y les dejo mi codigo, yo programé una clase que se llama Calculadora y que hereda todo de JFrame. Por si acaso, estoy usando el Netbeans 7.2


Les dejo la clase calculadora


package ejercicio109;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Calculadora extends JFrame {
   
    private JLabel etiqueta1;
    private JLabel etiqueta2;
    private JLabel etiqueta3;
   
    private JTextField campo1;
    private JTextField campo2;
    private JTextField campo3;
   
    private JButton botonSuma;
    private JButton botonResta;
    private JButton botonProducto;
    private JButton botonDivision;
    private JButton botonBorrar;
   
    private int numero1;
    private int numero2;
    private int resultado;
   
    public Calculadora(){
       
        super("CALCULADORA SIMPLE");
        setLayout(new FlowLayout());
       
        etiqueta1 = new JLabel("Numero 1");
        etiqueta2 = new JLabel("Numero 2");
        etiqueta3 = new JLabel("Resultado");
       
        campo1 = new JTextField(10);
        campo2 = new JTextField(10);
        campo3 = new JTextField(10);
        campo3.setEditable(false);
       
        botonSuma = new JButton("Sumar");
        botonResta = new JButton("Restar");
        botonProducto = new JButton("Multiplicar");
        botonDivision = new JButton("Dividir");
        botonBorrar = new JButton("Borrar");
       
        add(etiqueta1);
        add(campo1);
       
        add(etiqueta2);
        add(campo2);
       
        add(etiqueta3);
        add(campo3);
       
        add(botonSuma);
        add(botonResta);
        add(botonProducto);
        add(botonDivision);
        add(botonBorrar);
       
        numero1 = 0;
        numero2 = 0;
       
        AdministradorEventos administrador = new AdministradorEventos();
       
        campo1.addActionListener(administrador);
        campo2.addActionListener(administrador);
       
        botonSuma.addActionListener(administrador);
        botonResta.addActionListener(administrador);
        botonProducto.addActionListener(administrador);
        botonDivision.addActionListener(administrador);
        botonBorrar.addActionListener(administrador);

    }
   
    private class AdministradorEventos implements ActionListener {
       
        public void actionPerformed(ActionEvent evento){
           
            if(evento.getSource() == campo1){
               
                numero1 = Integer.parseInt(evento.getActionCommand());
               
            }
           
            if(evento.getSource() == campo2){
               
                numero2 = Integer.parseInt(evento.getActionCommand());
               
            }
           
            if(evento.getSource() == botonSuma){
               
                resultado = numero1 + numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonResta){
               
                resultado = numero1 - numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonProducto){
               
                resultado = numero1 * numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonDivision){
               
                resultado = numero1 / numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonBorrar){
               
                numero1 = 0;
                numero2 = 0;
                resultado = 0;
               
                campo1.setText("");
                campo2.setText("");
                campo3.setText("");
               
            }
           
        }
       
    }
   
   
}


Y ahora les dejo el programa principal

package ejercicio109;

public class Ejercicio109 {

    public static void main(String[] args) {
       
        Calculadora calculadora = new Calculadora();
       
        calculadora.setSize(600,100);
        calculadora.setResizable(false);
        calculadora.setDefaultCloseOperation(Calculadora.EXIT_ON_CLOSE);
        calculadora.setVisible(true);
       
    }
}


#75
Foro Libre / Re: estoy muy viejo para empezar?
18 Enero 2013, 04:55 AM
Yo recien aprendi a programar de verdad como a los 19 años, con Visual Basic, despues Java, C/C++, antes lo unico que sabia era HTML/CSS (para paginas web), yo creo que la edad no es lo importante, yo creo que lo mas esencial son las ganas de aprender y seguir adelante, a mi me pasa que ahora que como estoy de vacaciones, mucha gente de mi edad piensan en ir a fiestas, drogarse o conocer gente, yo en cambio, me he pasado noches completas aprendiendo nuevas cosas y programando, mi ultima aplicacion fue una broma informatica que abre miles de ventanas (bucle infinito), de hecho, para navidad me compre un libro de Java para seguir viendo algunas cosas que no haya visto aun (mi objetivo es dominarlo lo mejor posible, eso me apasiona :D), ya he leido 553 paginas de 1100 aprox

No creas que eres el unico, en la universidad que estoy conozco a uno que recien empezo como a los 24 y es muy habil, se podria decir que es uno de los mejores de la facultad (lo digo enserio)
#76
Investigando por ahi, me di cuenta que Java elimina automaticamente variables primitivas (como int, long, float, etc) y de referencia, pero tambien me di cuenta que System tiene un metodo que ejecuta el recolector de basura, teniendo en cuenta eso, quise hacer un pequeño programa para ponerlo a prueba, se trata de una clase que se llama Empleado que guarda la información de un empleado, ademas de una variable static para ir contando los empleados que tiene la compañia, la cosa es que creo 2 empleados e imprimo los datos por pantalla, ademas de la cantidad de empleados y me salen que son 2, pero cuando al segundo empleado lo convierto en null y llamo al recolector de basura, no me lo borra de la memoria, y sigue marcando como 2 empleados en la compañia en vez de 1, ¿alguien sabe a que se debe esto?, ¿ que no se suponia que el recolector borra de la memoria las variables que son "inutiles"?

Les dejo el codigo

//Clase Empleado

package ejercicio83;

public class Empleado {
   
   private String nombre;
   private String rut;
   private int edad;
   private int sueldo;
   private static int cantEmpleados = 0;
   
   public Empleado(String nombre, String rut, int edad, int sueldo){
       
       this.nombre = nombre;
       this.rut = rut;
       this.edad = edad;
       this.sueldo = sueldo;
       this.cantEmpleados++;
       
   }
   
   public String getNombre(){
       
       return nombre;
       
   }
   
   public String getRut(){
       
       return rut;
       
   }
   
   public int getEdad(){
       
       return edad;
       
   }
   
   public int getSueldo(){
       
       return sueldo;
       
   }
   
   public static int getContratados(){
       
       return cantEmpleados;
       
   }
   
}


//Main

package ejercicio83;

public class Ejercicio83 {

    public static void main(String[] args) {
       
        Empleado empleado1 = new Empleado("Juan", "1234", 22 , 350000);
        Empleado empleado2 = new Empleado("Carlos", "5678", 30, 1200000);
       
        System.out.printf("\n\nNombre: %s\nRut: %s\nEdad: %d\nSueldo: %d", empleado1.getNombre(), empleado1.getRut(), empleado1.getEdad(), empleado1.getSueldo());
        System.out.printf("\n\nNombre: %s\nRut: %s\nEdad: %d\nSueldo: %d", empleado2.getNombre(), empleado2.getRut(), empleado2.getEdad(), empleado2.getSueldo());
       
        empleado2 = null;
        System.gc();
        System.out.printf("\n\n%d empleados\n", Empleado.getContratados());
       
    }
}

#77
Java / Re: Tengo un problema (convertidor a binario)
2 Septiembre 2012, 03:08 AM
Solo venía a avisar de que ya solucioné mi problema, de todas maneras muchas gracias por la intención :D
#78
Java / Tengo un problema (convertidor a binario)
2 Septiembre 2012, 01:42 AM
ESPEREN, NO LEAN TODAVIA EL CODIGO, TENGO UNOS ERRORES EPICOS PERO LO CORREGI, DESPUES SE LOS MANDO CORREGIDO PARA QUE AYUDEN EN MI PROBLEMA !!!!!!!!!



Quiero programar un conversor de numero decimal a binario de los 30 primeros numeros, a mi se me ocurrio con un String ir amontonando los restos al dividir por 2 (transformados en string eso si), pero me da un error en tiempo de ejecucion, aqui les dejo los errores y el codigo, ojala me puedan ayudar, cualquier sugerencia sera bienvenida ;), no se rian si encuentran algo ridiculo, tengo 15 y soy novato


El error que me sale es:

java.lang.NumberFormatException: For input string: ""
   at java.lang.NumberFormatException.forInputString(Unknown Source)
   at java.lang.Integer.parseInt(Unknown Source)
   at java.lang.Integer.parseInt(Unknown Source)
   at ejercicio10.calcularBinario(ejercicio10.java:25)
   at ejercicio10.main(ejercicio10.java:33)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

public class ejercicio10{
 
 public static int calcularBinario(int numero){
   
   String binario = "";
   int bin;
   boolean flag = true;
   int resto;
   int div;
   
   
   while(flag){
     
     div = numero/2;
     
     if(div != 0){
       numero = div;
       resto = numero%2;
       binario += Integer.toString(resto); //Para ir juntando los 0 o 1, concatenando
     }else{
       flag = false;
     }            
   }
   
   bin = Integer.parseInt(binario);
   
   return bin;
 }
 
 public static void main(String[]Args){
   
   for(int i=0; i<30; i++){
     int binario = calcularBinario(i);
     System.out.println(binario);
   }
   
 }
 
}