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 - César Krall

Páginas: 1 ... 39 40 41 42 43 [44] 45 46 47 48 49 ... 68
861
Mientras te mantengas en valores de entre 5 y 70 Kb aproximadamente podemos decir que las imágenes son ligeras. Si te vas a valores superiores puntualmente porque es necesario tampoco pasa nada. Pero si tienes muchas imágenes que ocupan más espacio tendrías que plantearte si estás haciendo algo mal. Si quieres que se vean mejor en tablets tendrás que emplear imágenes de más calidad y más pesadas, con lo cual penalizas la eficiencia de la página. Tienes que elegir entre rapidez y calidad. Lo ideal es optar por un término medio, es decir, ni imágenes de muy baja calidad que pixelen mucho ni imágenes de muy alta calidad que ralenticen la carga de la aplicación. Saludos.

862
Aprender a programar desde cero / Re:Revision ejercicio CU00642B
« en: 23 de Julio 2014, 18:27 »
Hola, si quieres poner un constructor que reciba parámetro hay varias formas de hacerlo, pero la más simple sería esta:

Código: [Seleccionar]
//Programa Casa
//Hecho por Osvaldo Maciel Julio 19 2014

public class Casa{
    //Atributos
   private double  superficie;
   private String direccion ;
   //sintaxis private - Nombre de la clase que vamos a llamar - nombre del objeto referencia(que tiene que ver con la clase que estamos mandando llamar)
   private SalonCasa objetosalonCasa;
   private CocinaCasa objetoCocina;
   
   
   
   // Constructor 1 establecemos los valores por defecto de los atributos simples (inicializamos)
   //y creamos nuevos objetos en caso de ser atributos objeto
   public Casa(){
   
    //Atributos simples
    superficie=0;
    direccion="desconocido";
   
   //estos Son Atributos Objetos, con esta declaracion vamos a crear nuevos objetos
   //sintaxis nombre del objeto referencia
    objetosalonCasa= new SalonCasa();
    // estoy creando un nuevo objeto SalonCasa
    objetoCocina= new CocinaCasa();
}//cierre Constructor


//Constructor 2, sirve como metodo getter ya que recibe datos como parametro


public Casa(double valorSuperficie, String valorDireccion,SalonCasa esteObjetoSalonCasa, CocinaCasa esteObjetoCocinaCasa ){
    //sintaxis public - Nombre del constructor(parametros simples y parametros tipo objetos)
    //los parametros simples se declaran como (tipo- nombre)
    //los parametros tipo objeto se declaran (clase donde esta el objeto que necesitamos- nombre que le damos en este momento al objeto)
    //se declaran en este constructor variables simples y de tipo objeto como parametros
    //Las Variables simples quearan fijas cuando sean requeridas en el objeto pero las de objeto se necesitan crear los objetos

       
                           //Creacion de los objetos en un Constructor2
     
  superficie =   valorSuperficie;
  valorDireccion= valorDireccion;
  objetosalonCasa = esteObjetoSalonCasa;
  objetoCocina = esteObjetoCocinaCasa;
    }//cierre Constructor2
                           
               
   
   
}//Cierre Clase

Saludos

863
Hola, está todo correcto, la única cuestión a mejorar es usar nombres como setNombre en vez de setNombre, a esta notación se le llama "notación camello" o camelCase. Saludos.

864
De todo un poco... / Re:Buscando compañeros para programar
« en: 23 de Julio 2014, 18:17 »
Hola, hay bastantes personas haciendo el curso "Programación Java desde cero" (https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188) que participan en los foros y con los que intercambiamos ideas y consultas. Te invito a participar en los hilos relacionados. Saludos  ;D

865
Hola, las imágenes no debes duplicarlas en distintas carpetas porque eso sería perder eficiencia y hacer más pesada y de lenta carga la aplicación; si te resulta necesario, debes invocar desde cada lugar de la aplicación dónde (la ruta) en que se deben buscar las imágenes.

Deberías comprobar que las imágenes son ligeras (que no tienen unas dimensiones o tamaños en Kb que excedan lo razonable, p.ej. una imagen de un botón no ocupa normalmente más de 30 Kb). Sobre el formato, png es un formato adecuado.

Saludos.

866
Aprender a programar desde cero / Re:Ejercicio CU000619B
« en: 18 de Julio 2014, 16:49 »
Hola, para buscar temas relacionados simplemente introduce el código, (en este caso CU00619) del ejercicio en el buscador del foro.

Aquí tienes estos enlaces:

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

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

Saludos

868
Hola, en los ejercicios de CU00634B tan sólo se plantea saber razonar cómo funcionan los operadores. La aplicación práctica se ve en las entregas siguientes, por ejemplo en la entraga CU00636B ya hay ejemplos y ejercicios sobre el uso de estos operadores y sobre cómo mostrar mensajes por pantalla según los valores que tomen las variables. No sé si te referías a eso o a otra cosa. Saludos.


