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 - RaGa

Páginas: 1 ... 3 4 5 6 7 [8] 9 10 11 12
141
Aprender a programar desde cero / Re:Ejercicio CU00650B
« en: 04 de Junio 2015, 13:29 »
Hola javalopez:

Tus respuestas son correctas! Excelente!

Respecto de tu pregunta si se puede borrar (o cambiar) el código por defecto que se crea cuando creamos una clase en BlueJ, pues yo también me lo he preguntado más de una vez y no he encontrado forma de hacerlo. El manual de BlueJ no dice nada al respecto tampoco, solo que es un código por defecto y que es sintácticamente correcto. Te paso el link del Tutorial por si quieres leer e investigar un poco más sobre BlueJ. En página 20 encuentras el punto "5.2 Creando clases".

http://www.bluej.org/tutorial/tutorial-spanish-1.pdf


142
Hola César.

Muy buena explicación, hay un error de números en la cuenta final pero se entendió perfectamente el planteo.
Intuía que se trataba de cuestiones no inherentes a la propia perfomance de las clases (ya que el API de Java nos marca claramente las bondades de una y otra clase).
Entre esas cuestiones que denominaba "externas" no había tenido en cuenta que el acceso a memoria es por bloques, y es allí en donde podría explicarse esta diferencias de resultados.
Muy gráfica tu explicación y como siempre con mucha claridad conceptual.

Si hay otro aporte que clarifique este fenómeno nos sería bienvenido también.

Saludos!

143
Aprender a programar desde cero / Re:ejercicio CU00644B resuelto
« en: 03 de Junio 2015, 01:01 »
Hola javalopez:

Estuve analizando tu código y está bien. Funciona y cumple con lo que pide la consigna del ejercicio (aunque te has tomado la licencia de cambiar el tipo devuelto a float).
Sin considerar esto último, te propongo analices esta otra posible solución donde hemos optimizado el código no declarando más atributos que los necesarios.

Código: [Seleccionar]
public class multiplicadorDieces{

    public multiplicadorDieces(){}

    public float multiplicadorPorDieces(double valorMultiplicando, int valorExponente)
    {

        for (int i=1; i<=valorExponente; i++) {
            valorMultiplicando = valorMultiplicando *10;
        }
     
        return (float) valorMultiplicando;
    }
}

Saludos!

144
Aprender a programar desde cero / Re:Ejercicio CU00642B
« en: 03 de Junio 2015, 00:48 »
Hola javalopez:

Creo no aclaré (y pido disculpas por ello), es que en este "ejercicio bis" tanto la clase SalonCasa como la clase CocinaCasa quedaban exactamente iguales a lo que publicaste, lo único que cambiaba era el Constructor con parámetros de la clase Casa que es a donde apuntaba mi pregunta.

Paso a explicar la diferencia para que lo analices:

Constructor con parámetros de la clase Casa (original)

Código: [Seleccionar]
public Casa(double valorSuperficie,String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocinaCasa){
        superficie=valorSuperficie;
        direccion=valorDireccion;
        salonCasa=new SalonCasa(objetoSalonCasa.getNumeroDeTelevisores(),objetoSalonCasa.getTipoSalon());
        cocinaCasa=new CocinaCasa(objetoCocinaCasa.getEsIndependiente(), objetoCocinaCasa.getNumeroDeFuegos());
    }

Constructor con parámetros de la clase Casa (modificado)

