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 ... 26 27 28 29 30 [31] 32 33 34 35 36 ... 93
601
Hola lpeiro61 parece que hay algún error con el código que has pegado, al intentar compilarlo indica que falta la clase CantanteFamoso. A lo mejor se ha mezclado el código de otros ejercicios ¿?

Saludos

602
Hola Michel, en este curso tienes explicado ese problema y cómo solucionarlo, http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&Itemid=193

En concreto desde la entrega CU00839B hacia delante se explica todo lo relativo a conexiones y consultas a bases de datos

Saludos

603
Y también este hilo donde se explica que no debe usarse while(true): https://www.aprenderaprogramar.com/foros/index.php?topic=3074.0

604
Hola Ryche, te recomiendo leer los comentarios que he dejado en el hilo https://www.aprenderaprogramar.com/foros/index.php?topic=4299.0

Saludos

605
Hola

Léete este hilo https://www.aprenderaprogramar.com/foros/index.php?topic=1313.0

Y también artículos de esta sección: http://aprenderaprogramar.com/index.php?option=com_content&view=section&layout=blog&id=4&Itemid=18

Con eso te puedes ir haciendo una idea, si te quedan dudas consulta

Saludos

606
Hola lpeiro61 , en el constructor de la clase ListaCantentesFamosos encuentro algunas cosas a comentar:

Código: [Seleccionar]
    public ListaCantantesFamosos(String nombre)
    {
        nombreLista = nombre;
        listaCantantes = new ArrayList<String>();
        getNombreLista();
        listaCantantes.add("Rosendo");
        listaCantantes.add("Bon Jovi");
        listaCantantes.add("Loquillo");
        listarLosCantantes();
    }

El constructor es el lugar donde se inicializan (se establece el estado inicial) de los objetos.

Normalmente tendremos un constructor sin parámetros y otro con todos los parámetros. Tú has planteado un constructor que recibe sólo un parámetro cuando la clase tiene dos atributos. Está bien, puede hacerse, pero ten en cuenta que no será normalmente lo más habitual.

La línea getNombreLista(); dentro del constructor ¿hace algo? En principio te diré que no hace nada, es decir, que puedes eliminarla porque no tiene ningún efecto. getNombreLista() sirve para recuperar el nombre de la lista, pero aquí no veo que haga nada.

En el constructor añades tres cantantes como pedía el enunciado del ejercicio.

Y luego invocas el método listarLosCantantes();

Esto implica que cuando creas un objeto, se invoca el método, y ese método lo que hace es mostrar por consola la lista de cantantes. ¿Forma esto parte de la inicialización de un objeto? No ¿Debe ir esto en el constructor? No, porque el constructor está destinado a inicializar los objetos, no a mostrar mensajes por consola. Esta idea es extensible a métodos: cada método tiene una responsabilidad, no debe hacer otras cosas. Por ejemplo un método get debe devolver algo, no hacer otras cosas.

Fíjate por ejemplo en este método que has escrito:

Código: [Seleccionar]
    public void addCantante(String cantante)
    {
        listaCantantes.add(cantante);
        System.out.println("");
    }

¿Para qué sirve el método addCantante? Para añadir un cantante a la lista. No debe servir para nada más. Por tanto no debe incluir System.out.println("");, no es su responsabilidad. Esto se llama principio de cohesión: cada método tiene una responsabilidad.



Habrás visto en otros ejercicios en los foros que se llama el método para listar cantantes dentro del constructor o métodos que hacen varias cosas, etc. Quizás yo mismo haya pasado esto por alto en alguna ocasión, pero bueno, para eso hay distintas personas que revisamos ejercicios y no siempre nos damos cuenta o comentamos absolutamente todo...

Otro método:

Código: [Seleccionar]
    public void getNombreLista()
    {
        System.out.print(nombreLista + "\n");
    }

Un método get normalmente se usa para devolver algo. Por ejemplo return nombre;

Si lo que quieres es mostrar algo por pantalla es preferible que llames al método mostrarNombreEnConsola ó simplemente mostrarNombre.