869
Hola, por favor cuando escribas un código indica si es un ejercicio la referencia del ejercicio (por ejempo CU00630B). Si no es un ejercicio, indica cuál es el objetivo del código (qué es lo que se supone que hace descrito con lenguaje natural). Ten en cuenta que un código es correcto si cumple los objetivos, pero si no sabemos los objetivos no podemos saber si es correcto. Saludos.

870
Aprender a programar desde cero / Re:Revision Ejercicio CU00633
« en: 16 de Julio 2014, 10:29 »
Hola, el código es correcto aunque tendrías que hacer algunas mejoras.

Hay un aspecto de diseño que no es correcto. Estableces un atributo multiplo5=5; y lo inicializas al mismo tiempo que lo declaras.

En general un atributo se debe inicializar en el constructor, no al mismo tiempo que lo declaras.

En este caso, el atributo podría eliminarse o renombrarse. Eliminarse ya que puede sustituirse por 5, no hay necesidad de usarlo. Si lo usamos previendo que en el futuro en vez de 5 pueda ser otro número, habría que renombrarlo y dejar el nombre como multiplo en lugar de como multiplo5.

Por otro lado cuando se establece la edad del médico con set aparece un mensaje como:

Ha cambiado la edad del Medico:   NingunoNingunoNinguno0La Nueva edad es:   72


La presentación no queda bien (por ejemplo faltan espacios). Por otro lado tener en cuenta que los métodos set y get no deben incluir mensajes por consola (a no ser que el ejercicio específicamente los pida)

El nombre de método setCalculoParaMultiploEdad no es correcto. set es un prefijo que se usa para establecer valor de atributos. En este caso el método no es para establecer valor de un atributo, sino para hacer un cálculo, por tanto el nombre correcto sería calcularCuantoFaltaParaMultiploEdad o similar.

Saludos.

871
Hola, por favor para pegar código usa el botón # que aparece en el editor del foro. Pulsa el botón # y te aparecerán las etiquetas [ code ] ... [ / code], pulsa el botón previsualizar y corrige si es necesario o pulsa "Publicar" para hacerlo definitivo.

He revisado tu código y está bien, no tienes errores.

Sobre para qué sirve set y get. Ten en cuenta que un objeto almacena información (los atributos que están definidos en la clase). set es la forma de establecer valores para dicha información y get es la forma de recuperar la información.

La sentencia return indica que se devuelve algo. Por ejemplo return edad; indica que cuando se pida invoque getEdad() se devolverá la edad que está almacenada en el objeto.

Sigue avanzando con el curso pues a medida que vayas avanzando irás comprendiendo mejor los conceptos.  :D


872
Sí, puedes utilizar la notación de punto para invocar el método función, esa es la forma de recuperar nombre, apellido 1 y apellido 2 todo junto. A medida que vayas haciendo ejercicios lo verás más claro. Saludos.

873
Aprender a programar desde cero / Re:Duda sobre Iterator
« en: 15 de Julio 2014, 20:33 »
Hola, se utiliza la copia para dirigir el recorrido, pero la colección original se modifica si actúas sobre algún elemento de ella.

Sobre los errores: crea un ArrayList de Integer y añádele 5 números, de modo que sus índices irán de 0 a 5.

A continuación usa un for tradicional desde i = 0 hasta i=4. Cuando llegues al elemento 2 bórralo (remove). ¿Cuántos elementos te quedan en el ArrayList? Te quedan 4, de modo que te saltará un error al tratar de alcanzar el índice 4.

Usando iterator no tendrás ese error, porque el recorrido se hace sobre la copia. Por tanto aunque el ArrayList original ya no tenga 5 elementos, la copia sí los tiene y se va recorriendo sin importar que hagas el borrado de elementos.

Si escribes el código del ejemplo tanto con un for tradicional como con iterator entenderás mejor la diferencia. Saludos  ;D

874
Hola, creo que la referencia CU00632 no es, sino que es la CU00630 ¿?

Tienes que corregir lo siguiente:

- Toda signatura tiene que empezar con public ó private, mira los ejemplos del curso.

- Cuando escribas un nombre de método como setsaludometeladuraciondetracks tienes que intercalara mayúscula cada vez que comience una palabra, en este caso sería setSaludoMeteLaDuracionDeTracks

- GetDuracionDisco(float Valorsumaladuraciondetodoslostracks  ) sería incorrecto, la información sobre la duración de los tracks estará almacenada en los atributos de la clase, entonces ¿qué es lo que le pasas como parámetro Valorsumaladuraciondetodoslostracks ? Esto no se lo debes pasar, se supone que el método se encargará de extraer esa información de entre la información contenida en la clase. Aquella información que posee el objeto (o la clase) no hay que pasársela como parámetro de un método.