Código: [Seleccionar]
public Casa(double valorSuperficie,String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocinaCasa){
        superficie=valorSuperficie;
        direccion=valorDireccion;
        salonCasa= objetoSalonCasa;
        cocinaCasa= objetoCocinaCasa;

la diferencia si te fijas bien, está en la asignación que le hacemos a los campos de instancia tipo objeto, que son salonCasa y cocinaCasa.

El Constructor recibe entre otros parámetros, un objeto llamado objetoSalonCasa, y en la siguiente línea (del Constructor original):

Código: [Seleccionar]
salonCasa=new SalonCasa(objetoSalonCasa.getNumeroDeTelevisores(),objetoSalonCasa.getTipoSalon());
al campo de instancia salonCasa se le asigna un nuevo objeto. ¿Cómo sé que se le asigna un nuevo objeto? porque después del signo '=' fíjate que se utiliza la sentencia new y se le pasan todos los parámetros necesarios para que el constructor de la clase SalonCasa instancie un nuevo objeto.

(lo mismo sucede con el campo de instancia cocinaCasa).

Ahora bien, en el Constructor modificado, la asignación que se hace al campo de instancia salonCasa es la siguiente:

Código: [Seleccionar]
salonCasa= objetoSalonCasa;
como vemos, no se instancia un nuevo objeto (no aparece la sentencia new). Lo que se hace es asignarle la referencia del objeto objetoSalonCasa a salonCasa.
Vale decir que luego de esta asignación salonCasa apuntará al mismo objeto que apunta objetoSalonCasa. Entonces: no creamos un nuevo objeto sino que al objeto objetoSalonCasa lo referenciamos (lo apuntamos) tanto con objetoSalonCasa, como con salonCasa.

Como conclusión:
Con el Constructor original, finalmente tendremos dos objetos: un objeto objetoSalonCasa y otro objeto salonCasa, ambos objetos serán tipo SalonCasa.
Con el Constructor modificado, solo tendremos un solo objeto pero referenciado con dos referencias: objetoSalonCasa y salonCasa. Las dos referencias hacen alusión al mismo objeto tipo SalonCasa.

Analízalo y culaquier duda acá estamos para ayudarte.

(Antes de finalizar el post, temo haberme adelantado con esta pregunta que te hice a temas que tal vez aún no hayas visto en el curso respecto de "referencia de objetos". Si es así, dejamos esto pendiente y volvemos sobre ello más adelante).

145
Hola Macarena:

Muy bien por tus respuestas, todas correctas.  :)

En tu respuesta (c) como bien dices es de tipo mixto.
Deberías cambiar la palabra "elige" por la palabra "elimina", fíjate bien en eso en esta respuesta.

Saludos.

146
Aprender a programar desde cero / Re:Ejercicio CU00642B
« en: 02 de Junio 2015, 20:44 »
Hola javalopez:

He estado revisando tu código y en mi opinión considero que está perfecto! Destaco como siempre la buena organización interna de las clases, el hecho de que nombras parámetros, métodos, y clases según convención, y los comentarios que vas agregando en el código.

Te hago una sugerencia para tus próximas publicaciones así las clases quedan mejor presentadas: asegúrate que entre [ code ] [ /code ] vaya el código de una sola clase.

Por ejemplo en el caso de este ejercicio, las tres clases hubieran quedado:

[ code ]  aquí iría el código de la clase SalonCasa [ /code ]

[ code ]  aquí iría el código de la clase CocinaCasa [ /code ]

[ code ]  aquí iría el código de la clase Casa [ /code ]

De esta manera la publicación se presenta más ordenado sin que estén los tres códigos juntos.

Volviendo al ejercicio. Aprovechando que lo resolviste correctamente, te planteo un ejercicio dentro del ejercicio.
Supongamos que hago un cambio en la clase Casa que codificaste. Supongamos que ese cambio consiste en cambiar el Constructor con parámetros de tal manera que quede así:

