Mostrar Mensajes

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


Mensajes - Jorge lopez

Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13
121
Aprender a programar desde cero / Re:(CU00639B)
« en: 29 de Septiembre 2014, 21:10 »
Lo veo todo correcto! Puedes continuar avanzando Alex.

Saludos!

122
Aprender a programar desde cero / Re:ejercicio java
« en: 29 de Septiembre 2014, 20:16 »
 Hola Susana83!

Mirando tu codigo se nota que has estudiado sobre la clase Iterator, también puedo ver que has sustituido el bucle for each por un bucle while en conjunto con Iterator y algunos de sus métodos.

Aunque hasta este punto aun el código no funciona como se espera, por el hecho de a ver sustituido el bucle for-each por un bucle while, y haciendo uso de algunos métodos de la clase Iterator en este bucle, se puede decir que tu código a evolucionado en la dirección correcta.

Ahora te are algunas aclaraciones para que seas capas de comprender el porque del error (java.util.ConcurrentModificationException) en tiempo de ejecución que nos continua saltando al ejecutar el programa, y para que una vez lo asimiles puedas corregirlo.

Cuando recorremos una coleccion digamos que con un bucle for-each y mientras la recoremos intentamos manipular la lista nos salta el error java.util.ConcurrentModificationException, para corregir esto usamos el método iterator de la clase Iterator sobre la coleccion que queramos recorrer y manipular al mismo tiempo, pero los métodos de manipulación los provee la clase Iterator y se invocan desde el Iterator creado, en este caso "recorrer". Por tanto una sintaxis como:
Código: [Seleccionar]
if (nombre.equals("Barney")) {
        list.remove("Barney");
      }
dara lugar a que salte el error java.util.ConcurrentModificationException, la sintaxis correcta seria:
Código: [Seleccionar]
if (nombre.equals("Barney")) {
        recorrer.remove();
      }

Donde lo que se indica es, que si el ultimo objeto analizado en el Iterator "recorrer" es igual (igualdad, parentesco) al objeto "Barney" pues que se ejecute el metodo.remove(); y elimine este objeto, dicha eliminación se refleja en el ArrayList "list".

Si ahora utilizas un bucle for-each para recorrer y mostrar por pantalla los elementos (objetos) que contiene la colección "list" comprobaras que ahora "Barney" ha sido expulsado (removido, eliminado  ;D) de la familia Simpson, y que ahora esta lista contiene solo 5 objetos.

A continuación te dejo una forma que podría ser una solución a este ejercicio:

Código: [Seleccionar]
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

public class Ejecutar{
  public static void main(String args[]) {
    List<String> list = new ArrayList<String>();

    list.add("Bart");
    list.add("Lisa");
    list.add("Marge");
    list.add("Barney");
    list.add("Homer");
    list.add("Maggie");

    Iterator<String> recorrer = list.iterator();
   
    while (recorrer.hasNext())
    {
      String nombre = recorrer.next();
      if (nombre.equals("Barney")) {
        recorrer.remove();
      }else
      if(nombre != "Barney"){System.out.println(nombre);}/* Si no se incluye esta condición, pues también se imprimirá "Barney" puesto que la variable (nombre) hasta que
      no se inicie el siguiente ciclo, luego de la eliminación de "Barney" en la colección "list" mediante el Iterator "recorrer" tiene como valor "Barney"
     
      Esto es una solución alternativa para mostrar por pantalla los elementos de la colección, así que podrían considerarse otras opciones.*/
    }
    System.out.println("\nEsta colección ahora contiene: " + list.size() + " objetos." );
  }
}

Te recomiendo que lo analices y que realices diferentes pruebas, para que domines mas el tema.

Saludos!

123
Aprender a programar desde cero / Re:Ejercicio (CU00637B)
« en: 29 de Septiembre 2014, 00:54 »
 Hola Alex!

Mirando tu ejercicio te comento lo siguiente:

Tanto el nombre de un método set, como el nombre de un método get han de ser del tipo: mismo nombre de la variable + el prefijo set o get (según sea el caso) antes (en principio, al comienzo) de de este nombre de la variable. En tu codigo nos encontramos con un método set: setBomba(); y un metodo get: getTipoBombs(); ambos métodos relacionados con variable que as declarado "private int tipoBomba;" Los nombres correctos para estos metodos teniendo en cuenta lo que te acabo de explicar, serian setTipoBomba(); y getTipoBomba();

Respecto a lo que pide el enunciado del ejercicio, tu ejercicio es correcto, solo reforzar ese punto sobre el diseño del código.

Saludos!

124
Aprender a programar desde cero / Re:ejercicio java
« en: 28 de Septiembre 2014, 22:29 »
 Hola Susana83!

Sobre el error java.util.ConcurrentModificationException te cito lo siguiente:
Citar
El uso del bucle for-each tiene algunos inconvenientes. Uno de ellos, que para recorrer la colección nos
basamos en la propia colección y por tanto no podemos (o al menos no debemos) manipularla durante
su recorrido. Supongamos que vamos recorriendo una lista de 20 objetos y que durante el recorrido
borramos 5 de ellos. Probablemente nos saltará un error porque Java no sabrá qué hacer ante esta
modificación concurrente.

Sería como seguir un camino marcado sobre unas baldosas y que durante el camino nos movieran las
baldosas de sitio: no podríamos seguir el camino previsto. Este tipo de problemas se suelen presentar
con un mensaje de error del tipo java.util.ConcurrentModificationException.

Lo que se explica en esta cita, es que si tratas de recorrer una colección (lista, ArrayList, ect..) y al mismo tiempo intentar realizar cambios sobre esta, lo mas probable es que obtengas un error de tipo java.util.ConcurrentModificationException

La solución a esto es hacer uso de la clase Iterator de la librería de java. Te recomiendo que estudies la entrega CU00667B del curso, aprender programación java desde cero : https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=633:tipo-iterator-api-java-ejemplo-error-javautilconcurrent-modificationexception-resumen-bucles-cu00667b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188 Aquí encontraras mas detalles sobre la clase Iterator y como usarla para sacar adelante tu ejercicio. Luego que estudies e implementes lo aprendido en tu ejercicio, pues nos comentas a ver como te ha ido.

Si en cualquier momento necesitas ayuda, o consultar algo no dudes en preguntar.

