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 - rub'n

#601
En el constructor de la clase Celular puedes añadir un parámetro tipo Calculadora, o un setter.

Vía herencia también. Cuando llegue a la casa te ayudo más estoy en la caverna del curro.





Bien aquí vamos, vamos a usar Herencia con la palabra reservada extends en la clase Celular

Otra vía es por medio de interfaces


Investigar
  • herencia simple de clases
  • Uso de super
  • Modificador de acceso protected

[/list]
Código (java) [Seleccionar]
package foro;
import java.lang.Math.*;
import java.util.logging.Logger;

/**
* Clase Calculadora
*/
public class Calculadora {

   private String marca;
   private String modelo;
   private String sistemaOperativo;
   private String versionSistemaOperativo;

   public static final Logger LOGGER = Logger.getLogger(ProyectoCelular.class.getSimpleName());

   public Calculadora() {
       super();
   }

   public Calculadora(String marca, String modelo, String sistemaOperativo, String versionSistemaOperativo) {
       this.marca = marca;
       this.modelo = modelo;
       this.sistemaOperativo = sistemaOperativo;
       this.versionSistemaOperativo = versionSistemaOperativo;
   }

   /**
    *
    * @param a
    * @param b
    * @return La suma entre a y b
    */
   public float sumar(float a, float b) {
       return a + b;
   }

   /**
    *
    * @param a
    * @param b
    * @return La resta entre a y b
    */
   public float restar(float a, float b) {
       return a - b;
   }

   /**
    *
    * @param a
    * @param b
    * @return La multiplicación entre a y b
    */
   public double multiplicar(double a, double b) {
       if (a == 0 || b == 0) {
           return 0;
       } else {
           return a * b;
       }
   }

   /**
    *
    * @param a
    * @param b
    * @return La división entre a y b
    */
   public double dividir(float a, float b) {
       return a / b;
   }

   /**
    *
    * @param n
    * @return El factorial de un numero
    */
   public int factorial(int n) {
       if (n < 1) {
           return 1;
       } else {
           return n * factorial(n - 1);
       }
   }

   /**
    * @return the marca
    */
   public String getMarca() {
       return marca;
   }

   /**
    * @param marca the marca to set
    */
   public void setMarca(String marca) {
       this.marca = marca;
   }

   /**
    * @return the modelo
    */
   public String getModelo() {
       return modelo;
   }

   /**
    * @param modelo the modelo to set
    */
   public void setModelo(String modelo) {
       this.modelo = modelo;
   }

   /**
    * @return the sistemaOperativo
    */
   public String getSistemaOperativo() {
       return sistemaOperativo;
   }

   /**
    * @param sistemaOperativo the sistemaOperativo to set
    */
   public void setSistemaOperativo(String sistemaOperativo) {
       this.sistemaOperativo = sistemaOperativo;
   }

   /**
    * @return the versionSistemaOperativo
    */
   public String getVersionSistemaOperativo() {
       return versionSistemaOperativo;
   }

   /**
    * @param versionSistemaOperativo the versionSistemaOperativo to set
    */
   public void setVersionSistemaOperativo(String versionSistemaOperativo) {
       this.versionSistemaOperativo = versionSistemaOperativo;
   }

   @Override
   public String toString() {
       final StringBuilder sb = new StringBuilder("\nCalculadora");
       sb.append("\nmarca='").append(marca).append("\n");
       sb.append(", modelo='").append(modelo).append("\n");
       sb.append(", sistemaOperativo='").append(sistemaOperativo).append("\n");
       sb.append(", versionSistemaOperativo='").append(versionSistemaOperativo).append("\n");
       return sb.toString();
   }
}


Cuando establecemos herencia, de una clase con un constructor definido como el tuyo, debemos invocarlo con super() y si tiene parámetros setearselos
en este caso la clase celular tiene 2 atributos propios de ella, el color y precio, entonces, bastaría con dejar los setters/getters de color y precio, ya que los otros se heredan

La visibilidad de los atributos/variables de instancia, siendo protected tendrán visibilidad en el mismo paquete, para verlas desde otro paquete deben ser publicas, pero por convención en java, deberían ser en lo posible declaradas como private, accediendo a ellas via getters



Código (java) [Seleccionar]
package foro;