Para tu bucle for extendido: lee los comentarios sobre el uso de i++ en https://www.aprenderaprogramar.com/foros/index.php?topic=2784.0


En tu método main: esta línea no tiene ninguna utilidad: lista.getNombreLista();

Aparece en un par de sitios. Ten en cuenta que esas invocaciones normalmente se hacen cuando queremos recuperar algo para hacer algo.

Por ejemplo System.out.println ("El nombre de la lista es "+ lista.getNombreLista());

Aquí estamos recuperando el nombre de la lista para hacer algo con él. Hacer simplemente lista.getNombreLista(); no tiene ningún efecto, lo estamos recuperando pero ¿para qué si no hacemos nada con él?


Esta línea: if(!seguir.equalsIgnoreCase("s")){break;}

Lee los comentarios al respecto en https://www.aprenderaprogramar.com/foros/index.php?topic=4096.0

Creo que eso es todo, no sé si me habrá quedado algún detalle atrás.

Te parecerá que son muchas correcciones y quizás pienses que tu código estaba mal. No, el código no estaba mal, de hecho funcionaba correctamente, y de hecho tiene bastantes cosas buenas. Muchas veces se presentan en el foro soluciones bastante peores.

Pero si quieres mejorar, te recomiendo que leas los comentarios anteriores con calma y dediques un tiempo a cada una de las cosas, que hagas pruebas, y luego que rehagas el ejercicio.

Me he extendido un poco, espero que te sirva de ayuda

Saludos

607
Aprender a programar desde cero / Re:CU00662B.No me compila
« en: 31 de Marzo 2016, 22:08 »
Hola la respuesta del problema está en lo que ha indicado lpeiro, no puedes aplicar un método a un objeto que no es del tipo correspondiente con el método.

En este caso no puedes aplicar substring a un objeto que no es un String.

Puede resolverse de varias maneras, una de ellas obteniendo un String a partir de la entrada de teclado, por ejemplo así:

Código: [Seleccionar]
import java.util.Scanner;
public class ComparaLetraALetra{
    public static void main(String[]args){
        System.out.println("Introduce la primera palabra:");
        EntradaDeTeclado trada1=new EntradaDeTeclado();
        String entrada1 = trada1.getEntrada();
        System.out.println("Introduce la segundo palabra:");
        EntradaDeTeclado trada2=new EntradaDeTeclado();
        String entrada2 = trada2.getEntrada();
        int longitud1=trada1.getLongitud();
        int longitud2=trada2.getLongitud();       
        for(int i=0; i<longitud1 || i<longitud2; i++){
            if(longitud1 >= i+1 && longitud2 >= i+1){
                if (entrada1.substring(i,i+1).equals(entrada2.substring(i,i+1))){
                    System.out.println("Letra "+(i+1)+": Igual en las dos palabras");
                }else{
                    System.out.println("Letra "+(i+1)+": No es igual en las dos palabras");
                }
            }else if (longitud1 < i+1){
                System.out.println("La palabra 1 no tiene " + (i+1) + " letras");
            }else{
                System.out.println("La palabra 2 no tiene " + (i+1) + " letras");
            }
        }
    }
}

Saludos

608
Hola sí viendo la consola me ha quedado más claro

Citar
El tipo de dato que devuelve responseText es de tipo: string ejercicioCU01216F.html:26:1
var jsonResponse = xmlhttp.responseText; contiene: <meta charset="utf-8"/>
{"nombreCiudad":["Madrid","Barcelona","Valencia","Sevilla","Zaragoza","Malaga","Murcia"]} ejercicioCU01216F.html:27:6
después de realizar el split(">") jsonResponse[1] contiene:
{"nombreCiudad":["Madrid","Barcelona","Valencia","Sevilla","Zaragoza","Malaga","Murcia"]} ejercicioCU01216F.html:30:6
y jsonResponse[0] contiene: <meta charset="utf-8"/