Saludos!


125
 Hola Susana83!

Respecto a tu inquietud sobre el warning que salta con relación al ultimo código en este hilo, te comento lo siguiente:

Lo primero a tener en cuenta es, que contiene tu ArrayList? Tu ArrayList contiene objetos, todos los objetos son del tipo definido por su clase, en tu ArrayList tenemos instancias (objetos) de las clases String, Integer y Float.

En esta linea de tu codigo:
Código: [Seleccionar]
List list = new ArrayList (); Lo correcto seria usar una sintaxis como:
Código: [Seleccionar]
List<TipoDeObjeto> list = new ArrayList<TipoDeObjeto>(); donde TipoDeObjeto indica el tipo de objeto que contendra la lista, ahora bien! te podrias preguntar, si mi lista contiene tres tipos diferentes (String, Integer, Float), cual es el que debo de usar aquí?

Aquí es donde entra lo que se conoce como "polimorfismo" el polimorfismo se cumple cuando un objeto puede ser declarado tanto del tipo definido por su clase, como del tipo de una clase de la cual herede, o implemente su propia clase (clase originaria del objeto). Si tenemos en cuenta que todas las clases heredan de la clase Object, pues podriamos concluir que una solución a esto seria esta:
Código: [Seleccionar]
List<Object> list = new ArrayList<Object>(); y lo mismo para el Iterator:
Código: [Seleccionar]
Iterator<Object> elements = list.iterator();
Tu código en general quedaría así:
Código: [Seleccionar]

import java.util.*; 
      public class ListExample { 
      public static void main(String[] args) { 
        // declaration 
        List<Object> list = new ArrayList<Object>(); 
         
        // als some elements to the list 
        list.add("par"); 
        list.add("arroz"); 
        list.add("harina"); 
        list.add(4); 
        list.add(5.0F); 
        list.add("arroz"); 
        // duplicate element, is added to list 
        list.add(4); // duplicate, is added 
        Iterator<Object> elements = list.iterator();
        //  Print contents of the list 
        while (elements.hasNext()) { 
          System.out.println(elements.next()); 
        }  // while 
      } // main 
    } // class
Con esto queda resuelto lo del warning, espero que te sea útil mi explicación.

Saludos!

126
 Hola Guille!

Primero te pongo en conocimiento: Cuando vallas a introducir código en el foro antes presiona el botón # (insertar código) que se encuentra arriba del campo de escritura, te saldrán unas etiquetas similares a estas: [cod][/cod]  y a continuación procede a pegar el código de tu clase en medio de esas etiquetas.
Ejemp: [cod]aquíElCódigoDeTuClase(){...}[/cod]

En cuanto a tu ejercicio, te comento los siguientes puntos a mejorar o corregir:

Constructor de la clase: Aquí has inicializado la variable int edad = 16; Lo correcto seria asignarle como valor inicial cero (0), así cada objeto medico que crees no nace con 16 años de edad, sino con 0 años de edad, y luego haciendo uso de su método set correspondiente, pues se le asigna un valor según sea necesario. También veo que has declarado una variable la cual no usas(private boolean cambio) por tanto, creo que no estaría de mas eliminarla o también ponerla como comentario, ya que tienes una duda o inquietud relacionada a esta variable ;).

En cuanto a tu comentario:
Citar
/*public void cambioDeEspecialidad.....no supe como hacerlo queria poner una condicion dentro de "public void setEspecialidad" para cuando cambiara  la especialidad asignar a cambio= true y poner el mensaje despues.
     */
Normalmente un método set no debería mostrar un mensaje por pantalla al ser invocado, lo correcto es que un método set solo cumpla su cometido el cual es realizar un procedimiento para asignar (o reasignar) un valor a una variable.

Tal vez te parezca confuso o contradictorio, cuando el propio enunciado del ejercicio pide lo siguiente:
Citar
En cada método, incluye una instrucción para que se muestre por consola un mensaje
informando del cambio. Por ejemplo si cambia la especialidad del médico, debe aparecer un mensaje
que diga: “Ha cambiado la especialidad del médico de nombre … . La nueva especialidad es: …”.
pero mas adelante comprenderás el porque de las cosas (todo a su tiempo)

A modo de ejercicio se podría aceptar esta "mala practica", si analizas lo que querías hacer con la variable "cambio" lo has conseguido solo con incluir el mensaje:"Ha cambiado la especialidad del médico..." solo que esta es la forma directa y mas lógica de  expresar lo que quieres hacer, aunque entiendo perfectamente que es lo que quieres conseguir, esto lo dominaras cuando llegues a la entrega CU00636B que trata sobre estructuras condicionales (if con else vacio, if con else if, ect...) cuando domines esto veras cuan sencillo es lograr lo que "no has podido" lograr respecto a la variable "cambio"

Eso es todo de mi parte, y nada continua avanzando y así tu mismo encontraras las respuestas a muchas de las inquietudes que te surgen, pero que lo mas favorable en muchas ocasiones es que sean contestadas a su debido tiempo  ;)

Saludos!

127
 Hola Alex!
Tu ejercicio esta correcto, las variables bien definidas e inicializadas, los métodos get y set correctos. ect...

Solo una pequeña observación: Siempre a la hora de exponer un ejercicio, trata de que cosas tan sencillas, como poner una j donde va una L, en un mensaje para mostrar no sucedan:
Citar
System.out.println("Ja rueda es para un vehiulo grande");
no es el graaan problema, pero ya cuando estés a un nivel mas avanzado (o con un empleo) esto no es muy agradable que digamos, pero tranquilo que hasta ami me a pasado  ;D

Tu ejercicio en general esta correcto.

Saludos!

128
Aprender a programar desde cero / Re:ENTREGA:CU00670B
« en: 24 de Septiembre 2014, 22:28 »
 Hola momo!

Tanto tu interpretación sobre el error:
"Bad operand types for binary operator '*' first type : int; second type:java.lang.String"
Como el código de tu ejercicio ambos son correctos. Solo tengo un "pequeño" detalle que comentar.

Has declarado como nombre de clase: ejemplo1. Lo correcto seria Ejemplo1, que el nombre de una clase comience con letra mayúscula no es obligatorio pero si es una buena practica de programación, con esto estas respetando un convenio entre programadores que consta de declarar el nombre de una clase comenzando con letra mayúscula.