/**
* Clase Celular
*/
public class Celular extends Calculadora { // extendemos a Calculadora

   //private String marca;
   //private String modelo;  // estas dos variables no hacen falta, porque se heredan tambien
   private String  color;
   private double precio;

   /**
    * Nuevo constructor vacio
    */
   public Celular() {
       super(); // super invoca al constructor de la clase Calculadora
   }

   public Celular(String marca, String modelo, String color, double precio, String sistemaOperativo, String versionSistemaOperativo) {
       /**
        * con este super invocamos al constructor de la clase Calculadora, seteandole los parametros
        * correspondientes chavalina.
        */
       super(marca,modelo, sistemaOperativo,versionSistemaOperativo);
       this.color = color;
       this.precio = precio;
   }

   /**
    * @return the marca
    */
   public String getMarca() {
       return marca;
   }

   /**
    * @param marca the marca to set
    */
   public void setMarca(String marca) {
       this.marca = marca;
   }

   /**
    * @return the modelo
    */
   public String getModelo() {
       return modelo;
   }

   /**
    * @param modelo the modelo to set
    */
   public void setModelo(String modelo) {
       this.modelo = modelo;
   }

   /**
    * @return the color
    */
   public String getColor() {
       return color;
   }

   /**
    * @param color the color to set
    */
   public void setColor(String color) {
       this.color = color;
   }

   /**
    * @return the precio
    */
   public double getPrecio() {
       return precio;
   }

   /**
    * @param precio the precio to set
    */
   public void setPrecio(double precio) {
       this.precio = precio;
   }

   @Override
   public String toString() {
       final StringBuilder sb = new StringBuilder();
       sb.append(super.toString());
       sb.append("\ncolor='").append(color).append("\n");
       sb.append(", precio=").append(precio);
       return sb.toString();
   }
}


Código (java) [Seleccionar]
package foro;


public class ProyectoCelular {

   public static void main(String[] args) {
       // Esto es el main todavia no lo terminé

       final Celular celular = new Celular();
       /**
        * Configurando por medio de setters NO-THREAD-SAFE
        */
       celular.setColor("Rojo");
       celular.setMarca("Samsung");
       celular.setModelo("I9300");
       celular.setPrecio(200);
       celular.setSistemaOperativo("Android KitKat");
       celular.setVersionSistemaOperativo("4.4.4");

       /**
        * Todos ellos retornan un valor
        * que puedes mostrar con la consola o logger, logger es lo mas correcto
        */
       celular.factorial(2);
       celular.dividir(2,3);
       celular.sumar(2,3);
       celular.restar(5,1);
       celular.multiplicar(5,5);

       Calculadora.LOGGER.info(celular.toString());
   }

}



Estamos en presencia de un constructor telescópico, muchos parámetros a veces difícil de usar, coste de mantenimiento, legibilidad etc, patrón Builder es la solución.

A simple vista pensarías, bueno me creo otro constructor y le añado parámetros, pero vienes de nuevo y añades otro y así, nunca terminara, o este mismo contructor añadirle mas parámetros.

O la típica vía de usar setters, NO-THREAD-SAFE, es decir no Inmutable(Como String, StringBuffer, la api LocalDate del paquete java.time), si usas ese bean en un Thread podrian pasar cosas raras y difíciles de resolver.  >:D tema que, podemos tratar luego.


Código (java) [Seleccionar]
public Celular(String marca, String modelo, String color, double precio, String sistemaOperativo, String versionSistemaOperativo) {
       /**
        * con este super invocamos al constructor de la clase Calculadora, seteandole los parámetros
        * correspondientes chavalina.
        */
       super(marca,modelo, sistemaOperativo,versionSistemaOperativo);
       this.color = color;
       this.precio = precio;
   }


Recuerda retomar este hilo y estudiarlo bien , donde tienes otro ejemplo de herencia https://foro.elhacker.net/java/metodo_mostrar_todos_los_atributos_de_un_objeto_por_pantallaresuelto-t494141.0.html