En el método setingresanuevotituloyduracion(String ValorTitulotrack, float ValorDuracionTrack), aquí sí necesitas pasarle esa información porque es una información de la que no dispone la clase, por tanto tienes que pasársela.

Saludos.
 

875
Hola Osvaldo, por favor cuando pegues código usa el botón # que te aparece en el editor del foro. Pulsa # y te aparecerán las etiquetas [ code ] ... [ /code], luego pega el código entre esas dos etiquetas y pulsa previsualizar. Si ves algo que corregir, corrígelo y vuelve a pulsar previsualizar, si no pulsa publicar.

Esto es incorrecto:

String nombapell=apellido1=apellido2;

Esto no es válido en Java, no puedes poner varios iguales así seguidos.

Tampoco puedes poner esa instrucción para ligar los atributos en la declaración de atributos, piensa que en la parte inicial de la clase lo que haces es declarar los atributos.

Para establecer ese tipo de relaciones tendrías que hacerlo en el constructor, que es donde se establecen valores y relaciones entre los atributos de la clase.

Por ejemplo:

Código: [Seleccionar]
public class MedicoNuevo{
   
    String nombre, apellido1, apellido2, especialidad, ife;
    String nombreapell;
    int edad;
    boolean casado;
   
    //Definimos el constructor cuando se cree los objetos medico
   
    public MedicoNuevo(){
        nombre= "Ninguno";
        apellido1= "Ninguno";
        apellido2= "Ninguno";
        edad= 0;
        casado= true;
        ife= "Ninguno";
        especialidad= "Ninguno";
        nombreapell = nombre + apellido1 + apellido2;
    }// Cierre constructor
   
}

Sin embargo no es buena idea tener un atributo que sea la concatenación o suma de otros atributos, porque estarías repitiendo información. Para obtener esa relación entre atributos lo mejor es tener un método:

Código: [Seleccionar]
public class MedicoNuevo{
   
    String nombre, apellido1, apellido2, especialidad, ife;
    // NO PONERLO AQUÍ String nombreapell;
    int edad;
    boolean casado;
   
    //Definimos el constructor cuando se cree los objetos medico
   
    public MedicoNuevo(){
        nombre= "Ninguno";
        apellido1= "Ninguno";
        apellido2= "Ninguno";
        edad= 0;
        casado= true;
        ife= "Ninguno";
        especialidad= "Ninguno";
       
    }// Cierre constructor
   
    public String obtenerNombreYApellidos() { //LO OBTENEMOS COMO RESULTADO DE MÉTODO
        return nombre + apellido1 + apellido2;
    }
   
}

876
Hola, como bien dices aprender java requiere de perseverancia y esfuerzo. El código se ve mucho mejor estructurado - diseñado, pero todavía quedan cosas que habría que mejorar:


- Error grave de diseño: tienes dos clases denominadas AnalizadorVocalesCadena1 y AnalizadorVocalesCadena2 que prácticamente tienen el mismo código. Esto no es correcto. El código no puede repetirse en distintos lugares, el código debe ser único (no repetición - evitar duplicidades). Por tanto estas dos clases deben fusionarse en una sola clase donde en vez de un atributo cadena1 y cadena2 simplemente tengas un atributo cadena y en vez de referirte a cadena1 y cadena2 simplemente te refieras a la cadena. Luego crearás dos objetos si te hace falta, uno para cadena1 y otro para cadena2. O más objetos si tuvieras más cadenas. Creas tantos objetos como sean necesarios, pero nunca duplicas el código de una clase.

-manejadorDeEntradas quizás es preferible que sea una clase independiente que un método

-En la clase con el main elimina métodos como comparandoCaracteres que sólo tienen dos líneas. Un método sería adecuado si vamos a agrupar algo  unitario y agrupamos diez, veinte o treinta líneas, pero para dos líneas simplemente escribe el código dentro del método main.

- De la misma manera que no podemos duplicar el código de las clases no podemos duplicar el código de los métodos, por tanto no puede haber un método vocales1 y otro método vocales2 ni getEntrada1 y getEntrada2 etc.


La clase EntradaPorTeclado parece correcta.

En la clase ComparadorDeCaracteres tienes un método que se llama comparando. Ese nombre de método no es correcto. El nombre debe ser de tipo comparaCaracterACaracter, o comparaPalabras ó comparaLetraALetra... algo que describa lo que hace el método. comparando es demasiado confuso, no describe lo que hace el método. Por ejemplo en la clase AnalizadorDeCaracteresSobrantes el nombre de método extractorDeCaracteresSobrantes está perfecto.

En la clase DetectorDeCadenaMasLarga hay otro nombre de método que no es adecuado: detectando(), por el mismo motivo.

