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 2 3 4 [5] 6 7 8 9 10 ... 93
81
Hola, sí, solo se trataba de modificar la clase Casa como has hecho. En https://aprenderaprogramar.com/foros/index.php?topic=1220.msg6735#msg6735 hay una explicación importante, ya que como tú lo has hecho es una forma de hacerlo, pero posiblemente sean más interesantes otras. Ahora no te recomiendo que te detengas demasiado en esto, pero sí te recomendaría que más adelante volvieras a repasar este ejercicio para entender mejor por qué posiblemente sea más correcto crear un objeto nuevo con el set que establecer la igualdad con el objeto recibido. Pero como te comento, no te detengas ahora en esto, revísalo un poco más adelante.

Saludos

82
Hola Jlinos, el código está bastante bien planteado. En la clase Casa, están muy bien los constructores. En uno de ellos, que no recibe parámetros, se inicializan objetos SalonCasa y CocinaCasa vacíos. En otro, que sí recibe objetos como parámetros, se inicializan nuevos objetos que toman los atributos de los objetos recibidos.

Lo único que te ha faltado es:

- En la clase Casa, tienes 4 atributos. Cada uno de ellos debe tener métodos get y set, resultando un total de 8 métodos. Por tanto te faltan los métodos get y set de los atributos que son objetos. Una idea clave en Java es que hay que acostumbrarse a trabajar con objetos y tratarlos como cualquier otro atributo (teniendo en cuenta sus particularidades).

Por tanto deberías reescribir el código de la clase Casa para mejorar esto. Si quieres orientarte antes de hacerlo lee estos hilos:

https://aprenderaprogramar.com/foros/index.php?topic=1220.0

https://aprenderaprogramar.com/foros/index.php?topic=1238.0

Saludos

83
Hola, revisando lo que has comentado mi interpretación es la siguiente:

El código ejemplo debería tener la comilla de cierre que le falta en <h2 onclick="this.textContent='Uuuuuuh!">Haz click <span style="color:blue;">pero no existe un textContent modificable</span></h2>

El no tenerla es una errata que da lugar a que salte un error del tipo: SyntaxError: '' string literal contains an unescaped line break

Al introducir la comilla de cierre, lo que ocurre es lo que se explica en la entrega CU01136E: "Es importante resaltar que con textContent se extrae no sólo el texto directamente asociado al nodo, sino también el texto contenido en otros nodos hijos."

El texto del ejemplo debería ser en lugar de "Haz click pero no existe un textContent modificable" lo siguiente:

"Haz click para modificar el contenido del nodo padre e hijos"

Gracias por apuntarlo.

Saludos

84
Hola luislo, para escribir en los foros deben seguirse las indicaciones que se dan en https://aprenderaprogramar.com/foros/index.php?topic=1460.0

Debes escribir un título más explicativo, con el código de ejercicio en mayúsculas, e incluir el código con el que estés trabajando, así como hacer una descripción más detallada.

Por lo que comentas parece que no tuvieras bien instalado o no tuvieras activo el servidor web necesario para que se genere correctamente la página web cuando invocas la ruta adecuada en el navegador, pero haría falta más información. Por ejemplo ¿so accedes a http://localhost eres capaz de visualizar algo o no visualizas nada?

Saludos

85
Hola, no entiendo muy bien lo que se pretende, pero si fuera extraer parte de una cadena de texto que siempre tiene la misma longitud, puedes hacerlo con la función mid.

mid (String, num) devuelve todos los caracteres empezando a partir de la posición especificada del String

mis (String, num1, num2) devuelve num2 caracteres empezando por la posición num1 de carácter en el String.

Ejemplo

Código: [Seleccionar]
' Creates text string.
Dim TestString As String = "Mid Function Demo"

' Devuelve "Mid" porque toma los caracteres desde la posición 1 y toma 3 caracteres
Dim FirstWord As String = Mid(TestString, 1, 3)