En la clase Celular te puse unos bugs que debes de resolver, recuerda que hay métodos en la clase Celular que no te hacen falta, es decir, puedes quitarlos, debido a que los heredas
#602
Java / Re: pequeñas dudas de java
4 Abril 2019, 10:58 AM
Cita de: Beginner Web en  4 Abril 2019, 06:54 AM
Hola chicos, como puedo aprender mas rapido Java? que quiere decir cuando creo un metodo dentro de una clase principal como public static void me lo toma cuando lo llamo desde el main de esa clase pero cuando lo declaro como public void no me lo toma?


Leete un buen libro como deitel, saber buscar en Google,aprende bien lo básico pero bien.

Aquí coloque varios libros en Manuela de Java de Java

Y con respecto a los métodos estaticos y de objetos pues, es que ambos funcionan distinto. en el main puedes invocar a métodos estaticos, y los metodos no estaticos por medio de una Objeto creado que pueda invocar a su método correspondiente.

Y eso se da porque el metodo main es estatico en si.

Cosa distinta en un contructor, que puedes invocar sin mucho problema, muchos frameworks no tienen como entrypoint a el metodo main, sino que usan otros, y tambien contructores  ;D
#603
Cita de: NEBIRE en 31 Marzo 2019, 20:57 PM
Puedes hacerlo de modo procedimental o con clases, a tu gusto...

Si lo haces con clases, por ejemplo crearía una clase 'tablero', en el constructor se recibe las filas y columnas (o cantidad) si ambos valores serán iguales.
También un parámetro para indicar cuandos e considera el mundo muerto, es decir si hay 25x25 casillas (625 células, podría consdierarse muerto (por ejemplo), si quedna menos de 50), un valor de cero o menor, podría indicar que vive mientras queden células vivas...
Acto seguido se crea un array bidimensional de  NxM casillas...

int Filas, Columnas, MundoMuere

funcion New(int F, int C, int MM)
   filas = f
   columnas = C
   Si (MM < 0) luego MM=0)
   MundoMuere = MM

   dimensionar Mapa(filas, columnas)
fin funcion

ó:
funcion New(int Casillas)



Una enumeración de 2-3 estados. Celula viva = '*' , célula muerta = ' ', celula 'enferma' = '-' (caso de que quisieras complicarlo y que una célula necesitara x estados (por ejemplo 1, y al siguiente muere) seguidos de transición por debajo del umbral de vida). es decir si no tiene los vecinos esperados y está viva, enferma, pero si está enferma muere.
enumeración EstadoCelula
  ESTADO_VIVA = 0
  ESTADO_ENFERMA = 1  ' de 1 a 8, podría alojar 8 transiciones antes de morir, o pasar directamente del 1 al 9, o del 0 al 9
  ESTADO_MUERTA = 9
FIN ENUMERACION


Un array con los valores a dibujar (char/string)

char  representa(0 a 9)
// con estos valores
   representa(0) = "*"  // viva
   representa(1) = "-"  //enferma
   // representa(2) = "-"
   //...  si se prefieriese dibujar estados de enfermedad diferentes o todos con '1'
   representa(9) = " " //muerta
 // tambén se puede hacer otro array con colores, para dibujar de diferente color vivas de 'enfermas'.

Otra enumeración de los valores de transicion:
(Tu pon los valores que quieras, de hecho es bueno modificarlos, para ver como se comporta).
enumeracion Transicion
   TR_MUERE_INANICION = 1 // con 3 o menos células muere.
   // TR_VIVE = 2,3,4,5,6  / se entiende que viven con el rango dentro de ambos extremos.
   TR_MUERE_SOBREPOBLACION = 7
fin enumeracion


Una estructura retiene el estadO (de esos valores enumerados) y el recuento de vecinos.

Estructura DatosDeCelula
   EstadoCelula Estado
   Transicion NumVecinos
fin estructura

Array de DatosDeCelula Mapa()



Una función se encarga de contar los vecinos, para cada célula:
Funcion ContarVecinos()
   int i, j, k, n

   bucle para j desde 0  a filas-1
       bucle para k desde 0 a Columnas -1
           Mapa(j,k).Vecinos = ContarMisVecinos(j,k)
       siguiente
   siguiente
fin funcion