Código: [Seleccionar]
public Casa(double valorSuperficie,String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocinaCasa){
        superficie=valorSuperficie;
        direccion=valorDireccion;
        salonCasa= objetoSalonCasa;
        cocinaCasa= objetoCocinaCasa;

Pregunta: ¿cuál es la diferencia? ¿qué implicancias trae este cambio?

Saludos!

147
Hola Ronal.

En mi opinión, tu ejercicio ha quedado perfecto.

Quisiera hacerte un comentario al margen acerca del por qué la insistencia de cómo nombrar parámetros, métodos, clases, etc.
Si bien hay una convención que todos los programadores seguimos: aquella que nos dice que los parámaetros, variables, métodos deben comenzar con minúscula y las clases con mayúsculas, hay otro punto a tener en cuenta y es el nombre que elegimos.
El nombrar un parámetro, un método, y una clase, no es un hecho estético sino que lleva implícita información útil: de qué se trata tal o cual parámetro por ejemplo, o para qué serive tal o cuál método.
También la forma en que nombremos las cosas evidencia si tenemos claro el panorama y sabemos qué estamos haciendo. No solo para las correcciones que vayamos a recibir, sino para el desarrollo en sí del código que estamos realizando.
Tengamos en cuenta por otro lado, que para futuros mantenimientos y/o ampliaciones de nuestro trabajo, será muy útil que la lectura del código sea entendible, por eso la buena organización del mismo es una costumbre saludable. También que los nombres que elegimos de alguna manera nos den información de qué es, o para qué sirve, aquello a lo cual nos estamos refiriendo.
Recordemos que no siempre seremos nosotros los que debamos entender lo que codificamos, seguramente seremos parte de un grupo de programadores.
Por lo tanto, ya que estamos iniciándonos en la programación, empezar a incorporar estas buenas costumbres desde ahora.

Bueno Ronal, a seguir adelante con el curso que lo vienes haciendo muy bien!

148
Hola Ronal.

Felicitaciones por iniciar un hilo con tu propio ejercicio.
Estuve analizándolo y por mi parte lo veo muy bien! Destaco la buena organización del código incluyendo comentarios.

La única observación que haría es respecto a los nombres de los parámetros de los métodos set.
Por ejemplo, el método setTipoBomba:

Código: [Seleccionar]
public void setTipoBomba(int establecerTipoBomba){
        tipoBomba = establecerTipoBomba;
    }

el parámetro del método es establecerTipoBomba. El nombre parece ser más pertinente para nombrar un método que para nombrar un parámetro. Después de todo setTipoBomba lo que hace es establecer el tipo de bomba, cierto? Creo (en mi opinión) que quizás sería más apropiado renombrar el parámetro con un nombre al estilo de valorTipoBomba

Código: [Seleccionar]
public void setTipoBomba(int valorTipoBomba){
        tipoBomba = valorTipoBomba;
    }

y haría lo mismo para los demás métodos set.

Lo vienes haciendo muy bien, a seguir adelante!

149
Hola Macarena!

Creo que has equivocado el número de ejercicio publicado, ya que la lección CU00661B no tiene ejercicio propuesto, en cambio en la lección CU00662B se propone un ejercicio que casualmente coincide con la solución que das tu aquí ! jeje Así que hagamos de cuenta que se trata del ejercicio CU00662B lo que quisiste resolver   ;D.

He estado revisando tu código y está muy bien, funciona y realiza lo que pide la consigna del ejercicio (662).
Destaco tu resolución del problema utilizando dos clases, y los nombres elegidos para nombrar las clases.

También he de hacerte unas observaciones que creo son de importancia.
Fíjate en lo siguiente: la clase TestLetraALetra solo tiene un solo método, el método main. Por lo tanto no sería necesario declarar campos de instancia. En su lugar deberíamos declarar solo campos dentro del método main, ya que es únicamente este método quien los usará.

Por lo tanto esta clase TestLetraALetra quedaría de la siguiente manera:

Código: [Seleccionar]
public class TestLetraALetra
{
 
   
        public static void main (String [] args){
            int limiteInf;
            int limiteSup;
            int palabra;
            GestionadorEntradasTeclado miTeclado =new GestionadorEntradasTeclado();
           
            System.out.println("Introduce la primera cadena");
            String entrada_1 = miTeclado.recogerPalabra();
            System.out.println("Introduce la segunda cadena");
            String entrada_2 = miTeclado.recogerPalabra();
       if(entrada_1.length()<entrada_2.length()){
           limiteInf=entrada_1.length();
           palabra = 1;
           limiteSup = entrada_2.length();
        }
        else{
            limiteInf=entrada_2.length();
            palabra = 2;
            limiteSup = entrada_1.length();
        }
           
           for(int i=0;i<limiteSup;i++){
            if(i<limiteInf){
                System.out.println("¿Letra "+(i+1)+" igual en las dos palabras? " + (entrada_1.substring(i,i+1).equals(entrada_2.substring(i,i+1))));
            }
            else{
                System.out.println("La palabra "+palabra+" no tiene letra "+(i+1));
            }
        }
   
        }
    }

Observa también las siguientes modificaciones adicionales hechas:

Anteriormente habías declarado un campo de clase GestionadorEntradasTeclado miTeclado el cuál tiene como ámbito toda la clase. Además habías también declarado un campo en el método main también llamado GestionadorEntradasTeclado miTeclado.
Fíjate que en el nuevo código, el que es campo de instancia ya no existe más, ya que el único campo miTeclado que se usará es el que corresponde al método main.

Otras dos campos de instancia que eliminamos fueron: int i, int n, y String palabraCorta.
El atributo int i, no hace falta declararlo tampoco dentro del método main, ya que se define dentro del ciclo for cuando hacemos:

Código: [Seleccionar]
for(int i=0;i<limiteSup;i++){
Al atributo int n, no le veo utilidad ya que no se utiliza en ninguna parte del código. Lo mismo sucede con el atributo String palabraCorta. Estos dos atributos fueron eliminados de la clase.

Seguramente todas estos atributos "de más" habrán ido quedando cuando programabas e ibas haciendo distintas pruebas e intentos.
Siempre es buena práctica ir eliminando las cosas que nos han servido de prueba cuando programamos, pero que no formarán parte del código final, de manera tal que no queden líneas obsoletas, atributos sin uso, objetos que no tienen sentido, etc etc.

Saludos! A seguir adelante.

150
Hola Ronald!

Antes de meternos directamente con el código que has publicado quisiera pedirte lo siguiente:
Cuando quieras poner en los foros tu solución para un ejercicio crea un Nuevo Tema. De ese modo mantenemos más ordenado el foro evitando mezclar respuestas de personas distintas en un mismo hilo.
¿Cómo hacer para crear un Nuevo Tema?. Una vez que te logueas en el foro, entras en "Aprender a programar desde cero", y haz click en "NUEVO TEMA".
No olvides de escribir en el título del nuevo tema a qué ejercicio se refiere tu publicación.

En otro orden de cosas (pero también por cuestiones de orden), cuando publiques los códigos, asegúrate que el código vaya entre las etiquetas [ code ] [ /code ] .
Puedes leer este link https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0 donde se explica muy bien cómo realizar una publicación en el foro.

Ahora sí, vayamos a la respuesta del ejercicio que has enviado:
Has cometido dos errores, te marco las respuestas correctas:

c) A<C es Flaso.
n) (A+B==8)||(A-B==6) es Verdadero