' Devuelve "Demo" porque empieza en la letra 14 y devuelve 4 caracteres contando el inicial D-1, e-2, m-3, o-4
Dim LastWord As String = Mid(TestString, 14, 4)

' Devuelve "Function Demo" porque empieza en el caracter 5 (F) y devuelve todo el fragmento de cadena a partir de ese caracter
Dim MidWords As String = Mid(TestString, 5)

Saludos

86
Ahora bien. Posiblemente el método getDatosCasa() excede un tanto las responsabilidades que tendría un método de la clase Casa. Se dice que una clase es responsable de sus atributos, y por ejemplo el número de televisores no es un atributo de la clase Casa, con lo cual no debería manejarse dentro de esta clase. De cualquier forma esto no es muy relevante, el ejercicio está bien.

Saludos

87
Ahora bien! Es importante que pruebes tu código, un buen programador nunca deja su código sin probar.

Saludos

88
Hola Toshirou se comprueba un código bien trabajado por tu parte. Te hago algunas indicaciones de mejora.

Hay nombres de clases que no están correctamente puestos según los convenios que siguen los programadores Java. Por ejemplo en lugar de ProductosFrescos el nombre de la clase debería ser ProductoFresco. Puedes ver una explicación de cómo nombrar las clases en https://aprenderaprogramar.com/foros/index.php?topic=3035.msg13698#msg13698

Por otro lado, has creado una clase ProductosFrescos que lo único que hace es invocar a la superclase. Si no hace nada nuevo, ¿para qué quieres esta clase?

La clase ProductosRefrigYCongel la veo bien planteada para agrupar cosas comunes a los productos refrigerados y congelados.

Aunque el ejercicio no lo pide, si al imprimir el contenido del envío quieres imprimir primero los frescos, luego los refrigerados, etc. podrías hacerlo de la siguiente manera: primero recorres el envío y usando un if con instanceof vas añadiendo los objetos de cada tipo a una nueva lista. Una vez tienes todos los objetos en sus listas, recorres cada lista y los muestras. Hay ejemplo de uso de instanceof en https://aprenderaprogramar.com/index.php?option=com_content&view=article&id=666:sobreescribir-metodos-tostring-y-equals-en-java-ejemplos-y-ejercicios-resueltos-comparar-objetos-cu00694b&catid=68&Itemid=188, no obstante esto no es algo que se pidiera para esto ejercicio.

Puedes fijarte en esta otra solución del foro y compararla con la tuya: https://aprenderaprogramar.com/foros/index.php?topic=2959.0

Saludos desde España

89
Hola Toshirou. A tu código le faltaban los import. Se los he añadido, pero al intentar compilarlo me salta un error en la línea  var cantantes = new ListaCantantesFamosos();

¿Has probado que el código compile y funcione correctamente?

Saludos desde España

90
Hola, este ejercicio no está bien resuelto porque no se trabaja adecuadamente con los objetos que son atributos de la clase Casa. Por ejemplo no existen los métodos get y set para los atributos objeto. Comprender esto puede resultar un poco trabajoso.

Para el entendiemiento de estos conceptos recomendamos leer estos hilos con calma:

https://aprenderaprogramar.com/foros/index.php?topic=1220.0
https://aprenderaprogramar.com/foros/index.php?topic=1238.0

Una vez leídos, lo recomendable es volver a escribir la propuesta de solución al ejercicio pues así se verá si se han entendido bien los conceptos o no.

Saludos

91
Hola, ejercicio bien resuelto.

Saludos

92
Hola, este ejercicio no está bien resuelto.

El problema está en que aquí tienes un constructor que recibe parámetros, pero sin embargo has escrito:

Código: [Seleccionar]
    public Motor(int valorTipoBomba, String valorTipoFluido, String valorCombustible){
        tipoBomba = 0;
        tipoFluido = "";
        combustible = "";
    }

