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 - Alex Rodríguez

Páginas: 1 ... 53 54 55 56 57 [58] 59 60 61 62 63 ... 93
1141
Hola Dan en la clase CantanteFamoso el nombre de atributo discosConMasVentas parece referirse a varios discos, al ser un solo disco es más adecuado discoConMasVentas. Si fuera en plural parece una colección de elementos. Si es singular un solo elemento.

En la clase ListaCantantesFamosos tenemos algo que se comenta en otros hilos en ejercicios similares: el nombre de método getCantanteFamoso no es adecuado. Un get debe devolver algo, tener un return. Este método no tiene return.

En la clase test estos nombres de variables son confusos,  boolean si, no = false;

Deberías usar nombres menos confusos. Por ejemplo boolean continuar.

Ten en cuenta que si, no hacen referencia a una misma cosa. Sólo te haría falta una variable, no veo necesario usar dos.

Saludos

1142
Hola nasrry, para pegar código lee por favor lo que dice en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Tu código está bien, pero has creado dos métodos para comprobar dimensiones cuando el enunciado te indicaba que sólo había que crear uno. El único cambio sería unir el código de los dos métodos en un solo método.

Saludos.

1143
Hola RaGa, como bien dices irás captando y asimilando el polimorfismo conforme vayas avanzando. De momento puede ser suficiente con tener en cuenta que

List<Set> miLista;
miLista = new ArrayList<Set>;

y

ArrayList<Set> miLista;
miLista = new ArrayList<Set>;

son cosas muy similares, pero la primera hace uso del polimorfismo (miLista pertenece a dos tipos, el tipo List y el tipo ArrayList) y la segunda no. Por tanto la primera forma es una forma más amplia y en principio solo tiene ventajas y no inconvenientes, aunque esto tendrá sus matices pero es preferible seguir avanzando antes que entretenerse en estos detalles ahora.

Saludos

1144
Hola RaGa y toni. RaGa, creo que sí vas por buen camino... la aparición de warnings no siempre debe considerarse negativa. Un warning es un aviso, no un error. En este caso el aviso indica que el comprobador de tipos del compilador no puede garantizar que las operaciones que se hacen con tipos sean seguras (correctas). El comprobador de tipos tiene algoritmos para verificar que los tipos sean correctos, pero esos algoritmos no siempre llegan hasta donde nosotros suponemos que van a llegar. Pero si nosotros como programadores estamos seguros de que estamos haciendo algo correcto no debemos prestarle demasiada atención, en el sentido de que no podemos pensar como un compilador, y en el sentido de que son cuestiones relativamente avanzadas que no comprometen el programa si como dices "yo estoy seguro de que no cometo ningún error de conversión de tipos".

Otra cosa, esta declaración:

        ArrayList<Set> miLista; // Declaración de los objetos.
        HashSet<String> objHashSet;
        TreeSet<Integer> objTreeSet;


Es más adecuada así:

        List<Set> miLista; // Declaración de los objetos.
        Set<String> objHashSet;
        Set<Integer> objTreeSet;

Así hacemos uso del polimorfismo: lo más general (List o Set) luego se implementa en lo más particular, ArrayList, ó TreeSet, HashSet, etc.

Con este código parece que desaparecen los warning, pero a mí no acaba de gustarme:

Código: [Seleccionar]
import java.util.*;

public class Ejercicio_Polimorfismo2{
    // Declaración de los campos de instancia.
    public Ejercicio_Polimorfismo2(){ // Constructor de clase
    }