Respecto de la (c), fíjate que A que vale 5 es mayor que C que vale -12, por lo tanto la proposición es falsa.

Respecto de la (n):
Analicémos la proposición separado las partes.
Primero hagamos la evaluación de (A+B==8) = ( 3+5  ==  8 ) lo cual es verdadero.
Ahora bien (A-B==6) = (5-3 == 6) es flaso
Por lo tanto : (verdadero)||(flaso) = verdadero

Respuesta final: verdadero.

Analízalo y cualquier duda estamos aquí para ayudarte. Saludos.

151
Hola Ronald!

Antes de meternos directamente con el código que has publicado quisiera pedirte lo siguiente:
Cuando quieras poner en los foros tu solución para un ejercicio crea un Nuevo Tema. De ese modo mantenemos más ordenado el foro evitando mezclar respuestas de personas distintas en un mismo hilo.
¿Cómo hacer para crear un Nuevo Tema?. Una vez que te logueas en el foro, entras en "Aprender a programar desde cero", y haz click en "NUEVO TEMA".
No olvides de escribir en el título del nuevo tema a qué ejercicio se refiere tu publicación.

En otro orden de cosas (pero también por cuestiones de orden), cuando publiques los códigos, asegúrate que el código vaya entre las etiquetas [ code ] [ /code ] .
Puedes leer este link https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0 donde se explica muy bien cómo realizar una publicación en el foro.

Ahora sí, vayamos al código que has enviado.
El método funciona muy bien!
Igualmente podríamos realizar algunas modificaciones para mejorarlo aún más:

A la línea
 
Código: [Seleccionar]
System.out.println(resultado);
la deberías eliminar, así no mostramos por consola nuestros cálculos intermedios.
Y como un dato "cosmético" pero no así menos importante, fijate en la siguiente línea que has escrito tu:

Código: [Seleccionar]
System.out.println("El médico de nombre"+ nombre + "con especialidad"
                +especialidad+"tendrá una edad múltiplo de 5 dentro de años en"+falta);

y la modificación que te sugiero realices:

Código: [Seleccionar]
System.out.println("El médico de nombre "+ nombre + " con especialidad "
                +especialidad+" tendrá una edad múltiplo de 5 dentro de años en "+falta);

la diferencia son los espacios que insertamos de tal manera que a la hora que el texto se imprima por consola se leea correctamente sin que las palabras estén encimadas.
La misma modificación deberías realizar en los otros métodos de la clase Medico que impriman por consola.

152
Hola Ronald!

Veo que eres nuevo en el foro, así que me toca hacer las veces de anfitrión: Bienvenido!  :D

Antes de meternos directamente con el código que has publicado quisiera pedirte lo siguiente:
cuando quieras poner en los foros tu solución para un ejercicio crea un Nuevo Tema. De ese modo mantenemos más ordenado el foro evitando mezclar respuestas de personas distintas en un mismo hilo.
¿Cómo hacer para crear un Nuevo Tema?. Una vez que te logueas en el foro, entras en "Aprender a programar desde cero", y haz click en "NUEVO TEMA".
No olvides de escribir en el título del nuevo tema a qué ejercicio se refiere tu publicación.

En otro orden de cosas (pero también por cuestiones de orden), cuando publiques los códigos, asegúrate que el código vaya entre las etiquetas [ code ] [ /code ] .
Puedes leer este link https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0 donde se explica muy bien cómo realizar una publicación en el foro.

Ahora sí, vayamos al código que has enviado.
Al código lo veo muy bien, está bien estructurado y has tenido en cuenta la convención para nombrar los campos y los métodos, muy bien por ello!
El Constructor también está perfecto , incializando todos los campos de instancia a valor por defecto.

He de hacerte una observación con respecto a la declaración de los campos de instancia. Tu declaración de campos de instancia es:

Código: [Seleccionar]
public class Medico {
    String nombre, apellido;
    String numeroDocumentoIdentidad;
    String especialidad;
    int edad;
    boolean casado;
    Medico med1 = new Medico();

¿Por qué incluyes aquí la línea ?

Código: [Seleccionar]
Medico med1 = new Medico();
No deberías crear un objeto tipo Medico en esta parte del programa, no hay razón para ello. Te sugiero la elimines.

Y para finalizar, quisiera apuntarte algo respecto del método setNombreApellido de tu código

Código: [Seleccionar]
    public void setNombreApellido(String insertarNombre, String insertarApellido){
        nombre = insertarNombre;
        System.out.println("Se ha cambiado el nombre anterior por"+nombre);
        apellido = insertarApellido;
        System.out.println("se ha cambiado el apellido anterior por"+apellido);       
    }

No sería correcto tener un método set que modificara dos campos de instancia a la vez.
Así como luego defines un método tipo función getNombre() que devuelve el campo nombre del objeto, y un método tipo función getApellido() que devuelve el campo apellido del objeto, pues entonces es correcto tener un método setNombre y un método setApellido que asignen valores a sus respectivos campos de manera independiente.
Te sugiero que desdobles esa función en dos funciones tipo procedimiento: una llamada setNombre y la otra llamada setApellido.


153
Hola.

Estuve analizando el ejercicio resuelto de la entrega CU00921C. Probándolo con algunos cambios obtuve resultados no satisfactorios cuyos motivos no logro explicar. Quisiera compartir esa experiencia.

Vamos al código:
La clase Programa tal como está en la entrega funciona correctamente. Los tiempos que aparecen por consola irán variando dependiendo de, no solo qué procesador uno tenga, si no también de "qué tan ocupado" esté el procesador al momento de ejecutarse el programa. Lo importante de ver en cada corrida del programa es la diferencia relativa de tiempos.

Ahora bien, supongamos que introducimos una modificación de orden al programa original.
Supongamos que la modificación consiste en: primero realizar la inserción de un elemento en la posición 0 de la lista listalinked, y luego la insersión de un objeto en posición 0 en la lista listaarray. Es decir, en vez de realizar primero la inserción en listaarray como lo hacía el programa original, empezamos por insertar en la lista listalinked.

Lo que uno esperaría es que los tiempos mantuvieran la misma diferencia relativa, pero no sucede así.
El programa codificado de esta manera muestra que la insersión en la lista listalinked será  incluso hasta más lenta que en la lista listaarray.
Esto es lo que causa sorpresa. Uno hubiera esperado se mantuviera la diferencia relativa de tiempos insumidos por los procesos, y que principalmente el tiempo insumido por listalinked fuese menor que el tiempo insumido por listaarray.

Presumo tal vez que este comportamiento observado esté relacionado con otro tipo de cuestiones (externas) más que a la perfomance de los 2 tipos de implimentaciones analizadas (ArrayList y LinkedList).

(La siguiente es la clase modificada con el cambio ya explicado)
Código: [Seleccionar]
/* Ejemplo Interface List aprenderaprogramar.com */

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;

 

public class Programa {

    public static void main(String arg[]) {

            List<Persona> listaarray = new ArrayList<Persona>();

            List<Persona> listalinked = new LinkedList<Persona>();

            long antes;

            for(int i=0;i<10000;i++)

            {

               listaarray.add(new Persona(i,"Persona"+i,i));  // En este ejemplo cada persona lleva datos ficticios

                listalinked.add(new Persona(i,"Persona"+i,i));

            }

            System.out.println("Tiempo invertido en insertar una persona en listalinked (en nanosegundos):");

            antes = System.nanoTime();

            listalinked.add(0,new Persona(10001,"Prueba",10001)); // Inserción en posicion 0 de una persona

            System.out.println(System.nanoTime()- antes);

            System.out.println("Tiempo invertido en insertar una persona en listaarray (en nanosegundos):");

            antes = System.nanoTime();

            listaarray.add(0,new Persona(10001,"Prueba",10001));  // Inserción en posicion 0 de una persona

            System.out.println(System.nanoTime()- antes);

      }

}

154
Hola javalopez:

Revisé tu código y he de decirte que tu ejercicio está muy bien! Felicitaciones.
Destaco sobre todo que el código está muy bien estructurado, y que has nombrado las clases, los métodos, y los parámetros respetando las convenciones.

Me resta únicamente hacerte una observación que es la siguiente:
En el constructor de la clase Casa se deberían inicializar todas los campos de instancia. Es decir que además de crear los objetos tipo SalonCasa y CocinaCasa, deberíamos inicializar el campo dirección y superficie a valores por defecto.
La consigna del ejercicio decía:
Citar
Define un constructor para la clase Casa que establezca a unos valores de defecto los atributos simples y que cree nuevos objetos si se trata de atributos objeto.

De esta manera el constructor de la clase Casa quedaría:

Código: [Seleccionar]
    public Casa(){
        salonCasa=new SalonCasa();
        cocinaCasa=new CocinaCasa();
        superficie=0.0;
        direccion="";
    }

Por último destaco hayas codificado un nuevo método, el cual no se pedía en la consigna del ejercicio, celebro esa iniciativa!
El nombre del método getDatosCasa() está perfectamente elegido ya que has definido un método tipo función, donde se devuelve un atributo tipo String llamado datosCasa.
Una cuestión interesante de analizar es la siguiente: si el método tipo funcion  getDatosCasa() devuelve un String, esa debería ser su única tarea, es para lo que sirve el método, una tarea bien específica. Por lo tanto no debería exisitir aquí una línea como:

Código: [Seleccionar]
System.out.println (datosCasa);
pero por el momento dejaremos esta línea en el método.
Pero sí ten en cuenta para el futuro, que un método que imprima por consola, debería ser un método tipo procedimiento y cuya función solamente fuese esa: sacar datos por consola (no retornar datos), a la cual podríamos nombrar como mostrarDatosCasa() o un nombre similar.


155
Perfecto Ramón, tu clase está muy bien. A seguir adelante!

156
Está muy bien el cambio que hiciste en convertir el método comprobarLetra en tipo procedimiento.

Sin embargo, fíjate que tal como está tu clase ahora, si las palabras tienen distinta cantidad de letras, no se indica por consola que "La palabraX no tiene letra N".
Eso es debido a lo que te indiqué en el post anterior. ¿Recuerdas que tenías dos if (con sus respectivos else) seguidos en tu código?. Debías borrar el primer if con sus respectivo else. Tu borraste el segundo if con su else (que era el que funcionaba bien).

Analicemos ese segundo if que funciona correctamente:

Código: [Seleccionar]
if (palabra_1.length() < palabra_2.length()) {
            limiteInf = palabra_1.length();
            text = 1;
            limiteSup = palabra_2.length();
        } else {
            limiteInf = palabra_2.length();
            text = 2;
            limiteSup = palabra_1.length();
        }

Fíjate que si la longitud de la plabra_1 es menor a la longitud de la palabra_2 , pues entonces a la variable limiteInf se le asigna la longitud de la palabra_1 , y a la variable limiteSup se le asigna la longitud de la la palabra_2

(el else haría lo contrario).

Por lo tanto la clase completa nos quedaría:

Código: [Seleccionar]
package ejercicioscu00662b;
public class VerificarLetra {

    public void comprobarLetra(String palabra_1, String palabra_2) {
        int limiteSup;
        int limiteInf;
        int text;

        if (palabra_1.length() < palabra_2.length()) {
            limiteInf = palabra_1.length();
            text = 1;
            limiteSup = palabra_2.length();
        } else {
            limiteInf = palabra_2.length();
            text = 2;
            limiteSup = palabra_1.length();
        }
        for (int i = 0; i < limiteSup; i++) {
            if (i < limiteInf) {
                System.out.println("¿Letra " + (i + 1) + " igual en las dos palabras? " + (palabra_1.substring(i, i + 1).equals(palabra_2.substring(i, i + 1))));
            } else {
                System.out.println("La palabra " + text + " no tiene letra " + (i + 1));
            }
        }

    }
}


Analízalo, y cualquier duda acá estamos para ayudarte!

157
Hola Ramón!

Al programa lo veo muy bien. Funciona y responde a la consigna planteada en el ejercicio. Veo cosas muy destacables en tu planteo.
Entre lo destacable: el código está muy bien organizado dividiendo las tareas en clases.
Tienes una clase cuya tarea será tomar los datos entrantes por el teclado. Otra clase que verificará la aparición en orden de las letras iguales en las dos palabras. Y por último una clase donde está el método principal el cual es corto. Eso está muy bien!

Por otro lado hay algo que me ha llamado la atención en la clase VerificarLetra. Tienes dos if seguidos (cada uno con su respectivo else). Al primer if (con su else) deberías borrarlo. El programa funciona correctamente con el segundo if (con su else).
Seguramente fuiste trabajando el código, probando distintas posibilidades, y se te olvidó de borrar esa parte.  ;)

