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 2 3 4 5 6 [7] 8 9 10 11 12
121
Aprender a programar desde cero / Re:EJERCICIO CU00658B RESUELTO
« en: 15 de Junio 2015, 03:03 »
Ahora si perfecto Ronal! A seguir adelante!

122
Aprender a programar desde cero / Re:EJERCICIO CU00658B RESUELTO
« en: 14 de Junio 2015, 18:59 »
Perdón, por consola se mostraría:

Hola
letra 1: H
letra 2: o
letra 3: l
letra 4: a

(me había equivocado en mi anterior respuesta donde siempre decia "letra 1" jeje.  ;D)

123
Aprender a programar desde cero / Re:EJERCICIO CU00658B RESUELTO
« en: 14 de Junio 2015, 18:56 »
Hola!

Muy bien por el cambio. Faltó hacer un cambio más, también te lo recomendaba en la codificación que te escribí anteriormente.

Tenemos que cambiar el 0 pasado como parámetro inicial del método substring por "i", de tal manera que substring(i,i+1) vaya devolviendo letra por letra en cada repetición del ciclo.

Es decir que la línea:

Código: [Seleccionar]
System.out.println("letra "+(i+1)+": "+captura.substring(0, i+1));
debería ser cambiada por:

Código: [Seleccionar]
System.out.println("letra "+(i+1)+": "+captura.substring(i, i+1));
De esa manera, si tipeamos la palabra Hola, por consola se nos mostrará:

letra 1: H
letra 1: o
letra 1: l
letra 1: a

que es lo que se nos pedía en el ejercicio.

Analízalo y cualquier duda seguimos resolviéndolo.

124
Hola Gustavo.

Veo que es el primer ejercicio que publicas, así que me toca hacer de anfitrión y darte la bienvenida al foro.

Antes que nada, te voy a recomendar leer el siguiente link para que puedas realizar publicaciones de una manera más ordenada.
https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Por ejemplo he de sugerirte que cuando publiques líneas de código lo hagas entre las etiquetas

[ code ] ... aquí escribe tu código... [ /code ]

Ahora bien, pasemos al ejercicio en si. Lo he revisado y veo que lo has hecho muy bien!, has comenzado con el pie derecho.
A su vez, tenemos unas observaciones por hacer que mejorarán aún más tu código, veámoslas.

Ten en cuenta que por convención, los nombres de los métodos y los atributos deben empezar con una letra minúscula, y los nombre de las clases con una letra mayúscula. Esto es algo que todos los que programamos respetamos. Tu lo has respetado, perfecto!
Ahora bien, cuando el nombre de un método esté compuesto por dos palabras, la segunda palabra la comenzamos con mayúscula; de esa manera es más legible y facil de entender a simple vista. Por ejemplo:


al método setnombre() lo deberías renombrar por setNombre().
al método setapellido() lo deberías renombrar por setApellido().
Y así con todos los demás nombres de métodos que estén compuestos por dos o más palabras: cada nueva palabra comienza con mayúscula (salvo la palabra inicial).

Lo mismo sucede con los nombres de los atributos. Por ejemplo, tienes un atributo llamado numerodocumento, este debería llamarse numeroDocumento. Lo mismo sucede con el atributo valorNumerodocumento, que debería llamarse valorNumeroDocumento.

En otro orden de cosas, me ha llamado la atención el siguiente método:

Código: [Seleccionar]
public void setapellido (String valorApellido)

    {
        // put your code here
        apellido = "Apellido" + valorApellido;
    }

Supongo que habrá sido una distracción ya que a los demás métodos set los has codificado bien. Este método debería ser reescrito por:

Código: [Seleccionar]
public void setapellido (String valorApellido)
    {
        // put your code here
        apellido = valorApellido;
    }

A seguir adelante!

125
Aprender a programar desde cero / Re:EJERCICIO CU00658B RESUELTO
« en: 14 de Junio 2015, 17:29 »
Hola Ronal:

Estuve analizando tu ejercicio y veo que en tiempo de ejecución lanza un error.

java.lang.StringIndexOutOfBoundsException

y esto sucede porque en un momento se pretende acceder a una posición fuera de los límites del String. En este caso si la palabra que ingresamos tiene 5 letras por ejemplo, se pretende acceder a la sexta letra cuando hacemos (i+1).

La solución sería reescribir el ciclo for de la siguiente manera:

Código: [Seleccionar]
        for (int i = 0;i<captura.length();i++){
            System.out.println("letra "+(i+1)+": "+captura.substring(i, i+1));
        }

Observa que hemos cambiado el límite superior del ciclo for. Ya no es "<=" la condicion sino "<" (esto resuelve el error citado anteriormente).
Y también que hemos cambiado el 0 inicial del substring por "i", de tal manera que substring(i,i+1) vaya devolviendo letra a letra por cada repetición del ciclo.

Otra cosa que te quería comentar (que habías anotado como comentario dentro del cuerpo del programa) es que no es buena política escapar de un ciclo for con break, siempre tataremos de que las salidas de los ciclos for sean por el cumplimiento de la condición especificada por él.


Revísalo y ante cualquier duda aquí estamos para ayudar.

126
Aprender a programar desde cero / Re:EJERCICIO CU00657B RESUELTO
« en: 14 de Junio 2015, 16:57 »
Hola Ronal:

Estuve revisando tu código y lo veo Excelente!! Destaco siempre el orden, y esta vez destaco el aprovechamiento y uso de los métodos de la clase String para resolver con elegancia el problema planteado.

Ya que ha sido muy bien resuelto, creo que podríamos darle una vuelta más de rosca y hacer la siguiente observación:

Hay una parte del código que se repite varias veces y es cuando vamos a verificar con qué letra empieza nuestra cadena. Podríamos plantear esa verificación como un nuevo método que es llamado cada vez que lo necesitemos. Podríamos incluso hacer más genérico y modular este método definiéndolo como un método con parámetros.
Fíjate cómo quedaría codificado el programa con esta modificación. Hemos ahorrado líneas de código y desaparecen dos atributos (primera y primeA).

Código: [Seleccionar]
package ejemplo;
//importamos el paquete de la clase Scanner
import java.util.Scanner;

public class CalculaLetras {
    //Constructor General
    public CalculaLetras(){
       
    }
   
    public static void main (String [] argumentos){
        int condicion = 0;
        System.out.println("\fInicio del programa Calcula Letras");
        System.out.println("Ingresa cadena de caracteres");
        String ingresoCaracteres = "";
        Scanner ingresoTeclado = new Scanner(System.in);//Lectura del teclado
        ingresoCaracteres = ingresoTeclado.nextLine();//el objeto ingresoCaracteres recibe los valores
       
        //Condicional 1 si la cadena tiene menos de 5 caracteres
        if(ingresoCaracteres.length()< 5 ){           
            System.out.print("La cadena introducida tiene menos de 5 caracteres");           
            //el programa evalua si el primer caracter inicia con a o A
            TesterLetraInicial(ingresoCaracteres,"a","A");
           
            //Condicional 2 si la cadena tiene entre 5 y 15 caracteres
        }else if(ingresoCaracteres.length()>=5 && ingresoCaracteres.length() <=15){                       
            System.out.print("La cadena introducida tiene entre 5 y 15 caracteres");
            //el programa evalua si el primer caracter inicia con a o A
            TesterLetraInicial(ingresoCaracteres,"a","A");   
           
            //Condicional 3 si la cadena tiene mas de 15 caracteres           
        }else if(ingresoCaracteres.length()>15){           
            System.out.print("La cadena introducida tiene mas de 15 caracteres");
            //el programa evalua si el primer caracter inicia con a o A
            TesterLetraInicial(ingresoCaracteres,"a","A");
           
        }
   
    }
   
    public static void TesterLetraInicial(String palabra, String letraInicial1, String letraInicial2){
        if(palabra.substring(0).startsWith(letraInicial1)){System.out.println(" y la primera letra es \"a\"");}
        else if(palabra.substring(0).startsWith(letraInicial2)){System.out.println(" y la primera letra es a \"A\"");}
    }
   
}

Revísalo y ante cualquier duda aquí estamos para ayudar.

127
a) No, no es posible. Daría un error de tipo java.lang.nullPointerException ya que estás llamando a un método de un objeto que aún no apunta (no referencia) hacia ningún lugar.
Para poder llamar un método el objeto tiene que estar creado previamente.

b) Correcto.

c) No es correcto. La llamada al método pow de la clase Math es una llamada a un método externo, pues la clase Math no es declarada por nosotros. La llamada al método pow se hace sobre un objeto declarado y creado, pero no somos nosotros quienes la hemos declarado y creado, sino es algo que Java hace de forma automática y en segundo plano.

128
Es correcto, es correcto. Me había olvidado que las clases SalonCasa y CocinaCasa no tenian un segundo Constructror donde se recibieran parámetros.
Al no tener esos Constructores (que reciban parámetros) ha quedado truco a lo que apuntaba la intención de lo que quería mostrarte jeje. Lo dejaremos para otro ejercicio donde podamos usarlo como ejemplo.
A seguir adelante!

129
Aprender a programar desde cero / Re:Ejercicio CU00664B
« en: 12 de Junio 2015, 04:01 »
Perfecto Ariel! Correctas todas las respuestas. A seguir adelante!

130
Hola Ronal:

Tu ejercicio está perfecto! Por mi parte nada para agregar. A seguir adelante!

131
Aprender a programar desde cero / Re:CU00641B
« en: 10 de Junio 2015, 02:22 »
Hola Ronal:

Excelente, ahora veo muy bien el 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 2 de tal manera que en vez de ser:

Código: [Seleccionar]
//Constructor 2
    public Casa(double valorSuperficie, String valorDireccion,
            SalonCasa valorSalon, CocinaCasa valorCocina){
        superficie = valorSuperficie;
        direccion = valorDireccion;
        salonCasa = valorSalon;
        cocinaCasa = valorCocina;
    }

esté codificado como:

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

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

Saludos!

132
Aprender a programar desde cero / Re:CU00641B
« en: 09 de Junio 2015, 22:59 »
Hola Ronal:

He estado leyendo tu ejercicio y a mi entender tiene cosas que están muy bien y cosas que debemos revisar.

Las clases CocinaCasa y SalonCasa están perfectas.

Ahora bien, respecto a la clase Casa están muy bien declarados los atributos y también están muy bien los métodos setSuperficie, setDireccion, getDireccion, y getSuperficie.
Los demás métodos que incluíste en esta clase no deberían existir en esta clase ya que son métodos que correspondan a otras clases (corresponden a las clases SalonCasa y CocinaCasa).

Fíjate lo siguiente: la clase Casa tiene 4 atributos a saber:

Código: [Seleccionar]
    double superficie;
    String direccion;
    SalonCasa salonCasa;
    CocinaCasa cocinaCasa;

Muy bien, por lo tanto la clase Casa deberá tener métodos set y get para esos 4 atributos (no así para los atributos de los atributos). Entonces están perfectos los métodos set y get de los atributos direccion y superficie. Y los métodos set y get de los atributos objetos deberían ser:

Código: [Seleccionar]
   public void setSalonCasa (SalonCasa objetoSalon){
   salonCasa = objetoSalon;}
   public void setCocinaCasa (CocinaCasa objetoCocina)
   {cocinaCasa = objetoCocina;}
   
   public SalonCasa getSalonCasa(){return salonCasa;}
   public CocinaCasa getCocinaCasa(){return cocinaCasa;}

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

133
Hola Ronal:

Estuve revisando tu ejercicio y tiene cosas que están muy bien y cosas que debemos revisar.

La clase CocinaCasa y la clase SalonCasa están perfectas.
Respecto a la clase Casa: están muy bien declarados los atributos. También están muy bien los métodos setSuperficie, setDireccion, getDireccion, y getSuperficie.
Sin embargo los demás métodos no deberían existir en esta clase, ya que son métodos que correspondan a las clases SalonCasa y CocinaCasa.
Fíjate lo siguiente: la clase Casa tiene 4 atributos a saber:

Código: [Seleccionar]
    double superficie;
    String direccion;
    SalonCasa salonCasa;
    CocinaCasa cocinaCasa;

Muy bien, por lo tanto la clase Casa deberá tener métodos set y get para esos atributos (no para los atributos de los atributos). Entonces están perfectos los métodos set y get del atributo direccion y del atributo superficie.
Los métodos set y get de los atributos objetos deberían ser:

Código: [Seleccionar]
   public void setSalonCasa (SalonCasa objetoSalon){
   salonCasa = objetoSalon;}
   public void setCocinaCasa (CocinaCasa objetoCocina)
   {cocinaCasa = objetoCocina;}
   
   public SalonCasa getSalonCasa(){return salonCasa;}
   public CocinaCasa getCocinaCasa(){return cocinaCasa;}

Otra cosa: En el Constructor 2, debes cambiar el tipo del parámetro valorSuperficie. No es int sino que debe ser de tipo double ya que así lo declaraste previamente. Por lo tanto ese Constructor 2 debería quedar:

Código: [Seleccionar]
    public Casa(double valorSuperficie, String valorDireccion,
            SalonCasa valorSalon, CocinaCasa valorCocina){

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

134
Hola Ronal:

Tu ejercicio esta perfecto! Destaco la buena costumbre de realizar comentarios dentro del código.
A seguir adelante!

135
Hola Ronal!

Estuve revisando tu código, lo veo muy bien pero haría algunos cambios.

No incluiría el método main dentro de la clase Profesor. En la clase Profesor  dejaría solamente los contructores y los métodos set y get. Incluiría el método main en una clase aparte que podría llamarse TestProfesor.

Por otro lado, el constructor que establece los valores por defecto en la clase Profesor, debería iniciar los campos a los siguientes valores (que se consideran por defecto):

Código: [Seleccionar]
    public Profesor(){
        nombre = "";
        apellidos = "";
        edad = 0;
        boolean casado = false;
        boolean especialista = false;
    }

Saludos, a seguir adelante!

136
Aprender a programar desde cero / Re:Ejercicio CU00658B
« en: 06 de Junio 2015, 03:14 »
Hola Ariel !

Revisé tu ejercicio y funciona correctamente! muy bien por ello!

Ya que está muy bien resuelto, veamos cómo podríamos optimizarlo. Fíjate el cambio que podríamos hacerle:

Utilizamos el valor que devuelve el método entradaTeclado.length() como límite superior del ciclo for, pero sin definir un parámetro j.

El ejercicio modificado quedaría:

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

public class TestFor{

    public static void main (String [ ] args) {

        System.out.println ("\fPor favor introduzca una cadena por teclado:");
        Scanner entradaEscaner = new Scanner (System.in);
        String entradaTeclado = entradaEscaner.nextLine ();

        System.out.println ("Entrada recibida por teclado es: \"" + entradaTeclado +"\"");

        for(int i=0;i<entradaTeclado.length();i++)
        {
            System.out.println("Letra "+ (i+1) +":" + entradaTeclado.substring((i),(i+1)));
        }
    }
}

Otra cosa más: acuérdate que los nombres de las clases deben comenzar con mayúscula  ;).

Adelante, lo vienes haciendo muy bien !

137
Aprender a programar desde cero / Re:Ejercicios Cu00669B de java
« en: 06 de Junio 2015, 00:02 »
Hola!

He estado revisando tu código y funciona bien cumpliendo con la consigna del ejercicio.

Sin embargo me gustaría hacerte una observación:
En tu código has planteado un ciclo for con un condicional if else para resolverlo, escapando con un break cuando se dá con el mes elegido.
Creo que hubiera sido más acertado y elegante no utilizar un for con un if else en este caso, y utilizar más bien un ciclo while.
Por regla general se debe evitar el uso de escapes con break (salvo que sea necesario).

A continuación te planteo el mismo ejercicio resuleto con un while para que lo analices.

Código: [Seleccionar]
package ejercicioscu00669b;

public class EjerciciosCu00669B {

    public static void main(String[] args) {
        String[] meses = {"enero", "febrero", "marzo", "abril", "mayo", "junio", "julio",
            "agosto", "setiembre", "octubre", "noviembre", "diciembre"};
        String mes;
        String mesSecreto = meses[9];
        EntradaDeTeclado entrada = new EntradaDeTeclado();

        System.out.println("Adivine el mes secreto. Introduzca el nombre del mes en minúsculas:");
        mes = entrada.agregarMes();
 
        while (!mes.equals(mesSecreto)){
            System.out.print("No ha acertado. Intente adivinarlo introduciendo otro mes: ");
            mes = entrada.agregarMes();
        }
        System.out.println("¡Ha acertado!");
    }

   
}

138
Aprender a programar desde cero / Re:Ejercicios Cu00670B de java
« en: 05 de Junio 2015, 23:27 »
Perfecto!, esa era la solución: hacer primero la conversión de tipo String a tipo Integer para poder luego realizar la operación de multiplicación.

139
Aprender a programar desde cero / Re:Ejercicios Cu00667B de java
« en: 05 de Junio 2015, 13:49 »
Hola Ramón:

He estado revisando tu código:

Respecto de la clase EntradaDeTeclado. Funcionalmente funciona muy bien, si embargo no considero que esté bien nombrada. La renombraría con algo más significativo de lo que representa la clase, por ejemplo GestionadorEntradasTeclado, ya que eso es lo que esta clase es.
Lo mismo que modificaría sus dos métodos combinándolos en uno solo que al llamarlo, nos devolviera el atributo tipo String que fuese el valor que se ha ingresado por teclado. A ese método lo llamaria algo así como recogerPalabra(), ya que realmente es lo que hace.

Recuerda que la idea en POO es también crear códigos que luego podamos reutilizar. Entonces con esta clase EntradaDeTeclado con un método recogerPalabra() tendrás un código que podrás seguir utilizando en otros proyectos y no solo estará limitado a este ejercicio.

Sobre cómo renombrar las clases te cito textual lo que en otro hilo sugirió Mario R. Rancel (el Administrador), y considero que es muy esclarecedor:

Citar
Te recomendaría que empieces a acostumbrarte a pensar en cómo nombrar adecuadamente a las clases. El nombre normalmente debe ser descriptivo, en singular, y reflejar lo que representa o hace la clase. En el caso de que la clase represente algo de la vida real será "Rueda" o "Vehiculo", etc. En el caso de que represente algo no real podrá ser "Pensamiento" o "Duda" o "Reunion". Cuando las clases están destinadas más que a representar a realizar procesos, como es este caso, los nombres suelen ser del tipo -or, por ejemplo CombinadorInicialesPalabras, Exponenciador, ConstructorDeMultillaves, ExtractorDeAtributos, ReductorDeFlujo, etc.

Respecto de la clase CantanteFamoso:
Me ha parecido muy bien codificar dos posibilidades de Constructor: con y sin parámetros.
Muy bien los métoso get. Te han faltado escribir los métodos set.

Respecto de la clase ListaCantantesFamosos:
Está muy bien realizada la clase, aunque fíjate que te sale un Warning al compilarla. Es por cómo has codificado el Constructor, está mal inicializado el ArrayList. Analiza y escribe el constructor de la siguiente manera:

Código: [Seleccionar]
    public ListaCantantesFamosos() {
        cantantes = new ArrayList<CantanteFamoso>();
    }

El atributo del método AgregarCantanteFamoso debería ir con minúscula para respetar la convención de minúsculas y mayúsculas al nombrar atributos.

Muy bien realizado el método listarCantanteFamoso().

Respecto de la clase EjerciciosCu00667B:

Está clase no complia, pero está muy bien realizada.
¿Dónde está el problema que hace que no compile? No compila porque deberías cambiar la línea:

Código: [Seleccionar]
List.listarCantanteFamoso();por:
Código: [Seleccionar]
listacantate.listarCantanteFamoso();
Sugeriría además que renombraras el atributo listacantate por listaCantante para respetar la convención de minúsculas y mayúsculas al nombrar atributos.

Otra sugerencia: a la declaración del atributo tipo String

Código: [Seleccionar]
String continuar = new String();
simplemente la deberías realizar como lo hemos hecho siempre:

Código: [Seleccionar]
String continuar;

A seguir adelante!

140
Aprender a programar desde cero / Re:Ejercicio C00649B
« en: 04 de Junio 2015, 13:42 »
Hola Ariel:

Tu ejercicio está muy bien! simple y eficiente.

Voy a hacerte una observación respecto al nombre de la clase. Para ello me voy a servir esta vez de la excelente explicación que hizo en otro post Mario R. Rancel (Administrador).
Lo cito textual:

Citar
Te recomendaría que empieces a acostumbrarte a pensar en cómo nombrar adecuadamente a las clases. El nombre normalmente debe ser descriptivo, en singular, y reflejar lo que representa o hace la clase. En el caso de que la clase represente algo de la vida real será "Rueda" o "Vehiculo", etc. En el caso de que represente algo no real podrá ser "Pensamiento" o "Duda" o "Reunion". Cuando las clases están destinadas más que a representar a realizar procesos, como es este caso, los nombres suelen ser del tipo -or, por ejemplo CombinadorInicialesPalabras, Exponenciador, ConstructorDeMultillaves, ExtractorDeAtributos, ReductorDeFlujo, etc.
En este caso podrías haber usado CombinadorInicialesPalabras: un objeto de esa clase es un objeto que se dedica a combinar iniciales de palabras.

Saludos y a seguir adelante!

Páginas: 1 2 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".