    public static void main (String[] args){
        List<Set> miLista; // Declaración de los objetos.
        Set<String> objHashSet;
        Set<Integer> objTreeSet;

        miLista = new ArrayList<Set>(); // Instanciación de los objetos
        objHashSet = new HashSet<String>();
        objTreeSet = new TreeSet<Integer>();

        objHashSet.add("Sol"); // Añade elementos al objeto tipo HashSet
        objHashSet.add("Luna");
        objHashSet.add("Saturno");

        objTreeSet.add(2); // Añade elementos al objeto tipo TreeSet
        objTreeSet.add(8);
        objTreeSet.add(5);

        miLista.add(objHashSet); // Se agrega a la lista el objeto HashSet y el objeto TreeSet
        miLista.add(objTreeSet);

        System.out.print("\f"); // Borra la pantalla

        for (Set objetoSet:miLista){ // Se recorre el objeto ArrayList con for each
            if(objetoSet instanceof HashSet){ // Si el elemento de la lista contiene un objeto HashSet lo recorro con un for each
                for (Object tmp:objetoSet){
                    System.out.println(tmp);
                }
            }

            if(objetoSet instanceof TreeSet){ // Si el elemento de la lista contiene un objeto TreeSet lo recorro con un for each
                for (Object tmp:objetoSet){
                    System.out.println(tmp);
                }
            }

        } // fin for each
    } // fin main
} // fin de la clase

Saludos


1145
Hola toni

Citar
En el transcurso de la vida de un objeto, nunca nos comunicamos con el objeto sino con su referencia o referencias (si hay varias)

Esto lo expresaría así: En el transcurso de la vida de un objeto, para comunicarnos o acceder al objeto no lo hacemos directamente, sino a través de su referencia, o referencias (si hay varias)



Citar
¿Es incorrecto decir:?
1   el objeto persona1 tiene esto y aquello...


Coloquialmente se usa, y es algo aceptado. Por tanto no vamos a pretender ir en contra de algo que hace toda la comunidad de programadores. Pero si tratáramos de ser más formales o técnicos tendríamos que decir que persona1 es una referencia y que el objeto referenciado por persona1 tiene esto y aquello...


Citar
¿Es correcto decir:?
2   la referencia persona1 a un objeto de tipo Persona tiene esto y aquello...

Yo diría mejor: el objeto referenciado por persona1 tiene esto y aquello...


Citar
la instancia persona1 de la clase Persona tiene esto y aquello...

Es algo aceptado hablar así, no vamos a pretender cambiarlo.


Citar
Entonces ¿cómo debe nombrarse un objeto dentro de una exposición si lo único que tenemos disponible es el nombre que tiene la referencia a ese objeto.?
Se me hace difícil reprimir el uso de la palabra objeto cuando se habla instancias de clase en Java:


No veo necesario reprimirlo, lo único que veo necesario es saber en qué contexto de conversación puede ser necesario ser más precisos (y hablar de referencias por ejemplo) y cuándo no es realmente necesario (y coloquialmente podemos decir que la referencia es un objeto o instancia de clase).


En resumen, según en qué contexto estemos hablando veo razonable ser más flexible en la terminología. Por ejemplo con vistas a la didáctica creo preferible inicialmente no hablar de referencias, sino de objetos, porque es más fácil de entender. Sólo cuando una persona ya tiene algo de rodaje sería cuando a lo mejor en algunos contextos puede ser interesante hablar de referencias.

Saludos

1146
Hola Toni, me alegro de haber servido de ayuda. Estas cuestiones que estamos hablando tienen su dificultad conceptual y no siempre resulta fácil abordarla.

Citar
Tengo claro que dos objetos idénticos cambian al modificar cualquiera de ellos. Para mí son dos puntos de vista (los dos objetos) de un paquete de información único.

Sí, diríamos que son dos referencias al mismo objeto.



Citar
Cambios estos últimos que si trascienden, aunque esta referencia desaparezca al terminar el método.

Sí, este concepto muchas veces no lo tienen claro programadores con cierta experiencia en Java y genera errores en los programas.


Citar
Los objetos idénticos manipulan el mismo objeto. Cualquier cambio en uno afecta al resto de idénticos.

Sí, todas las referencias que apunten a un objeto permiten acceder a manipularlo. Una manipulación en una referencia puede inducir cambios que no se esperaran cuando se trata de acceder al objeto a través de otra referencia.