Y por último te haría una sugerencia: a la clase Teclado yo la renombraría por un nombre más significativo a lo que hace. La clase -tal como está planteado tu código- es un GestionadorDeEntradasTeclado. Creo que ese nombre es más apropiado para esa clase (o algo similar).
Lo mismo que a su método buscarPalabra() también lo renombraría por algo que sea más alusivo, por ejemplo podría bien llamarse recogerPalalabra(), que verdaderamente es lo que hace.

A seguir adelante!

158
Aprender a programar desde cero / Re:Metodo ejercicio CU00633B
« en: 28 de Mayo 2015, 01:54 »
Un método puede llamar a otro método? Si, eso es posible. Sin embargo ten en cuenta a estas alturas del curso lo siguiente: en programación orientada a objetos cada método tendrá una tarea bien definida y específica.

Fíjate lo que sucede por ejemplo en este ejercicio. Tomemos por ejemplo el método setNombre(String valorNombre). Este método tiene como tarea establecer el nombre del objeto tipo Medico con el valor que se pasa como argumento, y nada más que eso. Su tarea es bien definida y específica.
Lo mismo sucede con el método getEspecialidad(). Su tarea consiste en devolver un atributo tipo String que contiene la especilidad de ese objeto. Una vez más, la tarea es bien definida y específica.

En lo que propones de definir un método que pida la edad, y dentro de él llamar al método que calcula los años que restan para un número múltiplo de 5, a simple vista diríamos que no, debería existir un método que pida la edad, y otro método diferente que calcule el múltiplo de edad. Es decir dos métodos donde cada uno de ellos tenga una tarea específica.
Luego sobre ese objeto invocaremos uno u otro método, o uno a continuación del otro, según las necesidades que tengamos, pero ambos métodos deberán ser independientes.

159
Aprender a programar desde cero / Re:Ejercicio CU00632B
« en: 28 de Mayo 2015, 01:23 »
Hola javalopez:

Tu ejercicio está muy bien, has organizado muy bien el código!
Sin embargo ten en cuenta dos observaciones:

Cuando en la consigna del ejercicio se pide que a los valores de los atributos se inicilicen a valores de defecto: está muy bien que al campo casado lo inicilices a false y al campo edad a 0. Pero deberías inicilizar los campos tipo String a "", es decir sin ninguna cadena de caracteres.
De esta manera, el constructor te quedaría:

Código: [Seleccionar]
public Medico(){
        nombre="";
        apellido="";
        edad=0;
        casado=false;
        numDni="";
        especialidad="";
}

Por último: ten en cuenta la convención de nombrar los métodos. Así como nombraste muy bien a los métodos getApellido(), getNombre(), getEdad(), getEstado(), deberías renombrar los dos métodos restantes como: getNumDni() y getEspecialidad().
De esta manera seguimos la convención de que las segundas, terceras, cuartas, etc. palabras del nombre del método comiencen con mayúsculas, logrando así una mejor legibilidad.

Sigue adelante, lo has hecho muy bien.

160
Muy buena tu explicación Alex. Hacía un tiempo que venía viendo en el API de Java estos signos "?" y no sabía de qué se trataría.

De más está decir que ese texto que transcribiste no tiene ni una coma de desperdicio! Magistralmente esclarecedor. Su lectura -como suele pasar- me llevó a investigar otros temas, en este caso: tipos y métodos genéricos.
Y como siempre, escribir y probar código para poner las cosas en práctica con distintas variantes. Pienso es la mejor forma de ir madurando e incorporando los conceptos.

Muchas gracias Alex, como siempre muy interesantes tus aportes!  :)

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

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