También te hago un pequeño aporte por si te puede ser util en algún momento. Para realizar la conversion de String a float, también puedes usar el método "parseFloat(String s)" de la clase Float.

En tu ejercicio seria algo asi:
Código: [Seleccionar]
float convertir = Float.parseFloat(entradaUsuario);
Saludos!

129
Aprender a programar desde cero / Re:Entrega Clase personas (CU00623B)
« en: 24 de Septiembre 2014, 00:29 »
 Hola tinezmatias!

En cuanto a tu ejercicio, veo solo un detalle.

Tu has declarado como nombre de clase "Personas" en POO
(Programación orientada a objetos) este tipo de pluralismo no es factible, míralo de la siguiente forma: Cuando creas una clase, esta define objetos de su tipo, cuando usas la sentencia: new Persona(); estas creando una instancia de clase, osea un objeto Personas, ahora te pregunto: suena lógico que sea Personas cuando solo estas creando un objeto a la ves? no seria mas lógico que tu clase se llamara Persona (Singular)?

A la hora de crear clases, lo correcto es usar el singular de su nombre, Ejemp Persona, Taxi, Medico, ect

En lo personal una pequeña recomendación.  Una de las características que debe de tener un código para que este sea un código  con un buen diseño, es su aspecto visual.

Declarar una variable como private boolean estado_civil = false;
no se puede decir que este mal, porque esto no afecta el funcionamiento del código, pero otro programador que mire tu código detectara algo no muy usual, por ejemplo yo he encontrado "estado_civil" donde esperaba "estadoCivil".

Esta es la regla o estilo camelCase, exactamente su variación lowerCamelCase http://es.wikipedia.org/wiki/CamelCase donde se usan palabras o frases compuestas, y donde la primera palabra se escribe en letras minúsculas y cada primera letra de las posibles siguientes palabras se escriben en mayúsculas.

Veo que has aplicado esto correctamente a los métodos de tu clase Personas, y en lo personal te recomiendo aplicarlo también a las variables de cada clase que crees.

Esto es solo un pequeño consejo, en si tu ejercicio es correcto.
(teniendo en cuenta lo del pluralismo en nombres de clases)

Saludos!

130
 Hola Mario!
Gracias por verificar y comentar este ejercicio como de costumbre al igual que los demás moderadores y compañeros del foro.

En cuanto a tus comentarios sobre el ejercicio:

Citar
La clase polideportivo: querrás decir ancho, setAncho, etc. porque hancho, setHancho ¿?
Por si acaso no hay algún foro sobre la buena ortografía en esta web?? creo que me vendría muy bien  ;D  ;D (reforzare ese punto  ;)).

Citar
En el método getSuperficieEdificio has escrito return (largo * ancho * altura) * 6; ... supongo que esto lo pones como ejemplo de fórmula que podría aplicarse, pero sin haberle prestado atención, ya que un largo por ancho por altura devuelve un volumen, no una superficie. Más lógico hubiera sido largo * ancho (superficie de un rectángulo), pero esto no era el objetivo del ejercicio...
En realidad es como dices, es un ejemplo de formula.

Citar
La clase de test:

Donde has escrito

       InstalacionDeportiva poliDeportivo1 = new PoliDeportivo("Felix Sanchez", "100 mts con ballas", 48F, 28F, 50F);
       Edificio poliDeportivo2 = new PoliDeportivo("Estadio Quisqueya", "Baseball", 57F, 32.7F, 60F);
       PoliDeportivo poliDeportivo3 = new PoliDeportivo("Club san carlos", "Basketball", 46F, 33F, 50.4F);
       Edificio edificioDeOficinas1 = new EdificioDeOficinas(20, 39.5F, 31F, 55F);
       EdificioDeOficinas edificioDeOficinas2 = new EdificioDeOficinas(35, 56F, 37.3F, 57.9F);

Citar
Lo más adecuado hubiera sido:

       Edificio poliDeportivo1 = new PoliDeportivo("Felix Sanchez", "100 mts con ballas", 48F, 28F, 50F);
       Edificio poliDeportivo2 = new PoliDeportivo("Estadio Quisqueya", "Baseball", 57F, 32.7F, 60F);
       Edificio poliDeportivo3 = new PoliDeportivo("Club san carlos", "Basketball", 46F, 33F, 50.4F);
       Edificio edificioDeOficinas1 = new EdificioDeOficinas(20, 39.5F, 31F, 55F);
       Edificio edificioDeOficinas2 = new EdificioDeOficinas(35, 56F, 37.3F, 57.9F);

Totalmente de acuerdo! Creo que me falto detallar en el comentario el porque use varios tipos dinámicos en vez de usar solo el tipo Edificio para cada objeto, aun estando conciente de que la forma mas correcta era como bien dices, aprovechando las ventajas del polimorfismo. Mi intención fue mostrar que cada instancia de clase puede ser declarada del tipo de su super clase, o del tipo de una interface implementada por su super clase, o bien de su propio tipo.

En cuanto a tu comentario a parte de lo que es la observación del ejercicio:
Citar
En relación al final del curso, creo que puedes estar orgulloso de haber mantenido la constancia para llevar adelante un curso de estas características. También has tenido la suerte de tener moderadores y compañeros que te han dado su apoyo, pero el trabajo y el mérito es tuyo, así que enhorabuena. Por otro lado, por parte de los responsables de la web tenemos que agradecer tu actitud de colaboración, por ejemplo este mensaje de hace un par de meses: https://www.aprenderaprogramar.com/foros/index.php?topic=952.0

También tu algoritmo while(estesVivo) nos ha parecido de lo más acertado... esperamos que tú nos recuerdes al equipo de la web y al resto de personas que han colaborado dándote apoyo conforme dice este algoritmo tuyo. De la misma forma que le hemos planteado a otras personas desde el equipo de moderadores, te planteamos que continúes participando del foro ahora como profesor o tutor de apoyo para personas que se están iniciando, o simplemente para seguir hablando de programación y formación en programación. Con esta línea de trabajo por parte del equipo de la web tratamos de dejar puertas abiertas con vistas al futuro a las personas que destacan por su actitud de colaboración, cosa que sin duda has hecho. Saludos cordiales.

