elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ... 70
91  Foros Generales / Foro Libre / Re: Explica tu avatar en: 7 Junio 2015, 17:11 pm
Creo que mi avatar no necesita explicación  ;D. Para los que no lo sepan, es el logo del movimiento open source. Me gusta hacer que mis apps comerciales o no, sean open source.


Saludos.
92  Programación / Java / Re: Ayuda con un codigo de java? en: 7 Junio 2015, 17:08 pm
Código
  1. public class Disk {
  2.    private String name;
  3.    private String author;
  4.    private Date pubDate;
  5.    private String genre;
  6.    private float price;
  7.    private List<Song> songs;
  8.  
  9.    public Disk() {}
  10.    public Disk(String name, String author, Date pubDate, String genre,
  11. float price, List<Song> songs) {
  12. this.name = name;
  13. this.author = author;
  14. this.pubDate = pubDate;
  15. this.genre = genre;
  16. this.price = price;
  17. this.songs = songs;
  18.    }
  19.  
  20.    // getters y setters
  21.  
  22.    @Override
  23.    public String toString() {
  24.        String data = "Nombre: " + name +
  25.    "\nAutor: " + author +
  26.    "\nF. Publicación: " + pubDate +
  27.    "\nGénero: " + genre +
  28.    "\nPrecio: " + price + "\n";
  29. String songsData = "Canciones: \n";
  30.        for(Song song : songs) {
  31.    songsData +=
  32. "Nombre: " + song.getName() +
  33. "Duración: " + song.getDuration() +
  34. "Artistas extras: " + song.getExtrasArt() +
  35. "Año: " + song.getYear();
  36. }
  37. data += songsData;
  38. return data;
  39.    }
  40. }

Código
  1. public class Song {
  2.    private String name;
  3.    private String duration;
  4.    private String year;
  5.    private String extrasArt = "Ninguno";
  6.  
  7.    public Song() {}
  8.    public Song(String name, String duration, String year,
  9. String extrasArt) {
  10. this.name = name;
  11. this.duration = duration;
  12. this.year = year;
  13. this.extrasArt = extrasArt;
  14.    }
  15.    // getters y setters
  16. }