// contar los vecinos para esta célula...
Transicion = funcion ContarMisVecinos(int fila, int Columna)  
   int x, y, w, h
   int j, k
   Transicion vecinos

   Si (fila <2)    // tiene 1 o 0 vecinos a la izquierda
        x = 0
        w = fila + 2
   Si (fila > filas-3)  // tiene 1 ó 0 vecinos a la derecha
        x= fila - 2
        w = filas -1
   sino
        x= fila - 2
        w = fila + 2
   fin si

   Si (columna <2)    // tiene 1 o 0 vecinos arriba
        y = 0
        h = columna + 2
   Si (columna > Columnas-3)  // tiene 1 ó 0 vecinos abajo
        y = columna - 2
        h = columnas -1
   sino
        y = columna - 2
        h = columna + 2
   fin si

   bucle para j desde y hasta h
       bucle para k desde x hasta w
           Si (mapa(j,k).estado = ESTADO_VIVA ) luego  vecinos +=1
       siguiente
   siguiente

   devolver vecinos
fin funcion


Luego otra función que actualice el estado en base a sus vecinos:

funcion UpdateMapa
   int j, k, vivas

   bucle para j desde 0 a filas -1
       bucle para k desde 0 hasta columnas -1
           si (Mapa(j,k).vecinos <= TR_MUERE_INANICION)
           o si (Mapa(j,k).vecinos <= TR_MUERE_SOBREPOBLACION)  // es una sola línea con la anterior, queda cortada en 2 por ser larga...
               mapa(j,k).estado = ESTADO_MUERTA
           si no  // hay que señalarla viva, porque antes podría estar muerta
               mapa(j,k).estado = ESTADO_VIVA
               vivas +=1
           fin si

           // char que representa el estado, fila, columna, color
           Dibujar(representa(mapa(j,k).estado ) ,j, k , color)
       siguiente
   siguiente

   Si (vivas <= MundoMuere) luego
       finpartida // no quedan células suficientes...
   fin si
fin funcion