Mas que estar orgulloso de mi, me siento orgulloso de pertenecer y formar parte de esta familia, que para mi somos todos los que de una forma u otra estamos involucrados en que aprendiendoaprogramar.com sea posible.

Muy de acuerdo en que el trabajo es mio, puesto que si yo como persona, no trabajo en superarme, nadie lo hará por mi, nadie lo hará por TI. Cada persona debe de progresar por su propia determinación y esfuerzo. En cuanto al merito yo diría que lo puedo dividir en dos, 50% para mi por echarle ganas y llegar asta el "final"  y 50% para ti y todos los demás moderadores y compañeros alumnos que me apoyaron hasta este punto, para todos 1000 gracias :) .

Aun estoy vivo! por tanto continuare con la filosofía de mi algoritmo de aprender, ayudar y enseñar, para mi sera un privilegio continuar colaborando en el foro dando apoyo en base a mi nivel de conocimiento a los que estén comenzando, de la misma forma que yo lo recibí (o aun recibo, porque esto continua...)

Sin nada mas que comentar, muchas gracias a todos y aquí continuamos.

Saludos!

131
Diagrama con interfaces y clases concretas.


Pregunta:
Citar
¿Entre qué clases existe una relación que se asemeja a la herencia múltiple?
Respuesta:
La clase PoliDeportivo implementa a las clases InstalacionDeportiva y Edificio a su vez, por tanto la clase concreta PoliDeportivo implementa (hereda) las constantes, y métodos abstractos que contenga cada una de las interfaces, esto es lo que podríamos llamar "herencia múltiple".

A continuación el código del ejercicio:

public interface InstalacionDeportiva
Código: [Seleccionar]
public interface InstalacionDeportiva
{
    String tipoDeInstalacion = "Recinto delimitado";// Por defecto public static final (constante).
    String getTipoDeInstalacion();// Por defecto abstract public.
}
public interface Edificio
Código: [Seleccionar]
public interface Edificio
{
   String tipoDeConstruccion = "Construccion cubierta";// Por defecto public static final (constante).
   float getSuperficieEdificio();// Por defecto abstract public.
}
public class PoliDeportivo implements InstalacionDeportiva, Edificio
Código: [Seleccionar]
public class PoliDeportivo implements InstalacionDeportiva, Edificio
{
    private String nombre, tipoDeDeporte;
    private float largo, hancho, altura;
    //Constructor geeral
    public PoliDeportivo()
    {
      nombre = "Desconocido";
      tipoDeDeporte = "Desconocido";
      largo = 0F;
      hancho = 0F;
      altura = 0F;
    }
    //Constructor con parametros
    public PoliDeportivo(String nombre, String tipoDeDeporte, float largo, float hancho, float altura)
    {
      this.nombre = nombre;
      this.tipoDeDeporte = tipoDeDeporte;
      this.largo = largo;
      this.hancho = hancho;
      this.altura = altura; 
    }
    //Setters
    public void setNombre(String nombre)
    {
      this.nombre = nombre;
    }
    public void setTipoDeDeporte(String tipoDeDeporte)
    {
      this.tipoDeDeporte = tipoDeDeporte;
    }
    public void setLargo(float largo)
    {
      this.largo = largo;
    }
    public void setHancho(float hancho)
    {
      this.hancho = hancho;
    }
    public void setAltura(float altura)
    {
      this.altura = altura;
    }
    //Getters
    public String getNombre()
    {
      return nombre;
    }
    public String getTipoDeDeporte()
    {
      return tipoDeDeporte;
    }
    @Override
    public String getTipoDeInstalacion()
    {
      return this.tipoDeInstalacion;
    }
    public float getLargo()
    {
      return largo;
    }
    public float getHancho()
    {
      return hancho;
    }
    public float getAltura()
    {
      return altura;
    }
    //Otros metodos
    @Override
    public float getSuperficieEdificio()
    {
      return (largo * hancho * altura) * 6;
    }
   
    @Override
    public String toString()
    {
      return "Tipo de instalacion: " + tipoDeInstalacion + "\nInstalacion para el deporte de: " + tipoDeDeporte +"\nNombre: " + nombre + "\nLargo : " + largo + " mts\nHancho: " +
      hancho + " mts\nAltura: " + altura + " mts\nSuperficie total: " + getSuperficieEdificio() + " m²";     
    }
}
public class EdificioDeOficinas implements Edificio
Código: [Seleccionar]
public class EdificioDeOficinas implements Edificio
{
    private int cantidadDeOfics;
    private float largo, hancho, altura;
    public EdificioDeOficinas()
    {
      cantidadDeOfics = 0;
      largo = 0F;
      hancho = 0F;
      altura = 0F;
    }
    //Cnstructor con parametros
    public EdificioDeOficinas(int cantidadDeOfics, float largo, float hancho, float altura)
    {
      this.cantidadDeOfics = cantidadDeOfics;
      this.largo = largo;
      this.hancho = hancho;
      this.altura = altura;
    }
    //Setters
    public void setCantidadDeOfics(int cantidadDeOfics)
    {
      this.cantidadDeOfics = cantidadDeOfics;
    }
    public void setLargo(float largo)
    {
      this.largo = largo;
    }
    public void setHancho(float hancho)
    {
      this.hancho = hancho;
    }
    public void setAltura(float altura)
    {
      this.altura = altura;
    }
    //Getters
    public int getCantidadDeOfics()
    {
      return cantidadDeOfics;
    }
    public float getLargo()
    {
      return largo;
    }
    public float getHancho()
    {
      return hancho;
    }
    public float getAltura()
    {
      return altura;
    }
    //Otros metodos
    public String getTipoDeConstruccion()
    {
      return tipoDeConstruccion;
    }
   
    @Override
    public float getSuperficieEdificio()
    {
      return (largo * hancho * altura) * 6;
    }
   