Me da la impresión de que el meterte el <meta charset="utf-8"/> en el json está relacionado con que lo tienes como cabecera en el archivo php, si no lo tuvieras creo que no ocurriría eso. De todas formas esto son detalles, lo importante es que el ejercicio esté bien planteado y que se entienda lo que ocurre, creo que por ese lado está todo explicado.

Saludos

609
¿En qué parte del código tienes los problemas? ¿Puedes poner un ejemplo con números reales donde se explique lo que debería hacerse? Por ejemplo: ejecutar tal clase, introducir como dato 20000, luego introducir 10000 luego... de modo que veamos un ejemplo real de lo que debería ocurrir.

610
Hola 3skai el ejercicio está bien resuelto, a seguir así

Recomendamos escribir <!DOCTYPE html> en lugar de <!Doctype html>

<html lang="en"> no sería correcto, recomendamos <html> y dentro de las etiquetas head escribir <meta charset="utf-8" /> para que reconozca todos los caracteres en español. En mi navegador por ejemplo lo que se ve es Inscripción Al Concurso Saber y Ganar. Para evitar problemas entre distintos navegadores incluye el meta charset como he comentado.

En el action es preferible poner algo aunque sea solo a modo de ejemplo, en vez de action="" escribir action="http://aprenderaprogramar.com" así sirve para pruebas.

Saludos

611
Hola matru el ejercicio está bien

Nota: eEn este ejercicio ya debería usarse el método toString() en lugar de un método como public void mostrarDatos()

El motivo es que toString() es el nombre estándar que se usa en programación Java para devolver una cadena de texto con la información sobre un objeto

Además el método toString() debe basarse en la reutilización del método de las superclases cuando se utiliza en las subclases

En https://www.aprenderaprogramar.com/foros/index.php?topic=2961.0 puedes ver un ejemplo de esto

Saludos

612
Hola, voy a comentar algo sobre la cuestión planteada por bermartinv. El tiempo que tarda en ejecutarse un código depende de varias cosas, entre ellas el diseño del código y la máquina sobre la que se ejecuta, el estado de la máquina, etc.

Para poder hacer comparaciones homogéneas normalmente el estudio se hace a nivel teórico y se suele hablar de órdenes de complejidad ó cotas superiores de coste.

El coste se suele estudiar en dos aspectos: espacio, normalmente referido al consumo de memoria que se realiza, y tiempo, normalmente referido al número de operaciones que se realizan (esto es así para poder hacer comparaciones homogéneas).

Es un tema interesante pero complejo, voy a dar algunas pistas, quien quiera investigar podrá encontrar mucha información en internet buscando "complejidad computacional".

Supongamos los siguientes códigos en un lenguaje imaginario

Código A

for i=1 to 15 {
mostrar "hola"
}


Código B

if i=1 { mostrar "hola1"}
elseif i=2 { mostrar "hola" }
elseif i=3 {mostrar "hola3" }
elseif i=4 {mostrar "hola4" }
elseif i=5 {mostrar "hola5" }

Simplificadamente se sigue esta regla: el coste de una operación es 1. En el código A tenemos una operación: mostrar "hola", cuyo coste es 1, pero como el código se repite 15 veces el coste es 15.

En el código B tenemos que quizás se cumpla la primera condición y entonces ya no se evalúan las demás, el coste sería 1. Pero si no se cumple la primera sino la segunda el coste sería 2. Pero si no se cumple la primera ni la segunda... Bueno, no se sabe lo que va a ocurrir. Entonces lo que hacemos es tomar la cota superior, es decir, el coste más grande que pudiéramos tener. El coste más grande sería tener que evaluar los cinco condicionales, con lo que el coste sería 5. En realidad podríamos decir que evaluar los 5 condicionales más el coste de la instrucción mostrar nos lleva a 6, pero en esos detalles no se suele entrar.

Muchas veces se puede diseñar un código de varias maneras, y muchas veces esto no implica variaciones significativas en el coste. Por ejemplo ejecutar un bucle con 5 repeticiones o tener 5 if viene teniendo un coste similar.