Los parámetros sirven para inicializar los campos de un objeto cuando se crea. Por ejemplo, voy a crear un objeto y le paso como parámetros tipo bomba 3, tipo fluido "liquido" y combustible "gasolina". Esos parámetros se usarán para inicializar el objeto. Sin embargo con tu código da igual los parámetros que le pases que el tipo bomba será cero, el tipo fluido ninguno (cadena vacía) y combustible ninguno (cadena vacía). ¿Entonces para qué sirven los parámetros? La inicialización a ceros o cadenas vacías se hace cuando no hay parámetros y por tanto no sabemos con qué valores se deben inicializar los objetos. Pero si el constructor tiene parámetros, será para utilizarlos.

Por otro lado, visto lo que ocurre cabe deducir que no has probado tu código. Es importante que cuando crees código lo pruebes. En este caso deberías haber creado un objeto en BlueJ como se explica en el curso y haberle introducido por ejemplo como tipo de bomba 3, y así comprobar que el código no funciona como debería.

Este código debería corregirse. Para ello puedes repasar tanto el curso como otros hilos del foro.

Saludos

93
Hola, el ejercicio está perfectamente resuelto.

Saludos

94
Aprender a programar desde cero / Re:Arboles Binarios en java
« en: 08 de Julio 2018, 13:14 »
Hola, para escribir en los foros se recomienda seguir las indicaciones que se dan en https://aprenderaprogramar.com/foros/index.php?topic=1460.0

En tu caso falta mucho código, tan solo has puesto un método. En este hilo se tratan los árboles binarios, quizás te sea de ayuda: https://aprenderaprogramar.com/foros/index.php?topic=1428.0

Saludos

95
Hola por un lado felicitarte por haber desarrollado este código. Por otro lado te comento las cosas que veo mejorables.

- Con la herencia se pretende reutilizar código de las superclases en las subclases. Por ejemplo, si en la superclase Producto se usa el método imprimirProducto() en la clase ProductoFresco reutilizamos ese código para evitar repetirlo. Esto lo has hecho correctamente en

Código: [Seleccionar]
public void imprimirProductoFresco() {
imprimirProducto();
System.out.println("La fecha de envasado es: " + getFechaEnvasado() + " el pais de origen: " + getPais());
}

De esta forma logras reutilizar el código de la superclase en la subclase. (Nota: más adelante en el curso se explica el método toString pero ahora no nos vamos a meter con eso).

Sin embargo en la clase ProductoReferenciaFrio no haces esta reutilización de código. Luego introduces imprimirProducto() en la clase ProductoRefrigerado, pero no en la clase ProductoCongelado, ni en ProductoCongeladoPorAgua, etc. No acabo de entender el por qué.

Luego utilizas en el main

refrigerado3.imprimirProductoReferenciaCongelado();
refrigerado3.imprimirProductoRefrigerado();

Resulta confuso... si refrigerado3 es un producto refrigerado ¿Por qué invocas el método refrigerado3.imprimirProductoReferenciaCongelado(); si no es un producto congelado? Ese método lo tienes dentro de la clase ProductoReferenciaFrio pero eso no es correcto: crea confusión. Si el producto no es congelado, no debe tener un método que se llame imprimirProductoReferenciaCongelado

La idea debería ser:

a) Introducir el código a reutilizar en la clase más elevada en la jerarquía posible. En este caso deberías reutilizar imprimirProducto() en la clase ProductoReferenciaFrio

b) En cada subclase ir llamando al método de la superclase que sea necesario, más las instrucciones específicas de esa subclase.

c) Evitar tener que hacer dobles invocaciones para una tarea que puede solucionarse con un solo método: para eso está la herencia.

En resumen, las correcciones a hacer en este ejercicio serían:

- Corregir los nombres de métodos para evitar incoherencias (por ejemplo que se pueda invocar imprimirProductoReferenciaCongelado sobre un producto que no es un congelado, esto no tiene lógica). Es importante que los nombres de clases y métodos sean coherentes y no induzcan a confusión.

- Estructurar bien la reutilización de código desde las superclases hasta las subclases de modo que solo sea necesario llamar a un método para mostrar la información de un producto por ejemplo


Saludos