    @Override
    public String toString()
    {
      return "Tipo de construccion: " + tipoDeConstruccion + "\nCantidad de oficinas: " + cantidadDeOfics + "\nLargo : " + largo + " mts\nHancho: " + hancho +
      " mts\nAltura: " + altura + " mts\nSuperficie total: " + getSuperficieEdificio() + " m²";
    }
}
public class TestSemejansaHerenciaMult
Código: [Seleccionar]
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
public class TestSemejansaHerenciaMult
{
    private static List<Edificio> listaEdificios = new ArrayList<Edificio>();
    public static void main(String []args)
    {
       System.out.println("    *****Lista de construcciones en proyecto*****\n\n");
       //Creacion de objetos
       InstalacionDeportiva poliDeportivo1 = new PoliDeportivo("Felix Sanchez", "100 mts con ballas", 48F, 28F, 50F);
       Edificio poliDeportivo2 = new PoliDeportivo("Estadio Quisqueya", "Baseball", 57F, 32.7F, 60F);
       PoliDeportivo poliDeportivo3 = new PoliDeportivo("Club san carlos", "Basketball", 46F, 33F, 50.4F);
       Edificio edificioDeOficinas1 = new EdificioDeOficinas(20, 39.5F, 31F, 55F);
       EdificioDeOficinas edificioDeOficinas2 = new EdificioDeOficinas(35, 56F, 37.3F, 57.9F);
       //Agregando objetos a la listaEdificios
       listaEdificios.add((Edificio)poliDeportivo1);/*Los objetos tipo PoliDeportivo, son a su vez tipo InstalacionDeportiva  y tipo Edificio, el ArrayList
       listaEdificios esta definido para contener objetos de tipo definido Edificio, u objetos de una clase que implemente o herede de forma indirecta de 
       la interface Edificio. Al declarar el objeto poliDeportivo1 como tipo dinámico InstalacionDeportiva, no es posible agregarlo al ArrayList listaEdificios porque
       este admite solo tipos definidos por la interface Edificio o tipos definidos por una clase que implemente esta interface o bien tipos definidos por una clase que
       herede de otra clase que implemente la interface Edificio. Para poder agregar al objeto poliDeportivo1 al ArrayList listaEdificios, se le indica al
       compilador que este objeto tambien implementa a la interface Edificio, mediante la declaracion: listaEdificios.add((Edificio)poliDeportivo1);*/
       listaEdificios.add(poliDeportivo2);
       listaEdificios.add(poliDeportivo3);
       listaEdificios.add(edificioDeOficinas1);
       listaEdificios.add(edificioDeOficinas2);
       
       Iterator<Edificio> it = listaEdificios.iterator();
       String linea = "____________________________________________________";
       String tipoEdific = "";
       float superficieGlobal = 0F;
       while(it.hasNext())
       {
         Edificio tmpObjEdif = it.next();
         if(tmpObjEdif instanceof PoliDeportivo)
         {
           tipoEdific = "\t\tTipo: Polideportivo";
         }
         if(tmpObjEdif instanceof EdificioDeOficinas)
         {
           tipoEdific = "\t     Tipo: Edificio de oficinas";
         }
         superficieGlobal = superficieGlobal + tmpObjEdif.getSuperficieEdificio();
         System.out.println(tipoEdific + "\n" + linea + "\n" + tmpObjEdif.toString() + "\n" + linea);
       }
       System.out.println("Total de construcciones en la lista: " + listaEdificios.size() + "\nSuperficie global de las " + listaEdificios.size() + " construcciones: " +
       superficieGlobal + " m²" + "\nFin de la lista.");
    }
}

También adjunto un archivo.rar con este ejercicio.

Gracias por observar este ejercicio.

Saludos!

132
Aprender a programar desde cero / Re:CU00667B
« en: 20 de Septiembre 2014, 06:33 »
 Hola momo!