Citar
Los cambios hechos en el parámetro que recibe un método son responsabilidad del programador. Es decir si usa el parámetro para otra cosa que no sea transmitir los datos a los que apunta, allá el programador con sus consecuencias.

Sí, el programador tiene que ser consciente de lo que hace. Si hace una manipulación siendo consciente no habrá problemas. El problema puede venir si no conoce estas formas de funcionamiento y hace cambios que generen efectos colaterales que no controla.


Creo que no hay nada incorrecto al menos a nivel conceptual. En cuanto a terminología es un poco confuso por la propia nomenclatura de java, de todas formas te recomendaría que trataras de expresar los conceptos siguiendo esta terminología:

Referencia: es cualquier elemento declarado en Java que apunta a un objeto.

Objeto: elemento compuesto de datos y métodos que ocupa un espacio de memoria.

Las referencias apuntan a objetos. Normalmente cada referencia apunta a un objeto, pero puede ocurrir que dos o más referencias apunten al mismo objeto (coloquialmente se dice que los dos objetos presentan relación de identidad. Digo coloquialmente porque en realidad no hay dos objetos, hay un solo objeto).

La frase "Tengo claro que dos objetos idénticos cambian al modificar cualquiera de ellos." quedaría entonces redactada "Tengo claro que dos referencias que apuntan al mismo objeto pueden inducir cambios en el objeto, se acceda al mismo a través de una u otra".

A pesar de esto no hay una nomenclatura del todo clara en parte porque el propio java no la tiene, de ahí que sea admisible expresarse de una forma u otra.

Saludos cordiales

1147
Hola en vez de #th{background-color:rgb(105.105.105);} tendría que ser th{background-color:rgb(105.105.105);} ¿por qué pones el símbolo #?

Y en lugar de separación con puntos tendría que ser separación con comas: th{background-color:rgb(105,105,105);}

Los colores no los tienes bien puestos, donde dice DimGray aparece un color rosado en vez de gris. Tendrías que poner cada color en su sitio para cumplir lo que pide el ejercicio, es decir, si el color que dice el texto es gris, tendría que tener color gris y no rosado.

Para aprender y dominar la programación tienes que repasar, entender, codificar... dedicarle tiempo para que los conocimientos se vayan asentando. Es normal que olvides algunas cosas, pero a base de repasar las irás reteniendo.

Saludos

1148
Hola en principio parece que tu equipo cumple con los requisitos:

Windows

    Microsoft® Windows® 8/7/Vista/2003 (32 or 64-bit)
    2 GB RAM minimum, 4 GB RAM recommended
    400 MB hard disk space
    At least 1 GB for Android SDK, emulator system images, and caches
    1280 x 800 minimum screen resolution
    Java Development Kit (JDK) 7
    Optional for accelerated emulator: Intel® processor with support for Intel® VT-x, Intel® EM64T (Intel® 64), and Execute Disable (XD) Bit functionality

¿Tienes instalado el jdk java? ¿Tienes suficiente espacio libre en disco duro?

1149
Hola creo que te has respondido de todas formas si quieres ver un ejercicio correctamente resuelto puedes verlo en https://www.aprenderaprogramar.com/foros/index.php?topic=1214.0

Saludos

1150
Hola toni, no sé si voy a ser capaz de responder a todas las cuestiones que puedan surgir, aunque podemos intentarlo.

Citar
Sobre esta opción he leido que si persona1 cambia más tarde, tal vez ¿? el objeto persona cambie en la misma forma sin haberlo decidido yo así.

Sí, es tal como comentas. No es cuestión de que decidas o no decidas, sino simplemente de que se trata de referencias a un mismo espacio de memoria, un mismo objeto. Por eso si cambia el objeto, ambas referencias reflejarán dicho cambio (esto puede parecer algo involuntario en el sentido de que el cambio lo origina una de las referencias, pero afecta a ambas, en ese sentido se puede decir que hace algo que no has decidido, pero esto es una forma de hablar).