Y una función dibujar para dibujar cada casilla (si no es muy complejo lo que deba hacer, puede subsumirse en la función anterior... (en 'dibujar...').

Básicamente eso es lo principal, generar las células al azar al comienzo de la partida, y algún otro detalle resulta ya nimio...

p.d.: Se me olvidada... al contar los vecinos, debe descontarse 1, si la célula en cuestión esta 'viva' (ella no debe contarse como su vecina). Es más fácil el doble bucle sin considerarla y luego descontarla que filtrarlo en el propio bucle (pués sucede 1 de las hasta 9 veces por cada casilla).

Interesante respuesta doc, vere si tengo un tiempo para mudarlo a Java  >:D
#604
Casi casi lo tiene dog  :xD, recorrer con doble ciclo for como haces con el método suma, porque debes recorrer cada indice, me da aburrimiento máximo llenarla, pero aleatoria nom y así ahorras tiempo en desarrollo, no apto para produccion  :xD

Pero me imagino que entiendes no? ejemplo las coordenada [0,0] de la matris1 se sumara con la [0,0] de la matris 2 y asi

Código (java) [Seleccionar]
public class Bidimensional {

private double[][] matriz;
private int renglones;
private int columnas;
private static final SecureRandom SR = new SecureRandom();
private static final DecimalFormat TWO_DIGITS = new DecimalFormat("#.##");

public Bidimensional(int renglones, int columnas) { // constructor y pido el ingreso de valores a matrices
Scanner entrada = new Scanner(System.in);
this.matriz = new double [renglones][columnas];

for(int i=0 ; i<renglones; i++)
{
for(int j=0; j<columnas; j++) {
matriz[i][j]= Double.valueOf(TWO_DIGITS.format(1 + SR.nextDouble()));
System.out.print("Ingresar el numero de matriz ["+i+":"+j+"]: ");
System.out.println(matriz[i][j]);

}
}
}

public double[][] suma(Bidimensional m2) // operacion de suma
{
for(int i=0; i<2; i++) {
for(int j=0; j<2; j++)
{
matriz[i][j]= matriz[i][j] + m2.matriz[i][j];
}
}

return matriz;
}
       
       public double format(final double num) {
           return Double.valueOf(TWO_DIGITS.format(num).replace(",", "."));
       }

public static void main(String ...blalba) {

final Bidimensional matris = new Bidimensional(2,2);
final Bidimensional matris2 = new Bidimensional(2,2);

final double[][] resultado = matris.suma(matris2);
//Recorrer el Array de doble dimension, con java 8, java 7 usa doble for
Arrays.stream(resultado)
.flatMapToDouble(Arrays::stream)
                               .map(this::format)
.forEach(System.out::println);

}
}


Código (bash) [Seleccionar]
Ingresar el numero de matriz [0:0]: 1.32
Ingresar el numero de matriz [0:1]: 1.8
Ingresar el numero de matriz [1:0]: 1.62
Ingresar el numero de matriz [1:1]: 1.71
Ingresar el numero de matriz [0:0]: 1.53
Ingresar el numero de matriz [0:1]: 1.6
Ingresar el numero de matriz [1:0]: 1.6
Ingresar el numero de matriz [1:1]: 1.57
2.85
3.4
3.22
3.28

Process finished with exit code 0


Tambien te sirve asi, y cualquier otra manera que funcione XD

Código (java) [Seleccionar]

public double[][] suma(Bidimensional m2) // operacion de suma
{
for(int i=0; i<matriz.length; i++) {
for(int j=0; j<m2.matriz[i].length; j++)
{
matriz[i][j]= matriz[i][j] + m2.matriz[i][j];
}
}
   return matriz;
}


Y asi


Código (java) [Seleccionar]
for(int i=0; i<matriz.length; i++) {
 for(int j=0; j<matriz[i].length; j++) {
matriz[i][j]= matriz[i][j] + m2.matriz[i][j];
 }
}

#605
Cita de: CalgaryCorpus en 30 Marzo 2019, 15:55 PM
No deberias gastar tiempo en escribir los getters / setters o el metodo toString(). Los editores deberian hacerlo por ti. IntelliJ lo hace, al menos.

Otra alternativa es ni siquiera escribir el codigo, sino anotar la clase y que magicamente esos metodos se escriban y existan aunque no los veas. AutoValue y Lombok son 2 exponentes de esto.

Magicamente? o gracias a Reflection vía anotaciones? generando codigo en runtime, la chavala esta aprendiendo, por eso mi ejemplo.

Aunque me falto decirle eso. yo genere getters/setters/toString() con intelliJIDea, eclipse también lo hace, netBeans me imagino que también debería.

@CalgaryCorpus seria bueno que le pusieras un ejemplo de Project Lombok para que la ayudes.

Y de paso ah dia de hoy grandes Frameworks webs de java, potentes, tienen su implementacion de toString() sin api de terceros como lombok entre otras, de paso que toString() sirve para no mostrar el codigo hash directamente a alguien que espie dichos objetos.


@Beginner Web , creas las variables de instancia que quieras, luego, teclas Alt + insertar, debería aparecerte este cuadro de contexto con las opciones que se muestran, no aparece toString() porque ya lo use, versión de NetBeans que tengo

   * Product Version: NetBeans IDE 8.2 (Build 201610071157)



#606
Cita de: Beginner Web en 30 Marzo 2019, 02:31 AM
//Este es una clase
public class Persona{
private String nombre;
private int edad;

Constructor va aquí
Getters & Setters aquí
}

//Este es el main
public class Personal{

public static void main(){
Persona objeto1=new Persona("Ana",14);

//Esto es algo tedioso de hacer varios objetos de distintas clases
//Podia crear un metodo en la clase Persona que muestre todo, pero quiero saber si hay otra técnica por defecto
sout para mostrar el nombre de objeto1;
sout para mostrar la edad de objeto1;

}

}


Me parece que me conviene crear metodos en las clases para pedir los datos y otro para mostrarlos asi escribo menos en el main


Que tal chavalina? Usa Geshi



Si hay mejores maneras de hacerlo por ejemplo una, lo que necesitas es algo de herencia simple

Código (java) [Seleccionar]

import java.util.logging.Logger;

/**
*
*/
@FunctionalInterface
public interface IPersonal {

   Logger LOGGER =Logger.getLogger(IPersonal.class.getSimpleName());

   void introducirDatos();

   default <T> void mostrar(final T value) {
       System.out.println(value);
   }

   /**
    * usar dentro de un metodo estatico
    * @param value
    * @param <T>
    */
   static <T> void mostrar2(final T value) {
       System.out.println(value);
   }

   default <T> void log(final T t) {
       LOGGER.severe(t.toString());
   }

   /**
    * usar dentro de un metodo estatico
    * @param t
    * @param <T>
    */
   static <T> void log2(final T t) {
       LOGGER.severe(t.toString());
   }
}


Código (java) [Seleccionar]

import java.util.Objects;
import java.util.Scanner;

/**
*
*/
public abstract class AbstractBasePersona implements IPersonal {

   protected String nombre;
   protected int edad;
   protected static final Scanner LEER = new Scanner(System.in);

   public AbstractBasePersona() {
       this.edad = 0;
       this.nombre = "";
   }

   public AbstractBasePersona(final String nombre, final int edad) {
       this.nombre = Objects.requireNonNull(nombre,"Nombre no debe ser null");
       this.edad = Objects.requireNonNull(edad,"Edad no debe ser null");
   }

   public String getNombre() {
       return nombre;
   }

   public void setNombre(String nombre) {
       this.nombre = nombre;
   }

   public int getEdad() {
       return edad;
   }

   public void setEdad(int edad) {
       this.edad = edad;
   }

   @Override
   public void introducirDatos() {
       mostrar("Introduce nombre: ");
       nombre = LEER.next();
       //bug scanner
       LEER.nextLine();
       mostrar("Introduce edad");

       while(!LEER.hasNextInt()) {
           LEER.next();
           mostrar("Valor invalido!, solo numeros");
       }
       edad = LEER.nextInt();

   }

   @Override
   public String toString() {
       final StringBuilder sb = new StringBuilder("\nPersona");
       sb.append("\nNombre: ").append(nombre).append("\n");
       sb.append("Edad: ").append(edad);
       return sb.toString();
   }


}



Código (java) [Seleccionar]

public class PersonalDeInformatica extends AbstractBasePersona {

   private boolean esDeInformatica;

   public PersonalDeInformatica() {
       super();
   }

   public PersonalDeInformatica(final String nombre,final int edad, boolean esDeInformatica) {
       super(nombre,edad);
       this.esDeInformatica = esDeInformatica;
   }

   @Override
   public void introducirDatos() {
       /**
        * Introducir los datos basicos por defecto, Nombre y Edad
        */
       super.introducirDatos();

       // pedimo si es personal de informatica

       mostrar("Personal del Informtica ?");
       esDeInformatica = LEER.nextBoolean();

       //setemos el tipo de persona
       setEsDeInformatica(esDeInformatica);
   }

   public boolean isEsDeInformatica() {
       return esDeInformatica;
   }

   public void setEsDeInformatica(boolean esDeInformatica) {
       this.esDeInformatica = esDeInformatica;
   }

   @Override
   public String toString() {
       final StringBuilder sb = new StringBuilder();
       sb.append(super.toString());
       sb.append("\nEs de informatica ? ").append(esDeInformatica);
       return sb.toString();
   }
}



Código (java) [Seleccionar]

/**
*
*/
public class PersonalDeLimpieza extends AbstractBasePersona {

   private boolean esDeLimpieza; //por defecto la variable de instancia boolean, es false

   public PersonalDeLimpieza() {
       super();
   }

   public PersonalDeLimpieza(final String nombre, final int edad, final boolean esDeLimpieza) {
       super(nombre,edad);
       this.esDeLimpieza = esDeLimpieza;
   }

   public boolean isEsDeLimpieza() {
       return esDeLimpieza;
   }

   public void setEsDeLimpieza(boolean esDeLimpieza) {
       this.esDeLimpieza = esDeLimpieza;
   }

   @Override
   public void introducirDatos() {
       //invocamo al introducir datos de la superClaseAbstracta
       super.introducirDatos();

       // pedimo si es personal de limpieza

       mostrar("Personal del limpieza ?");
       esDeLimpieza = LEER.nextBoolean();

       //setemos el tipo de persona
       setEsDeLimpieza(esDeLimpieza);

   }

   @Override
   public String toString() {
       final StringBuilder sb = new StringBuilder();
       sb.append(super.toString());
       sb.append("\nPersonal de Limpieza ? ").append(isEsDeLimpieza()).append("\n");
       return sb.toString();
   }

}




Código (java) [Seleccionar]

import java.util.LinkedList;

/**
*
*/
public class Principal {

   private final LinkedList<IPersonal> iPersonalLinkedList = new LinkedList<>();


   public Principal() {
       init();
   }

   private void init() {

       final PersonalDeLimpieza personalDeLimpieza = new PersonalDeLimpieza();
       personalDeLimpieza.introducirDatos();

       final PersonalDeInformatica personalDeInformatica = new PersonalDeInformatica();
       personalDeInformatica.introducirDatos();

       /**
        * Anadimos a todos los objetos que extienden/implementan a IPersonal
        * para procesarlos de manera polimorfica gracias, a que cada uno,
        * sobreEscribe a toString().
        */
       iPersonalLinkedList.add(personalDeLimpieza);
       iPersonalLinkedList.add(personalDeInformatica);

       /**
        * Se invocara al metodo toString() de cada Objeto, implicitanmente
        */
       //java 8
       iPersonalLinkedList.forEach(e -> e.mostrar(e));

       //java 7
       /*for(IPersonal tmp : iPersonalLinkedList) {
           tmp.mostrar(tmp.toString());
       }*/

   }

   public static void main(String ...blabla) {
       new Principal();
   }
}


Salida

Código (bash) [Seleccionar]
Introduce nombre:
Ana
Introduce edad
14
Personal del limpieza ?
false
Introduce nombre:
rubn
Introduce edad
30
Personal del Informtica ?
true

Persona
Nombre: Ana
Edad: 14
Personal de Limpieza ? false


Persona
Nombre: rubn
Edad: 30
Es de informatica ? true

Process finished with exit code 0


Un ejemplo sencillo, luego chekeate el patrón Builder  >:D , y Abstract Generic Builder , con interfaces también (te aseguro que te gustara, y trabajaras mejor con inmutabilidad)
#607
Seguridad / Re: localizar celular por imei
30 Marzo 2019, 14:38 PM
Cita de: scala1426 en 29 Marzo 2019, 23:31 PM
me robaron mi celular lo puedo encontrar mediante mi imei

Anda donde tu operador, y reportalo como robado, pero quizás ese maleante o X, pueda reparar ese imei y pueda usarlo siendo mas fácil en Android, en IOs tendría que cambiar la nandFlash donde esta la configuración del imei, pero no lo creo de verdad.
#608
Cita de: Beginner Web en 30 Marzo 2019, 01:57 AM
Buenas mi duda era si habia alguna forma de mostrar todos los atributos de un objeto, porque la verdad me canse de escribir mucho sout y llamar a los metodos Getters, alguna técnica porfis   :-(

Puedes sobreescribir el metodo toString() ,pero como tienes el código?
#609
Java / Re: Clase Lista
28 Marzo 2019, 17:37 PM
Cita de: Beginner Web en 28 Marzo 2019, 16:41 PM
Seguro? no te faltó algo a la hora de declarar la lista de Persona?  :huh:

:-\ estoy 90% seguro que no probaste el ejemplo, o no hiciste el import bien, que este último no lo creo.

Y eso que lo escribo desde mi Android .

El operador diamante puede ir vacío también, como con el objeto en el, pero siendo redundante, o sea,


Código (java) [Seleccionar]
final LinkedList<Persona> lista = new LinkedList<Persona>(); // redundante
#610
Java / Re: Clase Lista
28 Marzo 2019, 07:07 AM
Cita de: Beginner Web en 28 Marzo 2019, 02:51 AM
Hola tengo una duda como hago para crear una LinkedList(); de objetos?

Crea tu javabean primero , la típica clase con setters y getters, y luego usas el método add() de la list  :D

Código (java) [Seleccionar]

final LinkedList<Persona> list = new LinkedList<>();
list.add(new Persona("Beginner","web",14));


El Bean persona con 3 atributos, 2 String , y un int o Integer, faltarían los setters y getters para acceder a dichos atributos, ojo los setters quitan inmutabilidad a un objeto haciendo que no sean aptos para un ambiente de concurrencia, si es inmutable tu bean, o sea:

 * Clase con final (public final class Persona) para que no se pueda heredar.
 * Sin setters
 * Variables de instancia con final
  - y puedes añadir por comodidad una clase estática dentro Aka Builder/AbstractoGenerico para inicializar sus variables de instancia pues mucho mejor, ya que este te creará una copia mutable de Persona con la que puedes trabajar.