Tu ejercicio en algunas partes cumple con lo requerido en el enunciado, y en otras partes no.
Citar
Se debe pedir al
usuario un nombre y disco con más ventas de otro cantante famoso, y una vez introducidos los datos
mostrar la lista actualizada usando iterator. Una vez mostrada la lista actualizada, se debe dar opción a
elegir entre volver a introducir los datos de otro cantante o salir del programa (se podrán introducir
tantos datos de cantantes como se desee
Con  relación a esta parte del ejercicio, cumples con la parte de dar la opción de agregar otro cantante famoso o salir del programa. Pero según lo que pide este párrafo del ejercicio, agregar un tercer cantante a la lista es un requisito y no una opción, en tu programa se puede terminar el programa solo con los 2 cantantes que tiene la lista por defecto, si así el usuario lo deseara. Si esto sucede pues incumples con lo que pide el ejercicio.

Por otra parte, en relación al diseño del código hay barios puntos a comentar.

1ro: public class CantanteFamoso

punto 1: Veo que has decidido que lo que en la versión anterior de este ejercicio fue public class EntradaTeclado pase a ser en esta nueva versión de tu ejercicio un método de la clase CantanteFamoso (mala decision). El nombre de una clase dice lo que es o lo que hace, añadir tareas como la de pedir una entrada por teclado a esta clase, no es algo apropiado, lo mas apropiado hubiese sido que el método entradaTeclado(); fuese una clase que se encargue de crear una entrada de texto para el usuario, y no un método de la clase CantanteFamoso.

2do: public class ListaCantanteFamoso

punto 1:
Código: [Seleccionar]
public CantanteFamoso  getCantante(int posicion)
    {
        if(posicion >= 0 && posicion < listaCantanteFamoso.size())
        {
            return listaCantanteFamoso.get(posicion);
        }else{return null;}   
    }
Este metodo aparte de que no es necesario y nunca lo usas, tiene un if que no tiene mucha logica.

punto 2:
Código: [Seleccionar]
public CantanteFamoso getRemoverCantante(int posicion)
    {
        if(posicion>=0 && posicion<listaCantanteFamoso.size())
        {
            return listaCantanteFamoso.remove(posicion);
        }else {return null;}   
    }
Lo primero es el nombre del método, no es apropiado, lo segundo es que este método deberia de ser tipo procedimiento y no tipo funcion, la finalidad del método
remove(int index); es realizar una tarea (eliminar un objeto en la List) No es muy lógico que el método elimine un objeto y seguido devuelva el objeto que elimino, lo tercero es al igual que el anterior método la aparición de un if que no tiene mucho sentido y que podría dar lugar a confusión posteriormente a lo largo del desarrollo del programa, lo cuarto es que este método lo creas pero no lo usas en ninguna parte, por tanto y dada su utilidad creo que esta de mas.

3ro: public class TestListaCantanteFamoso

punto 1: la declaración en cabecera de clase, import java.util.Scanner; al ver esto se entiende que tu intención es crear un o varios objetos tipo Scanner a lo largo del desarrollo de esta clase, para crear entradas de teclado. Esto es contraproducente puesto que ya tienes el metodo entradaTeclado(); de la clase CantanteFamoso que se supone usarías para manejar todas las entradas de teclado del programa, a pesar  de que esto esta mal, porque como ya te dije, debió de ser una clase y no un método en una clase que no concuerda, al tu no usar este método para pedir todas las entradas de teclado del programa (no digo que usarlo desde la clase en que esta sea correcto) estas cometiendo lo que yo llamaría un error doble. Imagínate que si as creado una clase que se encargue de crear una entrada de teclado, y que otras clases la pueden usar para pedir entradas de teclado, imagínate que en otra clase declaras en cabecera de clase:
import java.util.Scanner; con la intención de crear un objeto tipo Scanner y usarlo para pedir entradas de teclado. Para que entonces creaste la clase que se supone aria esta tarea? es algo similar lo que pasa con tu metodo entradaTeclado y la clase con main.

punto 2:
Código: [Seleccionar]
if(resp.equals("s")==true)//Condicion si deceamos ingresar de nuevo a otro Cantante
            {
                otroCantante.equals("s");//se iguala a True para que inicie de nuevo a agregar al cantante             

            }else
            {break;//Rompe la condicion del IF
            }
El ==true dentro en este if, no es necesario, el bucle seguirá dando vueltas mientras otroCantante sea igual que "s" sin la necesidad de ==true.

De mi parte esos han sido los puntos mas necesarios a comentar, otros puntos o detalles los iras puliendo con el tiempo, por ejemplo yo en lo personal cambiaría tu linea de código en la clase con main:
Citar
System.out.println("Tamaño de la lista :"+ lista.getTamaño());
por:
Citar
System.out.println("Total de cantantes en la lista :"+ lista.getTamaño() + " cantantes");
Esto no surte ninguna variación en la funcionalidad del programa, pero muestra algo mas entendible para el usuario.

Saludos!

133
Aprender a programar desde cero / Re:Ejercicio CU00624B
« en: 20 de Septiembre 2014, 03:10 »
 Hola KillerNemesis!

Antes que nada te pongo en conocimiento, que para publicar codigo en el foro, primero debes de dar clic sobre el botón con el símbolo #, dicho botón lo encuentras en la parte arriba de donde escribes tus ejercicios. Cuando des clic sobre este botón te aparecerán unas etiquetas similares a estas: "[cod][/cod]" luego en medio de esas etiquetas pegas el codigo de tu clase, un ejemplo seria algo asi:
 [cod]public class AquiPegasTuCodigo...[/cod]

Por otra parte, en cuanto a tu ejercicio, has pegado un codigo de clase con fragmentos de codigo faltante, olvidaste pegar lo que seria el comienzo del codigo, algo así como:
Código: [Seleccionar]
public class DiscoMusical
{
    private String titulo, autor, formato;
    private int anoEdicion;
    private boolean digital;
Si solo fue un descuido al copiar y pegar, supongo que tu clase cuenta con un fragmento de código como este que acabo de pegar, que de paso e usado para completar el código de tu clase e identificar lo posibles errores.

En respuesta a tu pregunta o duda
Citar
Pues tengo una duda que me tiene la cabeza echa un lio pues resulta que después de terminar el codigo e intentar compilarlo me envia un mensaje de error en apartado de CONSTRUCTOR "añoEdicion" en el cual me dice Incompatible Types
Este error de compilación hace referencia a que estas asignando un valor a una variable cuyo tipo de valor no coincide con el tipo de variable, debes de tener en cuenta que una variable recibe un valor de su tipo declarado, por ejemplo si declaro: int edad = "10"; al intentar compilar, me saltara un error: imcopatible types: java.lang.String cannot be converted to int.  Lo que de manera explicita, significa que estoy intentando asignar un valor que no es el tipo de valor esperado para la variable edad.

Como corregirlo? asigando un valor cuyo tipo sea compatible con el tipo de la variable edad, si edad es tipo int pues e de declarar int edad = 10;

Donde estuvo el error? el error en el primer caso, tubo en que intente asignar un valor tipo String (cadena de texto) a la variable edad, que espera un valor tipo int (numero entero).

No es lo mismo "10" que 10, todo lo que este entre "comillas dobles" sera un String, en tu código has inicializado todas las variables con un valor String, donde tienes variables que esperan como valor inicial un String ("cadena de texto entre comillas dobles"), otras un int (numero entero) y otra un valor boolean (true o false) .

En cuanto al constructor de la clase, lo correcto al inicializar variables en un constructor es asignar un valor inicial por defecto, un ejemplo de como inicializar las variables de esta clase en el constructor, de una forma favorable seria el siguiente:
Código: [Seleccionar]
public DiscoMusical ()
    {
        titulo = "Desconocido";
        autor = "Desconocido";
        anoEdicion = 0;
        formato = "Desconocido";
        digital = false;
    } //Cierre del constructor
A si cada vez que crees un objeto de esta clase, cada objeto se creara con la finalidad de asignar un valor diferente (o igual) a cada una de sus variables, mediante su correspondiente metodo set.

Te recomiendo que analices lo que he intentado explicarte, y que rediseñes el código de tu ejercicio para que cumpla con lo que se pide en dicho ejercicio.

Cualquier duda no dudes en preguntar.

Saludos!

134
 Me parece que comprendí tu "trabalenguas" Mario  ;D

Al declarar:
public interface Interface{}
public class Class1 implements Interface{}
public class Class2 extends Class1{}

Es posible el compilado de:
public static void main(String []args)
{
  Interface obj1 = new Class1();
  Interface obj2 = new Class2();
}

Esto porque de manera indirecta mediante la herencia de Class1 en Class2, la Class2 adquiere (hereda) el tipo definido por la Interface, por tanto si se intenta compilar:

public interface Interface{}
public class Class1{}
public class Class2 extends Class1{}

public static void main(String []args)
{
  Class1 obj1 = new Class1();
  Interface obj2 = new Class2();
}

Obtendriamos un error de compilacion, porque Class2 ni implementa la Interface directamente, ni hereda de una clase que implemente la Interface, por tanto no hay polimorfismo alguno que haga posible el compilado de:

public static void main(String []args)
{
  Class1 obj1 = new Class1();
  Interface obj2 = new Class2();
}
Espero estar en lo correcto

Saludos!

135
 100% de acuerdo contigo toni, cuando dices
Citar
Iterator<Legislador> iterable = listinLegisladores.iterator();//Uso del polimorfismo

El comentario que colocas al final es adecuado en esta clase, pero esta instrucción solo es una declaración.
El polimorfismo se hace notar cuando usas el objeto tmpObj declarado como Legislador y como ya sabes según el objeto devuelto por el iterador invocará un método u otro para mostrar los datos
El comentario es valido para la clase, pero debió de estar mejor ubicado en otra linea, tendré esto mas pendiente  ;D

Saludos!

136
 Hola toni!

1ro gracias por verificar y comentar mi ejercicio  ;)

En cuanto a mi opinión sobre tu clase Encript, tengo para decirte que lo primero que hice al descifrar el texto que me dejaste para que pruebe, fue no entender nada  ;D, el algoritmo que usas para un "programador" de mi nivel, no es nada sencillo a menos que no profundices y comprendas el método lastIndexOf(String str); de la clase String.

En principio trate de buscar un patrón para ver como se comportaba el algoritmo, solo introduciendo cadenas cortas e intentando identificar un patrón, luego de pocos intentos decidí mejor mirar tu código e identificar algo extraño o que no hubiese visto antes, entonces veo el método lastIndexOf(String str); y buscando detalles en la librería de java, encontré estos detalles sobre el método: Devuelve el índice dentro de esta cadena de la última aparición de la subcadena especificada. La última aparición de la cadena vacía "se considera" que se produzcan en el valor del índice this.length ().
donde llegue a la conclusión de que si la variable base tuviera un valor como base = "abca" el valor posición de "a" no fuese 0 sino 3.

Estoy muy de acuerdo contigo cuando dices que este algoritmo tiene posibilidades de ser bassstante enrevesado.

En general me a gustado bastante tu código y me tome la libertad de hacer algunos reajustes (esto no le resta méritos a tu diseño, al contrario! me quito el sombrero), los cuales me gustaría que analices y comentes.

Citare un pequeño cambio de signatura o declaración: Las variables base y baseCifrado pasaron de ser variables generales de la clase, a variables locales del método ado(); esto lo veo mas conveniente, porque estas variables no son intervenidas por métodos setters o getters

Los demás cambios son funcionales respecto al comportamiento del algoritmo, veras un comentario (cifrado  ;D) en cada fragmento de código añadido.

Aqui te dejo el codigo:
public class Encript
Código: [Seleccionar]
public class Encript
{
    //Sin variables generales
    public Encript()
    {
      //Constructor general (vacio)
    }
    public static void ado(String textoEntrante)
    {   
        String base =        "abcdefghijklmnopqrstuvwxyz";
        String baseCifrado = "zyxwvutsrqponmlkjihgfedcba";
        String textoSaliente = "";
        String caracter = "";
        int posicion = 0;
        String tipoCaracter = "";
        //Para poder leer los siguientes primeros 3 comentarios, favor decifrarlos pasandolos como parametro tipo String en la invocacion de ese metodo.
        for (int i = 0; i < textoEntrante.length();i++)
        {
            caracter = textoEntrante.substring(i,i+1);
            //Vhgv ru xlm vohv ru, zfnvmgz oz vuvxrvmxrz wvo xlwrtl zo kvinrgri zo zotlirgnl vezofzi ovgizh (jfv gznyrvm hlm xzizxgvivh) nzbfhxfozh b nrmfhx.
            if(caracter.equals(caracter.toUpperCase())){base = base.toUpperCase(); baseCifrado = baseCifrado.toUpperCase();}
            else if(caracter.equals(caracter.toLowerCase())){base = base.toLowerCase(); baseCifrado = baseCifrado.toLowerCase();}
            posicion = base.lastIndexOf(caracter);
            //Vhgv hdrgxs grvmv oz hvmxrooz gzivz wv zhrtmzi fm ezoli z oz ezirzyov grklXzizxgvi, xfbz ezirzyov hviz fhzwz kziz nlhgizi nvmhzqvh kli kzmgzooz
            switch(posicion)
            {
              case -1: tipoCaracter = "Caracter-";break;
              default: tipoCaracter = "Letra----";
            }
            //Vm vhgv Hbhgvn.lfg.kirmgom oz ezirzyov grklXzizxgvi rmwrxz xfzmwl vh fm xzizxgvi grkl ovgiz, l fm xzizxgvi vm hr.
            System.out.println (tipoCaracter + "-" + caracter + "- posicion " + posicion);
            if (posicion != -1)
            {
                textoSaliente = textoSaliente + baseCifrado.substring(posicion,posicion+1);
            }
            else
            {
                textoSaliente = textoSaliente + caracter;
            }
        }
        System.out.println ("\nTexto entrante: " + textoEntrante + "\nTexto saliente: " + textoSaliente);
        //Este codigo funciona tanto para cifrar como para descifrar
    }
} // Fin de la clase Encript

Saludos!

137
 Responde a las siguientes preguntas:

Citar
a) ¿Una clase puede heredar de dos clases en Java?