Una cosa que observo es que estás prestando atención a la referencia que devuelve el método toString() cuando no lo has sobreescrito. Por ejemplo Agente@d09ad0  como referencia de un agente. No creo que sea buena idea en el sentido de que esta referencia es algo propio de la operación interna del compilador y de la gestión de memoria que haga java, por tanto algo que no podemos controlar y algo que diríamos "impredecible". Por ejemplo, supongamos que un objeto tiene como referencia Agente@d09ad0. Dicha referencia no es controlada por nosotros ni sabemos los mecanismos que la controlan, por tanto podría cambiar arbitrariamente según cierta lógica que desconocemos. Si usamos esta referencia para programar o analizar lo que ocurre es posible que no obtengamos resultados coherentes (o quizás sí, de ahí que no me parezca buena idea su uso).

He creado un pequeño código de prueba:

Código: [Seleccionar]
public class Test {   

    public static void main (String[] args) {
        Agente ag1 = new Agente("id1", 33);
        Agente ag2 = new Agente("id2", 44);

        System.out.println ("Antes de establecer identidad:\n"+ag1 + "\n"+ag2);
        System.out.println ("Antes de establecer identidad el agente1 tiene puntos: "+ag1.getExperienciaPuntos());
       
        ag1=ag2;
       
        System.out.println ("Después de establecer identidad:\n"+ag1 + "\n"+ag2);
        System.out.println ("Después de establecer identidad el agente1 tiene puntos: "+ag1.getExperienciaPuntos());
       
        System.out.println ("Ahora modificamos el agente 2 y establecemos que tiene 220 puntos");
        ag2.setExperienciaPuntos(220);
       
        System.out.println ("Ahora el agente1 tiene puntos: "+ag1.getExperienciaPuntos());
        System.out.println ("Ahora el agente2 tiene puntos: "+ag2.getExperienciaPuntos());

       
    }
} // Fin de la clase TestEquipo

El resultado de ejecución es este:

Antes de establecer identidad:
Agente@10079c0
Agente@11ecbae
Antes de establecer identidad el agente1 tiene puntos: 33
Después de establecer identidad:
Agente@11ecbae
Agente@11ecbae
Después de establecer identidad el agente1 tiene puntos: 44
Ahora modificamos el agente 2 y establecemos que tiene 220 puntos
Ahora el agente1 tiene puntos: 220
Ahora el agente2 tiene puntos: 220


Lo veo todo coherente. Una vez establecida la relación de identidad, da igual qué referencia modifiquemos, que al estar apuntando ambas referencias al mismo objeto, las dos referencias quedan modificadas.

Ahora tendríamos otro punto de análisis: el paso de objetos como parámetros

Java es un poco especial porque cuando pasas un objeto no pasas el objeto en sí, sino una referencia (a la posición de memoria) del objeto.


Copio desde otro hilo:

PREGUNTA:   ¿Los parámetros en Java se pasan por valor o por referencia? (Diferencia entre ambos sistemas discutida en http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=144:modulos-genericos-y-paso-de-parametros-por-valor-byval-o-por-referencia-byref-ejemplos-cu00207a&catid=36:curso-qbases-de-la-programacion-nivel-iiq&Itemid=60 y siguientes entregas de ese curso)

RESPUESTA:

A veces se piensa erróneamente que los tipos primitivos pasan por valor y los objetos por referencia, pero esto no es así. Todo parámetro pasa por valor.

La confusión radica en que cuando pasamos un tipo primitivo, este no es modificable dentro del método. En cambio, al pasar un objeto, sí se pueden producir modificaciones dentro del método. Pero la realidad es que cuando pasamos el parámetro no pasamos el objeto en sí, sino una referencia al objeto, y esta referencia es la que pasa por valor y funciona como una copia dentro del método, resultando que los cambios dentro del método no son conocidos luego fuera de él.


He hecho este pequeño código de prueba:

Código: [Seleccionar]
public class Test2 {   