Hay diversas mejoras que conviene realizar, pero en lo que es el diseño el cambio respecto al código anterior ha sido notable, lo que indica que vas asimilando cómo se trabaja en programación orientada a objetos.

Saludos

877
Hola toni:

Sobre CU00670B: respuesta correcta

Sobre CU00672B: correcto el código, además el efecto de rellenar gráficamente mostrando ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ es una mejora que queda bastante bien.

Saludos,

878
Hola, el código se ve bien trabajado, se puede decir que funciona, pero hay bastante que mejorar y que comentar.

Clase EntradaPorTeclado: como su nombre indica, lo lógico es que tenga la misión de manejar entradas de teclado (digamos que pedirlas, almacenarlas, etc.). Sin embargo la declaras con 2 atributos entrada1 y entrada2, y en el constructor se pide al usuario que introduzca dichos atributos.

Esto no es un buen diseño: según la filosofía de orientación a objetos, la clase EntradaPorTeclado sería más lógico que tuviera a lo sumo 1 atributo (que representaría la propia entradaPorTeclado). Para manejar dos entradas de teclado, crearías dos objetos. Y esa creación la harías en el método main o en otra clase, no en el constructor de la clase EntradaPorTeclado.

Otro fallo: los atributos de una clase deben declararse private, no public.


Clase ComparandoCaracterXCaracter: El código puede estar bien, pero el diseño no es correcto. Cosas que fallan:

- Un constructor (al menos en una primera aproximación) sirve para inicializar los atributos de la clase, no para mostrar mensajes, realizar cálculos, comparaciones, ni otro tipo de cosas. ¿Incluir todo un proceso en un constructor? Mal diseño.


Clase CaracteresSobrantes: idem. Otra cosa que no es un buen diseño es hacer que los atributos de una clase sean los atributos de una clase. Cada clase tiene sus atributos, y no hay dependencia (en principio) entre los atributos de una clase y los de otra.

Clase VocalesCadena2: lo mismo indicado.

Clase ComparandoCadenas: es la clase con el método main. ¿Del código de esta clase podemos ver cómo crea objetos y hace que interaccionen entre ellos, conduciendo el proceso global? No. Más bien al analizar el código parece que quien condujera el proceso fuera la clase EntradaPorTeclado, cosa que no debe ocurrir. Quien debe conducir el programa es la clase con el método main.

A modo de resumen:

Fallos graves de diseño: usar los constructores para realizar procesos. Usar atributos de una clase A para incorporarlos como atributos de otra clase B. Delegar el flujo del programa en una clase que no es la clase con el método main.

Recomendaciones: el nombre de una clase dice lo que es, o lo que hace. Si el nombre representa lo que es una clase, será tipo EntradaPorTeclado, ListaPalabras, Vocal, Sorteo, etc. Si el nombre representa lo que hace se llamará ComparadorDeCaracteres, ComparadorDeCadenas, AnalizadorDeCaracteresSobrantes, etc.

Recomendación: antes de escribir código, hacer el diseño de clases escribiendo para cada clase:

- Cuáles serán sus atributos (información que almacena)

- Cuáles serán sus métodos (operaciones que es capaz de realizar)

Recomendación: ver el diseño que han hecho otras personas que están realizando los cursos y que están colgados en el foro.


Si una clase no tiene métodos, con bastante probabilidad está mal diseñada (excepto la clase con el main). Si una clase no tiene atributos propios, en general será porque es una clase "manejadora" de información que le pasan otros objetos y se encarga de realizar procesos y devolver un resultado.

Saludos!

879
Hola, no se puede ya que son conceptos distintos. Seguir el curso por tu cuenta es simplemente lo que tú quieras hacer. Seguir el curso tutorizado on-line supone que se envía el libro por correo postal, cuentas con un tutor que te supervisa, te marca el programa de estudios, con el que hablas semanalmente vía skype, al que tienes que enviar semanalmente ejercicios, etc. La información sobre cursos tutorizados está aquí: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=64&Itemid=87 (para saber el precio en pesos mexicanos tienes que hacer la transformación de euros a pesos mexicanos). Saludos,

880
Aprender a programar desde cero / Re:Ejemplo CU00838B
« en: 07 de Julio 2014, 09:53 »
Hola, parece que hubiera errores en los datos de conexión que has incluido y habría que revisarlos todos uno por uno para comprobar que sean correctos.

Lo primero, verifica el nombre de la base de datos tal y como se explica aquí: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=609:crear-una-base-de-datos-mysql-para-practicar-con-php-acceso-al-gestor-cu00836b-&catid=70:tutorial-basico-programador-web-php-desde-cero&Itemid=193

¿Cuál es el nombre de base de datos?

Páginas: 1 ... 39 40 41 42 43 [44] 45 46 47 48 49 ... 68

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