No, una clase puede heredar solo de una super clase mediante la sentencia:
public class ClassName extends SuperClassName, por otra parte, una clase puede heredar de una super clase e implementar una o varias interface.


Citar
b) ¿Una interface Java puede tener métodos que incluyan una sentencia while? ¿Una interface Java puede tener métodos que incluyan una sentencia System.out.println?

No, tanto una sentencia while, como una sentencia System.out.println han de ser declaradas en el cuerpo de un metodo, hemos de tener en cuenta que todo metodo declarado en una interface a de ser abstracto, y que un metodo abstracto carece de cuerpo.


Citar
c1) ¿Un objeto Java puede ser del tipo definido por una interface?

Si, un ejemplo seria:

public interface Interface{}
public class Class1 implements Interface{}

public static void main(String []args)
{
  Interface obj1 = new Class1();
}


Citar
c2) ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que no implementa la interface?

Sí, un ejemplo seria:

public interface Interface{}
public class Class1 implements Interface{}
public class Class2 extends Class1{}

public static void main(String []args)
{
  Interface obj1 = new Class1();
  Interface obj2 = new Class2();
}


Citar
c3) ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que implementa la interface

Sí, un ejemplo seria:

public interface Interface{}
public class Class1 implements Interface{}
public class Class2 extends Class1 implements Interface{}