    public static void main (String[] args) {
        Agente ag1 = new Agente("id1", 33);
        Agente ag2 = new Agente("id2", 44);
        System.out.println ("Ahora el agente1 tiene puntos: "+ag1.getExperienciaPuntos());
        System.out.println ("Ahora el agente2 tiene puntos: "+ag2.getExperienciaPuntos());
   
        System.out.println ("Pasamos al agente 1 como parámetro a probarAsignar y lo modificamos ");
        probarAsignar(ag1);
   System.out.println ("Ahora el agente1 tiene puntos: "+ag1.getExperienciaPuntos());
   System.out.println ("Esto ocurre porque lo que se pasa es una copia de la referencia");

   System.out.println ("Pasamos al agente 1 como parámetro a probarModificar y lo modificamos ");
   probarModificar(ag1);
   System.out.println ("Ahora el agente1 tiene puntos: "+ag1.getExperienciaPuntos());
   System.out.println ("Esto ocurre porque a través de la copia hemos modificado el objeto, aunque luego la copia se pierda los cambios al objeto permanecen");

   
    }
   
    public static void probarAsignar(Agente agX) {
        Agente ag3 = new Agente("id3", 66);
        agX=ag3;
    }
   
    public static void probarModificar(Agente agX) {
        agX.setExperienciaPuntos(99);
       
    }
}

El resultado es: Ahora el agente1 tiene puntos: 33
Ahora el agente2 tiene puntos: 44
Pasamos al agente 1 como parámetro a probarAsignar y lo modificamos
Ahora el agente1 tiene puntos: 33
Esto ocurre porque lo que se pasa es una copia de la referencia
Pasamos al agente 1 como parámetro a probarModificar y lo modificamos
Ahora el agente1 tiene puntos: 99
Esto ocurre porque a través de la copia hemos modificado el objeto, aunque luego la copia se pierda los cambios al objeto permanecen



Esto también parece coherente: el método usa como parámetro una copia local de la referencia. Las modificaciones a la referencia no permanecen porque la copia se destruye posteriormente. En cambio, si usamos la referencia para manipular el objeto, dichos cambios sí permanecen porque a través de la copia hemos accedido a modificar el objeto en sí.

Un poco lioso pero creo que de momento no han surgido inconsistencias...

Saludos

1151
Gracias. Para el paso a android no sé decirte con exactitud cómo podría hacerse... Este ejemplo parece estar bien: http://examples.javacodegeeks.com/android/core/activity/android-timertask-example/

Supongo que tendrás que buscar la forma de trasladarlo, o bien programarlo manualmente  ::) Si hay algún experto en android por ahí a ver si nos puede echar una mano.

1152
Hola lo primero pega el código Java que constituye la solución, será justo para quien haya leído o colaborado en el hilo poder ver la solución... quizás ayude a otras personas con problemas similares.

1153
Hola tienes algunos errores en el código que has escrito:

border style:hidden !important;

Le falta el guión en border-style

class="magicTitle style=

Le faltan las comillas de cierre en "magicTitle"

Has puesto solid blud en lugar de solid blue



Las respuestas:

la a) correcta

la b) correcta

la c) Se respetarán porque no han sido definidos de otra manera en línea


Saludos

1154
Hola Dan, tu clase CocinaCasa está correcta. Tu clase SalonCasa está correcta. A tu clase Casa le faltan los métodos getters y setters para los atributos salonCasa y cocina. Estos getters y setters tienen una complejidad añadida: que trabajamos con objetos. Puedes ver una explicación con más detalle en https://www.aprenderaprogramar.com/foros/index.php?topic=1220, te recomiendo su lectura.

Saludos

1155
Hola puedes hacerlo con this.getClass().getName()


Código: [Seleccionar]
String minombredeclase = this.getClass().getName();
System.out.println ("Ejecutando código de la clase: " + minombredeclase);

Saludos