Código
  1. public class DiskManager {
  2.    private final static Scanner READER;
  3.    static { READER = new Scanner(System.in); }
  4.  
  5.    public static Disk newDisk(List<Song> songs) {
  6. System.out.println("Escribe los datos del disco en el siguiente orden:\n");
  7. System.out.println("1. Nombre\n2.Autor\n3.F. publicación\n4.Género\n5.Precio");
  8.  
  9. String discName;
  10. String author;
  11. Date pubDate;
  12. String genre;
  13. float price;
  14.  
  15. discName = READER.nextLine();
  16. author = READER.nextLine();
  17. pubDate = new SimpleDateFormat("dd-MM-yyyy").parse(READER.next());
  18. genre = READER.nextLine();
  19. price = READER.nextFloat();
  20.  
  21. return new Disk(discName, author, pubDate, genre, price, songs);
  22.    }
  23.    public static List<Song> newSongs() {
  24. List<Song> songs = new ArrayList<>();
  25.  
  26. System.out.println("¿Cuántas canciones desea añadir?");
  27. Byte songsQuantity = READER.nextByte();
  28.  
  29. for(byte i=0; i<songsQuantity; i++) {
  30.    System.out.println("Ingrese los datos en el siguiente orden:\n");
  31.    System.out.println("1. Nombre\n2. Duración\n3. Año\n4. Artistas extras");
  32.  
  33.    String songName;
  34.    String duration;
  35.    String year;
  36.    String extrasArt;
  37.  
  38.    songName = READER.nextLine();
  39.    duration = READER.next();
  40.    year = READER.next();
  41.    extrasArt = READER.nextLine();
  42.  
  43.    songs.add(new Song(songName, duration, year, extrasArt));
  44. }
  45. return songs;
  46. }
   
Código
  1. public static void main(String[] args) {
  2.    List<Disk> disks = new ArrayList<>();
  3.  
  4.    /* Registrar discos */
  5.    System.out.println("¿Cuántos discos desea registrar?");
  6.    byte discQuantity = reader.nextByte();
  7.  
  8.    /* Registra info del disco */
  9.    for(byte i=0; i<discQuantity; i++) {
  10. List<Song> songs = DiskManager.newSongs();
  11.        Disk disk = DiskManager.newDisk(songs);
  12. disks.add(disk);
  13.    }
  14.  
  15.    /* Mostrar información del CD */
  16.    for(Disk disk : disks) {
  17. System.out.println("[+] Información del disco:\n\n");
  18. System.out.println(disk);
  19.    }
  20. }

El método toString() es heredado de Object, lo que quiere decir que todo objeto hereda el método toString(). Éste método es llamado automáticamente cuando se detecta que un objeto está queriendo ser imprimido por el flujo de salida estándar de la clase System, así, se llama automáticamente al método toString() devolviendo éste lo que se ha programado.

La anotación @Override, significa que estás sobreescribiendo ese método. Es decir, al método ya existente que ha heredado, le añade funcionalidad. Esto quiere decir, que está sobreescrito, personalizado.

Puedes simular una BBDD también haciendo uso de NavigableMap. No lo hice para que no te confundas. Cualquier duda, la expones.


Saludos.

PD: Es muy probable que el código tenga errores porque lo he hecho rápido en un editor sencillo.
93  Programación / Java / Re: Acceder a atributo de subclase en: 6 Mayo 2015, 15:42 pm
Ejemplo práctico:

Queremos crear conductores y guardarlos en una lista. Éstos conductores pueden ser de 2 tipos, taxistas o choferes de transporte público. También se deberá recuperar los tipos de conductores de la lista.

Código
  1. public class Conductor {
  2.    private Integer id;
  3.    private String names;
  4.    private String surnames;
  5.    private String dni;
  6.  
  7.    public Conductor() {}
  8.    public Conductor(Integer id, String names, String surnanes,
  9. String dni) {
  10. this.id = id;
  11. this.names = names;
  12. this.surnames = surnames;
  13. this.dni = dni;
  14.    }
  15.    // getters y setters
  16. }
  17.  

Código
  1. public class Taxista extends Conductor {
  2.    private String placaAuto;
  3.    private String horario;
  4.  
  5.    public Taxista() {}
  6.    public Taxista(Integer id, String names, String surnames,
  7. String dni, String placaAuto, string horario) {
  8. super(id, names, surname, dni);
  9. this.placaAuto = placaAuto;
  10. this.horario = horario;
  11.    }
  12.    // getter y setter
  13.    /* si usan getters y setters para los atributos heredados, llamarlos así:
  14.        super.setId(id); // set
  15.        return super.getId(); // get
  16.     */
  17. }
  18.  

Código
  1. public class ConductoresBD {
  2.    private static final List<Conductores> conductores;
  3.    static {
  4. conductores = new ArrayList<>();
  5.    }
  6.    public void insert(Conductor c) {
  7. conductores.add(c);
  8.    }
  9.    public void remove(Conductor c) {
  10. conductores.remove(c);
  11.    }
  12. }

Ahora, hagamos una clase de prueba:

Código
  1. public class Main {
  2.    public static void main(String[] args) {
  3. final ConductoresBD conductores = new Conductores();
  4. Taxista taxista = new Taxista(1, "Juan Manuel", "Figueroa Orellana",
  5. "45930168", "ZK-34539", "A");
  6. conductores.insert(taxista);
  7.  
  8. Conductor c = conductores.get(0);
  9. Taxista retrieved = null;
  10.        if(c instanceof Taxista) {
  11.    retrieved = (Taxista) c;
  12. }
  13. }

La pregunta surge cuando recuperamos los tipos de conductores de la lista, ¿cómo sé qué tipo de objeto he recuperado? Para ésto nos ayudará el operador instanceof:

Código
  1. if(c instanceof Taxista) { /* ... */ }

Lo que el operador instanceof hace es comprobar si el objeto de la izquierda es del mismo tipo que el de la derecha:

Citar
¿c es de tipo Taxista?

La respuesta es afirmativa. Por lo tanto, podemos hacer un casting (convertir) del objeto padre hacia el objeto hijo:

Código
  1. Taxista retrieved = (Taxista) c;

Y podemos usar los métodos de Taxista:

Código
  1. retrieved.setPlacaAuto("TK-45905");
  2. retrieved.setHorario("C");


Espero se haya entendido el mensaje. Saludos.
94  Programación / Java / Re: Problema puertos Apache Tomcat 7.0 en: 6 Mayo 2015, 15:12 pm
Ve al directorio de Tomcat. Localiza el folder config y entra allí. Allí encontrarás un archivo llamado server.xml, parecido a éste:

Código
  1. <!-- Define a non-SSL HTTP/1.1 Connector on port 8180 -->
  2.    <Connector port="8080" maxHttpHeaderSize="8192"
  3.               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
  4.               enableLookups="false" redirectPort="8443" acceptCount="100"
  5.               connectionTimeout="20000" disableUploadTimeout="true" />

Lo único que tienes que hacer es cambiar el valor del atributo port que por defecto está en 8080, por otro, por ejemplo, 9999, 6543, etc.
95  Programación / Java / Re: Valor booleano como String ? en: 25 Abril 2015, 20:25 pm
Tu código es correcto Thryks.

Si estuvieran aplicando POO, ésto se haría más sencillo:

Código
  1. public class User {
  2. private String name;
  3. private Character type;
  4.  
  5. public User() {
  6.  
  7. }
  8. public User(String name, Character type) {
  9. this.name = name;
  10. this.type = type;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public Character getType() {
  19. return type;
  20. }
  21. public void setType(Character type) {
  22. this.type = type.toLowerCase();
  23. }
  24. @Override
  25. public String toString() {
  26. return "Nombre: "+name+"\nTipo: "+(type == 'p') ? "Premium" : "Normal";
  27. }
  28. }

Código
  1. Scanner reader = new Scanner(System.in);
  2. User user = new User();
  3. System.out.print("Ingrese su nombre: ");
  4. user.setName(reader.nextLine());
  5. System.out.print("\nTipo de usuario (P/Premium - N/Normal): ");
  6. user.setPremium(reader.next().charAt(0););
  7. // mostrar la info del usuario
  8. System.out.println("\nInfo del usuario:"+user); // llamada automática a toString()


Saludos.
96  Programación / Java / Re: Valor booleano como String ? en: 25 Abril 2015, 19:29 pm
Eso se llama operador ternario. Es como un if, pero compacto y sin la palabra clave if.

es lo mismo que hicieras:

Código
  1. if(tipo) {
  2.    System.out.println("Tipo: Premium");
  3. } else {
  4.    System.out.println("Tipo: Normal");
  5. }

Con el operador ternario:

Código
  1. System.out.println("Tipo: "+((tipo) ? "Premium" : "Normal"));


Saludos.
97  Programación / Java / Re: Valor booleano como String ? en: 25 Abril 2015, 18:48 pm
Dado que el campo tipo del objeto es boolean, entonces, ¿cómo piensas mostrar Premium o Normal? Es por ésto que debes hacer la condición. No hay ninguna forma de convertir un boolean a String.

Ésto:

Código
  1. (tipo) ? "Premium" : "Normal"

Debes de colocarlo en donde vas a mostrar el tipo (Premium o Normal), ya sea en una impresión por consola, o en un JTable, en un JList, o donde vayas a mostrar ese dato.

98  Programación / Java / Re: Valor booleano como String ? en: 25 Abril 2015, 18:33 pm
Simplemente al mostrar el valor premium coloca una condición:

Código
  1. System.out.println("Tipo: "+((tipo) ? "Premium" : "Normal"));

Si tipo es true se ejecuta el primer bloque, si es false, el segundo.
99  Programación / Java / Re: Consulta JavaFx en: 23 Abril 2015, 15:59 pm
Hola,

Cuando JavaFX nació (no JavaFX script), se creaban las GUI's con código Java, como en el caso de Swing. Luego, con versiones posteriores de JavaFX, se creó un lenguaje basado en XML que se llama FXML. Ésta forma de crear GUI's es mucho más práctica y eficiente desde el punto de vista de delegación de actividades y la fácil implementación del patrón MVC.

Cuando creas una aplicación JavaFX con FXML, tienes en primera instancia 2 capas: Vista y Controlador. Por ejemplo:

Código
  1. <AnchorPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="net.elhacker.javafxdemo.controllers.HelloWorldController">

Fíjate en el atributo fx:controller. Aquí, debes de indicar la ruta del controlador de dicha vista. En el caso, anterior:

Código
  1. package net.elhacker.javafxdemo.controllers;
  2.  
  3. public class HelloWorldController { /* ... */ }

Ahora, la forma de referenciar los controles FXML en el controlador, se hace a base de identificadores y anotaciones. Por ejemplo, en el FXML tienes un botón:

Código
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <?import javafx.scene.control.*?>
  4. <?import java.lang.*?>
  5. <?import javafx.scene.layout.*?>
  6.  
  7. <StackPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
  8. fx:controller="net.elhacker.javafxdemo.controllers.HelloWorldController">
  9.   <children>
  10.      <Button fx:id="btnHello" mnemonicParsing="false" text="Click me!" />
  11.   </children>
  12. </StackPane>

Fíjate en el atributo fx:id, su valor identifica al elemento. Por ello, podemos referenciarlo en nuestro controlador muy fácilmente:

Código
  1. public class HelloWorldController {
  2. @FXML private Button btnHello;
  3. }

Para asignarle un método cuando se produzca un evento en el botón, solo debemos especificar el atributo onAction="#nombremétodo":

Código
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <?import javafx.scene.control.*?>
  4. <?import java.lang.*?>
  5. <?import javafx.scene.layout.*?>
  6.  
  7.  
  8. <StackPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
  9. fx:controller="net.elhacker.javafxdemo.controllers.HelloWorldController">
  10.   <children>
  11.      <Button mnemonicParsing="false" text="Click me!" onAction="#btnHelloAction" />
  12.   </children>
  13. </StackPane>

Y en nuestro controlador:

Código
  1. public class HelloWorldController {
  2. @FXML private Button btnHello;
  3.  
  4. @FXML public void btnHelloAction(ActionEvent e) {
  5. // hacer algo
  6. }
  7. }


Usar FXML es la mejor forma de trabajar con JavaFX. Además, es la forma recomendada por Oracle.


Saludos.
100  Foros Generales / Dudas Generales / Re: TEMA SERIO: Nombre en página web en: 23 Abril 2015, 15:33 pm
Si no me equivoco, ésto es porque no se ha actualizado la caché de Google para con aquella web. Si no quieres que aparezca en Google, tienes que enviar una solicitud para que sea removida esa información.

Más información: https://support.google.com/webmasters/answer/1663691?hl=es
Páginas: 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ... 70
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines