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

Páginas: 1 ... 14 15 16 17 18 [19] 20
361
Buenas, aunque no hay ejercicios a realizar, queria indicar que en la parte de codigo del método getPrimeraPalabra() de la clase EntradaDeTeclado.

dentro del if en return entradaTeclado.substring(0, i+1); le sobra el +1 a la variable i, pues en ese caso devuelve la palabra + el espacio que acaba de encontrar que coincide.
Ejemplo: la palabra es "Hola " en lugar de "Hola".

Código: [Seleccionar]
public String getPrimeraPalabra ()  { 

        for (int i=0; i < entradaTeclado.length() - 1; i++) {

            if (entradaTeclado.substring (i, i+1).equals(" ") ) {     //IMPORTANTÍSIMO: COMPARAMOS CON EQUALS

                return entradaTeclado.substring(0, i+1);         }

        }

        return entradaTeclado;  //Caso de que no se detecte ningún espacio devolvemos lo que haya

    } //Cierre del método getPrimeraPalabra



362
Aquí mi solución.

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

public class SepararLetras{
   
    public static void main (String[] args){
       
        String frase = "";
        int contador = 0;
       
        do{
        System.out.println(" Introduce una frase ");
       
        Scanner scanTexto = new Scanner(System.in);
        frase = scanTexto.nextLine();
        }
        while (frase.equals("") );
       
        while(contador < frase.length() ){
           
            System.out.println("Letra " + contador + ": " + frase.substring(contador, contador+1) );
            contador++;
        } // cierre while
    } // cierre main
}  // cierre clase


363
Aquí va mi respuesta al ejercicio.
 
Crea una clase con un método main que pida una entrada de teclado y usando un bucle for, el método length de la clase String y el método substring de la clase String, muestre cada una de las letras que componen la entrada. Por ejemplo si se introduce “ave” debe mostrar:

Letra 1: a
Letra 2: v
Letra 3: e

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

public class SepararLetras{

   
    public static void main (String[] args){
       
        String frase = "";
       
        do{
            System.out.println("Introduce una palabra o frase");

            Scanner escanerTexto = new Scanner(System.in);
            frase = escanerTexto.nextLine();
        }
        while ( frase.equals("") );
       
        for(int x=0;x<frase.length();x++){
           
            System.out.println("Letra " + (x+1) + ":" + frase.substring(x,x+1) );
        }
    } //final del main
}//cierre clase

364
Apuntado en mi libreta ;) gracias toni como siempre por el tiempo dedicado y los consejos.

365
Si claro que se podria, simplemente con un this ("","",0,false,false). Era por probar una forma de inicializar distinta, si entiendo lo que quieres decir, es raro que todos los que se inicializan con el constructor vacío se llamen igual.
ok entiendo toni gracias.

366
Solución del ejercicio.

 Crea una clase con un método main que pida una entrada de teclado y usando condicionales, el método length de la clase String y el método substring de la clase String, muestre un mensaje indicando:

a) Si la cadena introducida tiene menos de 5 caracteres, entre 5 y 15 caracteres o más de 15 caracteres.

b) Si la cadena introducida comienza por la letra a.

Primero, he tenido que utilizar el metodo texto.equals("a") para poder comparar textos porque con == no me lo detectaba.
He intentado controlar la no introduccion de cadena de texto alguna con un do while

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

public class VerificadorCadena{
   
    public static void main (String[] args){
        String texto = "";
        int largoCadena = 0;
        String primeraA = "";
       
        do{
        System.out.println("Introduce una cadena de texto ");
        Scanner sc = new Scanner(System.in);
        texto = sc.nextLine(); }
        while (texto.equals(""));
       
        largoCadena = texto.length();
       
        //Comprobar si la primera letra es la letra A
        if(texto.substring(0,1).equals("a") || texto.substring(0,1).equals("A")){
            primeraA = "SI";
        }else{ primeraA = "NO";}
       
        if ( largoCadena < 5 ){
           System.out.println("La cadena introducida tiene menos de 5 carácteres y la primera letra " + primeraA + " es la a");
        } 
        else if ( largoCadena >= 5 && largoCadena <= 15 ){
          System.out.println("La cadena introducida tiene entre 5 y 15 carácteres y la primera letra " + primeraA + " es la a");
        }
        else { System.out.println("La cadena introducida tiene más de 15 carácteres y la primera letra " + primeraA + " es la a");
        }
       
    }  //Cierre del Main
} //Cierre de clase
       
       




367
Buenas, entrego la solución del ejercicio;
Citar

Define una clase Profesor
considerando los siguientes atributos de clase: nombre (String), apellidos (String), edad (int), casado (boolean), especialista (boolean). Define un constructor que reciba los parámetros necesarios para la inicialización y otro constructor que no reciba parámetros. El nombre de los parámetros debe ser el mismo que el de los atributos y usar this para asignar los parámetros recibidos a los campos del objeto. Crea los métodos para poder establecer y obtener los valores de los atributos, con sobrecarga de nombres y uso de this en los métodos setters (los que sirven para establecer el valor de los atributos). Compila el código para comprobar que no presenta errores, crea un objeto usando el constructor con sobrecarga. Comprueba que se inicializa correctamente consultando el valor de sus atributos después de haber creado el objeto. Usa los métodos setters y comprueba que funcionen correctamente.

Comentar que en el constructor sin parametros he utilizado para probar, la otra forma de usar el this(parametros) en referencia al constructor creado en sobrecarga con el de sin parametros. (no se si se debe o mejor poner los campos uno a uno manual).

Código: [Seleccionar]

public class Profesor{
   
    //Campos de Clase
   
    private String nombre;
    private String apellido;
    private int edad;
    private boolean casado;
    private boolean especialista;
   
    //Constructor con parámetros con mismo nombre que campos de Clase
   
    public Profesor(String nombre, String apellido, int edad, boolean casado, boolean especialista){
        this.nombre = nombre;
        this.apellido = apellido;
        this.edad = edad;
        this.casado = casado;
        this.especialista = especialista;
    }
   
    // Constructor sin parámetros
   
    public Profesor(){
        this("Juan", "Lopez", 40, false, true);
    }
   
    //Setters
   
    public void setNombre(String nombre){
        this.nombre = nombre; }
    public void setApellido(String apellido){
        this.apellido = apellido; }
    public void setEdad(int edad) {
        this.edad = edad; }
    public void setCasado (boolean casado){
        this.casado = casado;}
    public void setEspecialista (boolean especialista){
        this.especialista = especialista; }
       
    //Getters
   
    public String getNombre(){ return nombre; }
    public String getApellido(){ return apellido; }
    public int getEdad(){ return edad; }
    public boolean getCasado(){ return casado; }
    public boolean getEspecialista() { return especialista; }

} //cierre de Clase
   


368
Buenos días, estas son mis respuestas a riesgo de equivocarme (seguro) pues antes no comprobé las de otros ejercicios ya realizados.

 Reflexiona y responde a las siguientes preguntas:

a) ¿Es posible llamar a un método externo de un objeto que ha sido declarado pero no creado?

Respuesta No, si no se crea, no existe aunque al declararlo se reserve la memoria para asignarle. Por lo tanto al no existir no s pueden usar sus métodos.

b) ¿Es posible llamar a un método externo de un objeto “A” que ha sido declarado y creado pero cuyo constructor está vacío?

Respuesta Sí, se creará el objeto aunque los campos esten vacios o con valores por defecto que desconocemos.

c) Una llamada al método pow de la clase Math que hacemos dentro de un método definido en una clase ¿Es una llamada a un método interno o a un método externo? ¿La llamada al método pow se hace sobre un objeto declarado y creado o no declarado y no creado?

Respuesta Externo, es de la clase Math. La clase Math es declarada y creada por defecto, por eso no hace falta importarla, además es abstracta.

369
No, no me equivoqué, o al menos no sabía que debia juntarlos, el primer código o email es la práctica, el segundo es el ejercicio evaluable propiamente dicho.

Si he de ponerlos juntos, en el futuro lo tendre en cuenta toni, gracias por los comentarios como siempre.

Sí, lo de public tb me di cuenta, al no declararlos public, por defecto son publicos a otras clases?

370
Fíjate en el resultado que ofrece el método CombinadoSiempre cuando se le pasan como parámetros dos cadenas vacías. ¿Te parece lógico el resultado?

He hecho un System.out.println(valorTexto1.substring(0,0); y devuelve una cadena vacía, no salta ninguna excepción o error.
Así pues el resultado, un "espacio", es coherente con el código.
Si se quisiera controlar el no pasar cadenas vacías solo habría que poner un if(valorTexto1.length()=0) return "cadena vacia no".


En la clase tenemos definidos dos atributos o campos. ¿Tienen utilidad conocida a la vista del código de la clase? ¿Se usan en los métodos que tenemos definidos?

No, no tienen utilidad ninguna, pues los Strings que se usan dentro del método son los definido en el encabezado del mismo (String valor_texto1) y no los inicializados y declarados en la clase, deberian quitarse.


También he detectado que los métodos, en el texto, están en mayúscula, es un error o tiene que ver algo que sean de la Clase String?

/Método que combina las tres primeras letras de cada cadena

    String Combinacion (String valor_texto1, String valor_texto2) {

371
El enunciado del ejemplo pedía;

Valiéndonos de este método, intenta escribir tu propio código para hacer lo siguiente:

a) Reescribir la clase Combinador que usamos anteriormente de forma que el método combinacion devuelva “No aporta cadenas válidas” si se le pasa como parámetro alguna cadena que contenga menos de tres caracteres.

b) Escribir un nuevo método de la clase, al que podemos denominar combinadoSiempre  que en caso de que se pasen cadenas con menos de tres caracteres, las combine de todas formas en base a los caracteres disponibles, sea el número que sea.

Donde dice en el ejemplo b las combine de todas formas, he entendido que haga uniones de dos caracteres con todas las opciones que sean posibles, y lo hice adaptado a los caracteres que fueran. Ejemplo si pasas "abc" "def"... crea "ad","ae",af","bd"....

Ejercicio para evaluación

Código: [Seleccionar]
public class CombinaCadenas{

    public CombinaCadenas(){
        //vacío sin atributos de clase
    }

    //Método para combinar palabras pasadas por parámetro String que solo tengan tamaño mayor a 3 letras controlando no validas sino.

    public String combinadorCadenas(String palabra1, String palabra2, String palabra3){

        //Atributos para calcular tamaño de las palabras pasadas
        int longitud1 = palabra1.length();
        int longitud2 = palabra2.length();
        int longitud3 = palabra3.length();

        if(longitud1 > 2 && longitud2 > 2 && longitud3 > 2){
            return palabra1.substring(0,3) + " " + palabra2.substring(0,3) + "-" + palabra3.substring(0,3);
        }else {return "No aporta cadenas válidas";}

    }

    //Método para combinar palabras sea cual sea el tamaño de estas

    public String combinaSiempre(String palabra1, String palabra2, String palabra3){

        // Atributos de longitud de las palabras
        int longitud1 = palabra1.length();
        int longitud2 = palabra2.length();
        int longitud3 = palabra3.length();

        //Atributo cadena que retornaremos en el metodo
        String cadena="";

        if (longitud1<3){
            cadena=cadena + palabra1.substring(0,longitud1);} else{
            cadena=cadena + palabra1.substring(0,3);}
        if (longitud2<3){
            cadena=cadena + " " + palabra2.substring(0,longitud2);} else{
            cadena=cadena + " " + palabra2.substring(0,3);}
        if (longitud3<3){
            cadena=cadena+ " " + palabra3.substring(0,longitud3);} else{
            cadena=cadena+ " " + palabra3.substring(0,3);}

        return cadena;
    }

    //Método para combinar las palabras entre sí en todas las opciones posibles de dos caracteres (me faltaria repetir el bucle empezando por la segunda introducida)

    public String combinaLetras(String palabra1, String palabra2){
        //String resultante para return
        String cadena="";
        //Atributos de metodo para calcular tamaño de palabras
        int longitud1 = palabra1.length();
        int longitud2 = palabra2.length();

        if (longitud1<3 && longitud2<3){ //Combinador de palabras con menos de dos letras, aunque sirve para cualquier longitud de tamaño
            for(int x=0;x<longitud1;x++){

                for(int y=0;y<longitud2;y++){

                    cadena=cadena + palabra1.substring(x,x+1) + palabra2.substring(y,y+1) + " ";

                }

            }

            for(int x=0;x<longitud1;x++){

                for(int y=0;y<longitud2;y++){
                    cadena=cadena + palabra2.substring(y,y+1) + palabra1.substring(x,x+1) + " ";

                }

            }
        }

        return cadena;
    }

   
}




372
Vale genial, resultado no hace falta pq solo lo retornamos no hacemos nada con esa variable.

Y lo otro era una linea redundante, genial, gracias Toni lo tendré presente en el futuro ;)

373
Buenas noches, aquí dejo mi solución para el ejercicio.

He intentado controlar el error de tamaño insuficiente en los Strings con length() y un if, a ver que os parece, con los conocimientos actuales no se me ocurria nada más.

Sugerencias? peros?

Código: [Seleccionar]
public class CombinaCadenas{

    public CombinaCadenas(){
        //vacion sin atributos
    }

    public String combinadorCadenas(String palabra1, String palabra2, String palabra3){
        int longitudPalabra1=0;
        int longitudPalabra2=0;
        int longitudPalabra3=0;
        String cadena="";

        //mirar longitud de las palabras y controlar error por cantidad caracteres inferior a la necesaria
        longitudPalabra1 = palabra1.length();
        longitudPalabra2 = palabra2.length();
        longitudPalabra3 = palabra3.length();

        //Controlamos con un if la posibilidad de una introduccion inferior de caracteres de los necesarios sino, se procede a substring

        if(longitudPalabra1<2 || longitudPalabra2<4 || longitudPalabra3<6){
            cadena= " Error: La longitud de la primera palabra debe tener mínimo 2 letras, la segunda 4 y la tercera 6. ";
            System.out.println(cadena);
            return cadena;
        }
        else{
            cadena= palabra1.substring(0,2) + " " + palabra2.substring(0,4) + "-" + palabra3.substring(0,6); }
           
        return cadena;
    }
}

       

374
Buenas tardes, dejo aquí mi solución para cualquier comentario o matiz que siempre ayudan.

Por cierto el curso en si me parece estupendo paso a paso sin dar nada por sentado.

Código: [Seleccionar]
public class MiniCalculadoraEjemplo{

    //constructor vacío de atributos

    public MiniCalculadoraEjemplo(){ /*vacio*/ }

    //Retorno del valor absoluto de un numero

    public double valorAbsoluto(double numero){
        return Math.abs(numero); }
       
    //Retorno raiz cuadrada de un numero
   
    public double raizCuadrada(double numero){
        return Math.sqrt(numero);}
}

375
Sugerencias? comentarios ? :) quizá usé variables de más y se podia simplificar más? o no afecta.

376
Entonces entiendo que es mejor hacer un new Salon como tenía ya al principio de mi ejercicio, que pasarle parametros de una instancia ya creada de Salon o Cocina?

EDITO, He creado nuevos Salones y Cocinas, y efectivamente al pasarlo a Casa con new, se pasan los paramentros y adquiere nombre diferente (se crea una nueva instancia de Salon o Cocina).
Si me dices que es mejor así, para asegurarme que no se modifica la información a la que apunta, seguiré haciendolo con new, gracias por la explicación.

377
Aquí entrego el ejercicio con dos métodos de calculo, iterativo y recursión, este segundo da bien el resultado pero no sé si es lo que se considraria recursión pues modifico el parametro boolean pasado en un momento dado.

Clase MultiplicadorDieces
Código: [Seleccionar]
public class MultiplicadorDieces{
   
    public MultiplicadorDieces(){
        //Nada que inicializar
    }
   
    //Metodo 1 iterativo multiplicar dieces
    public double multiplicarPorDiez(double valorNumero, int numeroCeros){
        int dieces=1;
        double resultado=1;
       
        for (int i=1;i<=numeroCeros;i++){
           dieces=dieces*10;}
       
        resultado=valorNumero * dieces;
        return resultado;
    }
   
    // Método recursión
    public double recursionMultiplicar(double valorNumero, int numeroCeros){
        if (numeroCeros==0){return valorNumero;
        } else if (numeroCeros==1){ return valorNumero *10;
        } else { return valorNumero * recursionMultiplicar(10, numeroCeros-1);}
        }
 
}

378
Vale revisando los ejercicios de otros compañeros he visto que en el constructor de la clase Casa yo creo un new SalonCasa y un new CocinaCasa

Código: [Seleccionar]
   //Constructor que recibe parametros superficie direccion salonCasa y cocina
   
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocina){
        superficie= valorSuperficie;
        direccion= valorDireccion;
        salonCasa= new SalonCasa(objetoSalonCasa.getNumeroDeTelevisores(), objetoSalonCasa.getTipoSalon() );
        cocina= new CocinaCasa(objetoCocina.getEsIndependiente(),objetoCocina.getNumeroDeFuegos() );
    }

Y se podria solucionar mejor, simplemente asignando objetos ya creados, que es exactamente lo que pedía el ejercicio.

Código: [Seleccionar]
//Constructor que recibe parametros superficie direccion salonCasa y cocina
   
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocina){
        superficie= valorSuperficie;
        direccion= valorDireccion;
        salonCasa= objetoSalonCasa;
        cocina= objetoCocina;
    }

Lo he corregido y lo entiendo, ya con el otro contructor de inicialización es suficiente, después solo es necesario usar los setters y pasas el objeto salonCasa o CocinaCasa.

379
Buenas tardes, aquí dejo mi ejercicio para cualquier observación.

Clase CocinaCasa

Código: [Seleccionar]
public class CocinaCasa{
   
    //Atributos de clase
    private boolean esIndependiente;
    private int numeroDeFuegos;
   
    //Constructor inicializado a 0 y false
    public CocinaCasa(){
        esIndependiente=false;
        numeroDeFuegos=0; }
       
    //Constructor que solicita los parametros de clase
    public CocinaCasa(boolean valorEsIndependiente, int valorNumeroDeFuegos){
        esIndependiente=valorEsIndependiente;
        numeroDeFuegos=valorNumeroDeFuegos; }
   
    //Setters
    public void setEsIndependiente(boolean valorEsIndependiente){
        esIndependiente=valorEsIndependiente; }
    public void setNumeroDeFuegos(int valorNumeroDeFuegos){
        numeroDeFuegos=valorNumeroDeFuegos; }
     
    //Getters
    public boolean getEsIndependiente(){ return esIndependiente; }
    public int getNumeroDeFuegos(){ return numeroDeFuegos; }

}
 

Clase SalonCasa
Código: [Seleccionar]

public class SalonCasa{
   
    //Atributos clase
    private int numeroDeTelevisores;
    private String tipoSalon;
   
    //Constructor inicializado a 0 y desconocido
    public SalonCasa(){
        numeroDeTelevisores=0;
        tipoSalon="desconocido"; }
       
    //Constructor necesario para inicializar Casa con parametros
    public SalonCasa(int valorNumeroDeTelevisores, String valorTipoSalon){
        numeroDeTelevisores=valorNumeroDeTelevisores;
        tipoSalon=valorTipoSalon; }
       
    //Setters
    public void setNumeroDeTelevisores(int valorNumeroDeTelevisores){
        numeroDeTelevisores=valorNumeroDeTelevisores; }
    public void setTipoSalon(String valorTipoSalon){
        tipoSalon=valorTipoSalon; }
   
    //Getters
    public int getNumeroDeTelevisores(){ return numeroDeTelevisores; }
    public String getTipoSalon(){ return tipoSalon; }
}

Clase Casa
Código: [Seleccionar]

public class Casa{
   
    //Atributos de clase
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocina;
   
    //Constructor valores por defecto
   
    public Casa(){
        superficie=0;
        direccion="";
        salonCasa= new SalonCasa();
        cocina= new CocinaCasa(); }
   
    //Constructor que recibe parametros superficie direccion salonCasa y cocina
   
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocina){
        superficie= valorSuperficie;
        direccion= valorDireccion;
        salonCasa= new SalonCasa(objetoSalonCasa.getNumeroDeTelevisores(), objetoSalonCasa.getTipoSalon() );
        cocina= new CocinaCasa(objetoCocina.getEsIndependiente(),objetoCocina.getNumeroDeFuegos() );
    }
 
   
    //Setters
   
    public void setSuperficie(double valorSuperficie){
        superficie=valorSuperficie; }
    public void setDireccion(String valorDireccion){
        direccion=valorDireccion; }
    public void setSalonCasa(SalonCasa valorSalonCasa){
        salonCasa=valorSalonCasa; }
    public void setCocina(CocinaCasa valorCocina){
        cocina=valorCocina; }
       
    //Getters
   
    public double getSuperficie(){ return superficie; }
    public String getDireccion(){ return direccion; }
    public SalonCasa getSalonCasa(){ return salonCasa; }
    public CocinaCasa getCocina(){ return cocina; }
   
}
 

380
Nadie? me gustaría resolver esta duda, si se debe emplear la variable edad dentro de la Clase, o mejor o peor usar el getter getEdad()

Gracias.

Páginas: 1 ... 14 15 16 17 18 [19] 20

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