public static void main(String []args)
{
  Interface obj1 = new Class1();
  Interface obj2 = new Class2();
}

Saludos!

138
 Favor descargar el archivo.rar adjunto, para verificar el ejercicio.

Citar
Declara una clase abstracta Legislador que herede de la clase Persona, con un atributo
provinciaQueRepresenta (tipo String) y otros atributos. Declara un método abstracto
getCamaraEnQueTrabaja. Crea dos clases concretas que hereden de Legislador: la clase Diputado y la
clase Senador que sobreescriban los métodos abstractos necesarios. Crea una lista de legisladores y
muestra por pantalla la cámara en que trabajan haciendo uso del polimorfismo.

Saludos!

139
 Nunca te creas sabio en tu propia opinión, reconoce tus horrores y aprende de ellos.

Reconozco que mi ejercicio no se adapta a lo que requiere el ejercicio, aun cuando creo dominar bien los conceptos de igualdad e identidad de objetos.

Gracias toni, gracias cesar por corregir me.

Aquí dejo un archivo.rar con lo que es el replanteamiento de este ejercicio.

Saludos!

140
Aprender a programar desde cero / Re:Ejercicio! entrega CU00694B
« en: 13 de Septiembre 2014, 02:03 »
 Hola toni!
Tratare de explicarme en cada punto del código, a ver si me evitas tener que rediseñarlo  ;D
 
Citar
Donde dices que vas a hacer comparaciones sin el método equals. Creo entender que haces eso a propósito, si es así, no entiendo el motivo, tal vez me puedas explicar tu razón
El método equals es un método que nace en la clase padre de todas las clases (public class Object) y por tanto es heredado en todas las demás clases, ya sean clases de la librería de java o clases que diseñemos nosotros mismos. El cometido o uso de este método es comparar igualdad entre objetos, no obstante siendo un tipo String un objeto y una instancia de clase otro objeto, no es lo mismo utilizar equals para comparar objetos tipo String que utilizarlo para comparar instancias de clases, puesto que se obtendría un resultado no real o no deseado al comparar instancias de clase. Por tal motivo es recomendable sobre escribir este método en cada clase donde se harán comparaciones entre sus instancias, indicando en el cuerpo del método las condiciones a cumplir para que dos objetos de esa clase sean iguales.

Al hacer comparaciones entre objetos de tipo Cuadrado, se obtienen resultados satisfactorios, gracias a que el metodo equals esta sobre escrito en esta clase, con las condiciones necesarias para determinar la igualdad entre instancias de esta clase.

Cual es mi intención al comparar objetos tipo Circulo usando el método equal sin sobre escribir?  Mi intención es corroborar lo que acabo de explicar, hacer ver a quien estudia este ejercicio que no es lo mismo usar el método equals sobre escrito a usarlo sin sobre escribir.

Tomando en cuenta lo que eh explicado hasta ahora, cuando dices:
Citar
Para mi, los dos círculos circulo1 y circulo2 deberían ser iguales (tienen la misma dimensionPrincipal) y tu código responde false a la expresión 'circulo1.equals(circulo2)'
En cierto punto estas en lo correcto, no solo tienen la misma dimensionPrincipal, sino que también tienen el mismo radio y el mismo PI, pero si te fijas estoy usando el método equals no sobre escrito para compararlos, por tanto es normal que devuelva un resultado no deseado (false)

Citar
//Para comparar objetos de tipo circulo se invoca el método equals de su super clase, heredado a su vez de la clase  padre Objetc
En este comentario parece que me explique mal, lo que quise decir es que el equals que se ejecuta es el de la clase Object, puesto que el compilador busca este método primero en la clase Circulo, no lo encuentra y pasa a la clase Figura, tampoco lo encuentra sobre escrito en esa clase, hasta que final mente lo encuentra en la clase Object, pero las condiciones a cumplir en el cuerpo de el método equals de la clase Object, no son las correctas para determinar la correcta igualdad entre circulo1 y circulo2, de aquí proviene  el "error" ¿Son iguales el circulo1 y el circulo2? false.

Citar
En la clase Figura has colocado un método 'public double calcularArea()' que no usarás nunca, además devuelve un valor que no tiene sentido
'return dimensionPrincipal * PI;'
Como incluye la constante PI, no es útil para el cuadrado, y como mucho sería la longitud del círculo si dimensionPrincipal fuera el diámetro del círculo
Sobre esto, estoy de acuerdo contigo en cuanto al método, mientras estuve diseñando el código me surgió la necesidad de crear este método, para que las sub clases Cuadrado y Circulo lo hereden de Figura,  intente crearlo sin contenido entre las llaves, porque solo me interesaba sobre escribirlo en las sub clases, pero al ser un método tipo funcion, esto no me fue posible, ahora que e estudiado la entrega CU00695B me doy cuenta que lo que yo necesitaba era un método abstracto (sin cuerpo) pero no pude descubrirlo sin antes estudiar la entrega CU00695B ;D

Citar
Finalmente en las clases Cuadrado y Circulo creas los atributos lado y radio respectivamente que no usas para hacer cálculos pues el atributo dimensionPrincipal sustituye al lado en un caso y al radio o diámetro según quieras en la clase Circulo
Es cierto que los atributos lado y radio, no son necesarios (En referencia al ejercicio) pero veo mas prudente que una clase ademas de contener los atributos y métodos que hereda de su super clase, también cuente con atributos y métodos propios (No es obligatorio). Si te fijas en la clase 'TestDeIgualdad' aparece esta fracción de código:
Código: [Seleccionar]
circulo3.setRadio(4.5);la cual tiene como objetivo, hacer al objeto circulo3 diferente a los objetos circulo1 y circulo2, independientemente del resultado erróneo de la comparación, por tanto en este punto se le encuentra utilidad al atributo radio y al método setRadio() de la clase Circulo
aunque también pude invocar al método setDimensionPrincipal() para lograr esta diferencia.

Espero haberme explicado de manera que me entiendas, si aun crees que debo replantear el ejercicio pues me pondré manos a la obra.

Muchas gracias por revisar mi ejercicio toni.

Saludos!

Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".