1156
Hola, como veo que es tu primer post recomendarte que leas esto: https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Respecto al error en el programa, tienes mal la lógica de la condición en el bucle while, debe ser que se repita la petición si no se acierta:

while(numero != aleatorio);

El código quedaría así:

Código: [Seleccionar]
import java.util.Random;
import java.util.Scanner;

public class Adivinar_Numero {
    public static void main(String[] args) {
        Random rnd = new Random();
        Scanner entrada = new Scanner(System.in);
        int aleatorio;
        int numero;
        aleatorio = (int)(rnd.nextDouble()*5 + 1);   
        do   {     
            System.out.println("Adivina el número del 1 al 5: ");
            numero = entrada.nextInt();
        }
        while(numero != aleatorio);     
        System.out.println ("Has acertado!!!");

    }
}

Te recomiendo seguir este curso para comprender todo lo relacionado: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Saludos

1159
Hola Emma, la repetición de temas es altamente indeseable tal y como te ha explicado Jorge. No lo hagas por favor.

Y Jorge, cuando se da esta situación los moderadores podemos usar la opción que nos aparece en la parte inferior "Combinar temas" para fusionar los temas. También podemos borrar mensajes, etc. Si te parece bien haz tú mismo la combinación de estos temas, lo único que te hace falta es indicar el id del otro tema a combinar, en este caso sería el 2156 (ya que la url termina en 2156).

Saludos

1160

Hola viendo los apartados:

Citar
Analiza el siguiente código HTML. En él encontrarás tres etiquetas div. Haz lo siguiente:

a) Establece atributos class para cada una de ellas con valores <<principal>> para la primera, y <<secundario>> para la segunda y la tercera.

Bien


Citar
b) Usando CSS establece como color de texto el rojo (red) y tamaño de fuente el 130% respecto de lo normal para los elementos h1 que se encuentren dentro de un elemento cuyo valor class sea <<principal>>.

No está bien. .principal,h1{color:red;font-size:130%;} aplica la regla tanto a elementos de class principal como a elementos h1 allí donde estén.

Para hacer lo que pide este apartado tenemos que escribir:

.principal h1{color:red;font-size:130%;}

Sin la coma. Así lo que indica es que esta regla solo se aplica a elementos h1 dentro de elementos con class principal



Citar
c) Usando CSS establece como color de texto el verde y tamaño de fuente el 110% respecto de lo normal para los elementos h3 que se encuentren dentro de un elemento cuyo valor class sea <<secundario>>.

Mal

Para aplicar lo que dice el enunciado sería:

.secundario h3 {color:green;font-size:110%;}


Citar
d) Usando CSS establece como color de fondo el amarillo (yellow) para los elementos span que se encuentren dentro de elementos h3 que se encuentren dentro de elementos cuyo atributo class sea <<secundario>>.

Mal

La regla que has escrito .secundario h3,.secundario span{color:green;font-size:110%;background-color:yellow;}
aplica color de fondo amarillo tanto a elementos h3 dentro de elementos con class secundario como a elementos span dentro de elementos con class secundario y eso no es lo que pedía el enunciado.

La respuesta sería: .secundario h3 span{background-color:yellow;}


Citar
e) Establece como tipo de fuente para todo el documento HTML el tipo Arial.

Bien

En resumen nos quedaría esto (si no me he equivocado en nada):

body{font-family:Arial;}
.principal h1{color:red;font-size:130%;}
.secundario h3 {color:green;font-size:110%;}
.secundario h3 span{background-color:yellow;}

Para poder ver los resultados tienes que respetar el código HTML del ejercicio, por ejemplo esto no lo has respetado: <div><h3>Lanzamos el producto <span>X-FASHION</span></h3>

Además el ejercicio no dice que haya que hacer cosas como <span class="secundario"> Lo único que dice es que se establezca class para cada uno de los tres divs, no en los span dentro de los divs.

Saludos

Páginas: 1 ... 53 54 55 56 57 [58] 59 60 61 62 63 ... 93

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".