96
Hola gabrms: en este caso el título del tema está bien pero le ha faltado el código de ejercicio: CU01024D (ya lo edito yo y lo introduzco).

El ejercicio está bien resuelto, aunque he tenido problemas al visualizarlo porque el color de fondo de la tabla es violeta y la letra también violeta, con lo cual no se ve demasiado bien. Para verlo mejor he introducido esto como última línea del código css: .a, .b, .c, .d, .e, .f{color: black;}

Sobre el problema del segundo código, en este hilo: https://aprenderaprogramar.com/foros/index.php?topic=5124.0 hay una explicación sobre nth-child que quizás sea la explicación a por qué no te funciona el código.

Saludos.

97
Hola gabrms: el código lo has pegado correctamente. Lo único que te ha faltado es poner un título adecuado al tema. En general deben seguirse las pautas indicadas en este hilo: https://aprenderaprogramar.com/foros/index.php?topic=1460.0.

El título que has puesto es "Entrega nº20 del Tutorial básico del programador web: CSS desde cero." y ahí falta una cosa básica: el código del ejercicio, en este caso CU01020D. Mediante ese código se facilita identificar el ejercicio de que se trata, e introduciéndolo en el buscador del foro puedes obtener como resultados todos los hilos donde se habla de este ejercicio. Igualmente en lugar de el título utilizado es preferible usar palabras clave que permitan usar el buscador del foro cuando se tenga interés por un tema. Por ejemplo en este caso el título podría ser "Colores HTML - CSS con transparencia indicada como rgba gradación creciente CU01020D"

Tu ejercicio está bien resuelto y bien presentado. En este caso el ejercicio no pedía que se hiciera con table o con div, por tanto está igualmente bien resuelto de una manera u otra. En general, a la hora de maquetar la tendencia es a no usar tablas y darle preferencia al uso de div porque esto presenta algunas ventajas. No obstante, será la experiencia quien mejor te vaya aconsejando cuándo usar una cosa u otra. Hay una cosa que no me ha gustado, y es que apliques un borde y un ancho al body del 80%. El body es como el lienzo y por tanto no se le suele poner borde ni limitar su anchura. No obstante, hacerse se puede hacer y además el ejercicio no está mejor ni peor por ello.

Saludos.

98
Hola, para quien consulte este hilo, dejo un código para calcular la inversa de una matriz cuadrada invertible. Este problema no es nada sencillo de programar. En primer lugar hay que tener claros los conceptos y métodos matemáticos. Y luego hay que programarlo, que aún teniéndolo claro no es algo que se haga rápido. Por tanto no es un problema para hacer a modo de entretenimiento, sino más bien algo indicado para quien esté estudiando matemáticas.