Otras veces sí tiene importancia el diseño. Algo con lo que se debe tener cuidado son los bucleas anidados, por ejemplo

for i=1 to 10
   for j = 1 to 10
      mostrar "hola"
   next j
next i

¿Qué ocurre aquí? Por cada repetición del bucle i hay 10 repeticiones del bucle j. Esto nos lleva a un coste de 10x10 = 100. Con bucles anidados los costes se disparan rápidamente.

Todo esto puede extenderse mucho, pero espero al menos que sirva como idea.

Saludos

613
Hola Leonel no entiendo muy bien lo que quieres hacer.

Por lo que entiendo tienes un ArrayList de objetos tipo Cuenta, y cada objeto tiene un atributo nombre y otro atributo saldo.

Puedes hacer operaciones como recorrer el ArrayList y sumar todos los saldos si quieres.

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

También si haces alguna prueba de código y lo pegas como se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0 podremos ver el código y darte una orientación

Saludos

614
Hola Pedro parece todo correcto y que funciona bien pero no puedo hacer pruebas porque interviene la base de datos

Si no me equivoco la cadena de respuesta que obtienes del servidor es esta:

{"nombreCiudad":["Bogot\u00e1","Medell\u00edn","Cali","Barranquilla","Cartagena","C\u00facuta","Soledad","Ibagu\u00e9"]}

Lo que no veo muy claro (a ver si puedes explicarlo) es esta parte:

var jsonResponse = xmlhttp.responseText.split(">");
var objeto_json = JSON.parse(jsonResponse[1]);

¿Por qué haces el split con >?

¿Y por qué haces el JSON.parse con el índice 1 de jsonResponse?


Saludos

615
Hola gracias a tí por tus observaciones que son siempre interesantes. En el caso que comentas al hacer xmlDoc.getElementById('bk101').firstChild.nextSibling.innerHTML='hola' pienso que lo que ocurre es que el archivo no cambia porque realmente no es una instrucción para manipular el archivo. Lo que cambia es la representación interna de los datos que mantiene el navegador. Es como si el navegador manejara una copia de los datos del archivo, y lo que estarías cambiando es lo que consta en la copia, no en el "original".

Saludos

616
Hola minicrazy para seguir los cursos recomendamos ir realizando los ejercicios tal y como se proponen en el curso, sin modificaciones, una vez se termine el curso sí estaría bien hacer pruebas y modificaciones

Para el ejercicio CU00619B puedes ver un ejemplo de respuesta en https://www.aprenderaprogramar.com/foros/index.php?topic=940.0

Saludos

617
Hola, con la variación que has hecho vemos una forma alternativa de trabajar, siempre es bueno ver alternativas. Gracias a tí por poner el código de la variación

Saludos

618
Hola Juan, si el paquete a utilizar se encuentra fuera del proyecto tienes que realizar la importación y esto se hace de una forma u otra dependiendo del IDE con el que se esté trabajando.

Por ejemplo en BlueJ tendrías que ir al menú Tools (Herramientas), Preferences, pestaña Libraries y desde ahí elegir la librería que quieres tener disponible en tu proyecto. Una vez la tengas ahí ya las puedes utilizar con import

En otros IDES (eclipse, netbeans) hay que buscar la opción equivalente

Saludos

619
Hola matru

En la clase Cuadrado tienes mal el cálculo del área.

    public double calcularArea(){
        double dimension = getDimensionPrincipal() * getDimensionPrincipal();
        double area = dimension *  3.1416;
        return area;
    }

En el cuadrado el área es solo el lado al cuadrado, no interviene para nada el número pi (3.1416)

Saludos

620
Hola matru el código que has pegado no compila, aparece un error en  pro.obtenerSalarioBase() porque falta el método obtenerSalarioBase() en la clase Profesor

Es posible que te hayas equivocado al pegar el código ¿?

Saludos

Páginas: 1 ... 26 27 28 29 30 [31] 32 33 34 35 36 ... 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".