Código: [Seleccionar]
    //Programa de ejemplo para calcular la inversa de una matriz

    import java.util.Scanner;

    public class Inverse

    {
        public static void main(String argv[])
        {
            Scanner input = new Scanner(System.in);
            System.out.println("Enter the dimension of square matrix: ");
            int n = input.nextInt();
            double a[][]= new double[n][n];
            System.out.println("Enter the elements of matrix: ");
            for(int i=0; i<n; i++)
                for(int j=0; j<n; j++)
                    a[i][j] = input.nextDouble();
            double d[][] = invert(a);

            System.out.println("The inverse is: ");

            for (int i=0; i<n; ++i) {
                for (int j=0; j<n; ++j)

                {System.out.print(d[i][j]+"  ");}

                System.out.println();
            }
            input.close();
        }


        public static double[][] invert(double a[][])         {

            int n = a.length;
            double x[][] = new double[n][n];
            double b[][] = new double[n][n];
            int index[] = new int[n];
            for (int i=0; i<n; ++i)
                b[i][i] = 1;

     // Transform the matrix into an upper triangle

            gaussian(a, index);

     // Update the matrix b[i][j] with the ratios stored
            for (int i=0; i<n-1; ++i)
                for (int j=i+1; j<n; ++j)
                    for (int k=0; k<n; ++k)
                        b[index[j]][k]
                            -= a[index[j]][i]*b[index[i]][k];

     
     // Perform backward substitutions
            for (int i=0; i<n; ++i)             {
                x[n-1][i] = b[index[n-1]][i]/a[index[n-1]][n-1];
                for (int j=n-2; j>=0; --j)                 {
                    x[j][i] = b[index[j]][i];
                    for (int k=j+1; k<n; ++k)
                    {
                        x[j][i] -= a[index[j]][k]*x[k][i];
                    }

                    x[j][i] /= a[index[j]][j];
                }
            }
            return x;
        }

    // Method to carry out the partial-pivoting Gaussian
    // elimination.  Here index[] stores pivoting order.

        public static void gaussian(double a[][], int index[])  {

            int n = index.length;
            double c[] = new double[n];

     // Initialize the index
            for (int i=0; i<n; ++i)
                index[i] = i;

     // Find the rescaling factors, one from each row
            for (int i=0; i<n; ++i) {
                double c1 = 0;
                for (int j=0; j<n; ++j) {
                    double c0 = Math.abs(a[i][j]);
                    if (c0 > c1) c1 = c0;
                }
                c[i] = c1;
            }

     // Search the pivoting element from each column
            int k = 0;
            for (int j=0; j<n-1; ++j) {
                double pi1 = 0;
                for (int i=j; i<n; ++i)  {

                    double pi0 = Math.abs(a[index[i]][j]);
                    pi0 /= c[index[i]];
                    if (pi0 > pi1) {
                        pi1 = pi0;
                        k = i;
                    }
                }

     
       // Interchange rows according to the pivoting order
                int itmp = index[j];
                index[j] = index[k];
                index[k] = itmp;
                for (int i=j+1; i<n; ++i) {
                    double pj = a[index[i]][j]/a[index[j]][j];

     // Record pivoting ratios below the diagonal
                    a[index[i]][j] = pj;

     // Modify other elements accordingly
                    for (int l=j+1; l<n; ++l)
                        a[index[i]][l] -= pj*a[index[j]][l];
                }
            }
        }
    }

Ejemplo de ejecución

$ javac Inverse.java
$ java Inverse
Enter the dimension of square matrix:
2
Enter the elements of matrix:
1 2
3 4
The Inverse is:
-1.9999999999999998  1.0 
1.4999999999999998  -0.49999999999999994

Parece que hay un problema con los redondeos decimales. Quien esté interesado aquí hay una explicación sobre redondeo: https://aprenderaprogramar.com/index.php?option=com_content&view=article&id=960:java-redondear-a-2-o-mas-decimales-errores-precision-bigdecimal-roundingmode-biginteger-cu00907c&catid=58&Itemid=180

Saludos

99
Hola, respuestas correctas. En la respuesta a la opción b) añadiría lo siguiente: si existen dependencias entre scripts y uno depende de otro que falla, posiblemente salten dos errores (el que generó el error inicial y el que tenía dependencia del otro), no llegando a ejecutarse ninguno de ellos. Así podría ocurrir que se encadene una secuencia de errores debido a dependencias entre scripts.

Saludos

100
Hola, todo correcto. Lo más adecuado para el ejercicio 1 es primero escribir la respuesta sólo reflexionando (sin ejecutar ningún código) y luego si se quiere comprobar con código, como has hecho, así que comprobado está.

Respecto a NaN copio un fragmento de la entrega CU01112E: Para JavaScript NaN (abreviatura de “Not-a-Number”) es un valor numérico especial, que representa “número ilegal o no representable”.

Sobre que sea una propiedad de un objeto global, creo que es mejor avanzar en el curso antes de hablar sobre esto, porque a medida que se avanza se irá entendiendo mejor todo esto.

Ciertamente es curioso que NaN comparado con sí mismo arroje "distinto", porque parece contradictorio. Una faceta más del lenguaje que conviene conocer...

Saludos

Páginas: 1 2 3 4 [5] 6 7 8 9 10 ... 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".