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.


Temas - Lorenzo31

Páginas: 1 2 3 4 [5] 6
81
Buenas, adjunto ejercicio usando fill con indices inicial y final (exclusivo), era solo una práctica pero ahi va igual por si a alguien le aporta.

Código: [Seleccionar]

import java.util.Arrays;

//uso metodo copyOf clase Arrays
public class FillConIndices{
    public static void main (String [] args){
        int [] miArray1 = { 2, -4, 3, -7};

        for ( int miNumero : miArray1 ) {System.out.println("miArray1 " + miNumero ); }

        System.out.println("");

        int [] otroArray = {1, 2, 4, 8};

        for ( int miNumero : otroArray ) { System.out.println("otroArray " + miNumero ); }

        System.out.println("Son mismo objeto?   " + (miArray1 == otroArray) );
        System.out.println("Tienen mismo contenido?   " + Arrays.equals(miArray1, otroArray) );

        //Copiamos el array utilizando copyOf de la clase Arrays

        otroArray = Arrays.copyOf(miArray1, miArray1.length + 2);

        for(int i = 0; i < otroArray.length; i++){
            if( otroArray[i] < 0 ){ Arrays.fill (otroArray, i, i + 1, 33);}
        }

        for ( int miNumero : otroArray ) { System.out.println ("otroArray " + miNumero ); }
        System.out.println("Son mismo objeto?   " + (miArray1 == otroArray) );
        System.out.println("Tienen mismo contenido?   " + Arrays.equals(miArray1, otroArray) );
    }
}



82
Buenas aquí va mi solucion al ejercicio.

Citar
Crea un programa Java donde declares un array de enteros tipo int miArray1 cuyo contenido inicial sea {2, -4, 3, -7}. Muestra su contenido por pantalla. Copia el contenido de este array a un ArrayList denominado lista1 y muestra su contenido por pantalla. ¿Qué tipo de datos almacena el array? ¿Qué tipo de datos almacena el ArrayList?

¿Qué tipo de datos almacena el array? Puede almacenar tanto primitivos como Objetos, el array siempre será una colección de elementos con índice, sea de primitivos o de objetos. En este ejercicio los datos almacenados en el array son tipos primitivos (números simples)

¿Qué tipo de datos almacena el ArrayList? Solo almacena Objetos, para numeros usa Integer, Double, Float...  En este ejercicio el ArrayList almacena objetos Integer.

Clase TestArrayList, muy sencilla solo era de verificación.

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

public class TestArrayList{

    public static void main (String[] args){
        int [] miArray1 = {2, -4, 3, -7};

        for(int numArray : miArray1){ System.out.println("miArray1 " + numArray); }

        ArrayList<Integer> lista1 = new ArrayList<Integer>();

        for(int i = 0; i < miArray1.length ; i++){
            lista1.add(miArray1[i]);}

        for (int numArray : lista1){ System.out.println("lista1 " + numArray); }
    }
}

83
Buenas, dejo aquí la respuesta a mi ejercicio

Clase Circulo
Código: [Seleccionar]
public class Circulo{
   
    private static final double NUMEROPI = 3.1416; //En mayuscula porque es final, no se puede modificar
    private double radio;
   
    public Circulo(){ //constructor inicializo y asigno valor a radio;
        radio = 0.0; }
   
    //Setter   
    public void setRadio(double valorRadio){
        radio = valorRadio; }
    //Getters
        public double getRadio(){ return radio; }
    public double getNumeroPi(){ return NUMEROPI; }
    // Funcion que devuelve el area del circulo
    public double areaCirculo(){ return NUMEROPI * (radio * radio); }
    //Funcion que devuelve longitud del circulo
    public double longitudCirculo(){ return 2*NUMEROPI*radio; }
}

Clase EntradaDatos

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

public class EntradaDatos{
    private double numero = 0;

    public EntradaDatos(){ /*vacio*/ } //constructor

    public void entradaDouble(){ //recoger el double por Scanner
        do{
            try{
                Scanner entrada = new Scanner(System.in);
                numero = entrada.nextDouble();
            }catch (InputMismatchException e){ System.out.println("Debes introducir un numero para el radio");}
        }while(numero == 0);
    }

    public int entradaEntero(){
        int opcion = 0; 
        do{
            try{
                Scanner entrada = new Scanner(System.in);
                opcion = entrada.nextInt();
            }catch(InputMismatchException e){ System.out.println("Debes introducir un numero del 1 al 3");}
        }while(opcion < 1 && opcion >3);
        return opcion;
    }

    //getter
    public double getDouble(){ return numero;}
}// cierre clase

Clase OperacionesCirculo

Código: [Seleccionar]
public class OperacionesCirculo{

    public static void main (String[] args){
        boolean salida = false;
        Circulo circunferencia = new Circulo();  //creo el nuevo Circulo

        System.out.println("Por favor introduce el radio de la circunferencia");

        EntradaDatos entrada = new EntradaDatos(); //pido datos con nuevo EntradaDatos
        entrada.entradaDouble();
        circunferencia.setRadio(entrada.getDouble()); //hacemos un setRadio para pasar el valor a instancia de clase Circulo

        //menu que mientras no se seleccione CASE 3 no pondra en true el boolean salida
        while(salida == false){
            System.out.println(" \n 1.- Dar Area Circulo \n 2.- Dar Longitud del Circulo \n 3.-Salir ");
            switch (entrada.entradaEntero()){
                case 1: System.out.println("\n El area del circulo es " + circunferencia.areaCirculo()); break;
                case 2: System.out.println("\n La longitud del circulo es " + circunferencia.longitudCirculo()); break;
                case 3: salida = true; break;
            } //cierre switch
        } //cierre while
        System.out.println("Final del programa");
    }//cierre main
}//cierre clase

84
Buenas tardes, aquí dejo la solución a mi ejercicio

Clase EntradaDatos

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

public class EntradaDatos{
    private int numero;

    public EntradaDatos(){ /*vacio*/}

    public void recogerNumero(){

        do{ 
            try{   //recoge un Int entre 1 y 100 y  sino vuelve a pedir la entrada de dato
                System.out.println("Por favor introduce un numero entre 1 y 100 \n");
                Scanner escaner = new Scanner(System.in);
                numero = escaner.nextInt();
            }catch(InputMismatchException e){}
        } while( numero > 100 || numero < 1);
    }
   
    public int getNumero(){ return numero; }  //devuelve el int entre 1 y 100 introducido
}

Clase NumeroAleatorio

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

public class NumeroAleatorio {
     private int numeroRandom;
     
    public NumeroAleatorio(){
        //declaramos y inicializamos aleatorio como Random
        Random aleatorio = new Random();
        // asigno a numeroRandom un aleatorio entre 0 y 99 y le añado 1 para que esté entre 1 y 100
        numeroRandom = aleatorio.nextInt(100) + 1;
    }
   
    public int getNumeroAleatorio(){ return numeroRandom; }
}

Clase AdivinaNumero (main)

Código: [Seleccionar]
public class AdivinaNumero{
   
    public static void main (String [] args){
        int aleatorio;
        //Creamos objeto adivinanza del tipo NumeroAleatorio que automaticamente genera un numero random
        NumeroAleatorio adivinanza = new NumeroAleatorio();
        aleatorio = adivinanza.getNumeroAleatorio();
       
        System.out.print("Se ha generado un número aleatorio entero entre 1 y 100, intente adivinarlo \n \n");
        // Pedimos introduzca un numero creado nuevo objeto EntradaDatos
        EntradaDatos entrada = new EntradaDatos();
       
        do{
         // usando el metodo recogerNumero para que introduzca numero el usuario
       
        entrada.recogerNumero();
       
        if (entrada.getNumero() > aleatorio) { System.out.println(" No has acertado: el número es menor ");}
          else if (entrada.getNumero() < aleatorio) { System.out.println(" No has acertado: el número es mayor ");} 
           
        } while (entrada.getNumero() != aleatorio);
       
        System.out.println(" Enhorabuena !! has acertado, el número era " + aleatorio );
    } // final main
}// final clase

85
Hola, buenas noches, me presento tarde, pues ya empecé el curso de "java desde 0" hace un par de semanas, pero ya sabeis lo que se dice, más vale tarde que más tarde.

Mi nombre es Lorenzo, tengo el grado superior de desarrollo de aplicaciones pero, lo aparqué como profesión para dedicarme a otras cosas. Ahora pretendo REaprender Java para desarrollar alguna aplicación que tengo en mente para Android a posteriori y quien sabe.

Felicitar al foro y la dirección del mismo pues creo que tanto los cursos como este foro y sus moderadores son geniales, y no lo digo por decir, en dos semanas y poco voy por el capitulo 72 y he aprendido muchísimo ya (a mi corto entender) pronto al nivel de lo que di en Java en TODO el segundo año del grado superior (faltan ficheros y algo más que cuando vea iré recordando).

Así que es un curso que aconsejo a todos los que dudeis y me leais porque vale la pena.

Saludos a todos los foreros y espero ir conociendoos.


86
Ahí van mis respuestas al ejercicio.

 salta un mensaje de error “operator * cannot be applied to int, java.lang.String”

a ¿Qué interpretación haces de este mensaje de error?
Respuesta Al querer multiplicar un entero 2 * String (entradaUsuario) salta error por incompatibilidad de tipos.

b ¿Cómo se puede corregir el código para que a través de una conversión de tipos se ejecute el programa?
Respuesta

Con valueOf. Transformo el String en un Integer, y opero con el pues Java creo se explicó que transformaba un objeto Integer a un int primitivo por si solo (en el cálculo, lo añado porque en el siguiente capitulo se ve la importancia de pasar bien tipos primitivos o Objetos) , sino habria que volver a transformar el Integer a int con un,
   int nuevoNumero = (int)ObjetoInteger;

Código: [Seleccionar]
import javax.swing.JOptionPane;

public class Ejemplo1{
   
    public static void main (String [] args){
        Integer numero = 0;
        String entradaUsuario = JOptionPane.showInputDialog("Introduzca un número:");
        numero = numero.valueOf(entradaUsuario);
        System.out.println("El doble del numero introducido es : " + 2 * numero);
    } //cierre main
}// cierre clase

con parseInt

Código: [Seleccionar]
import javax.swing.JOptionPane;

public class Ejemplo1{
   
    public static void main (String [] args){
        int numero;
        String entradaUsuario = JOptionPane.showInputDialog("Introduzca un número:");
        numero = Integer.parseInt(entradaUsuario);
        System.out.println("El doble del numero introducido es : " + 2 * numero);
    } //cierre main
}// cierre clase

Hay alguna diferencia? me da la sensación que con parseInt ya convierte String --> Integer ---> int. la doble conversión y valueOf necesitaria hacerla de nuevo con el Integer.

87
Buenas noches, aquí mi solución del programa, comentar que uso un random para asignar posición de la array al mesSecreto y poco más he cambiado.

Clase EntradaDatos

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

public class EntradaDatos{
   
    public EntradaDatos(){ /*vacio*/ }
   
    public String recogerString(){
       
        String palabra = "";
        do{
           
            Scanner escaner = new Scanner(System.in);
            //como solo es una palabra recojo con next() no nextLine()
            palabra = escaner.next();
        }while (palabra.isEmpty() );
     
        return palabra;
    }
}

Clase GestorMeses (main)

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

public class GestorMeses{

    public static void main(String[] args){
       
        //Declaro y asigno los meses al String meses
        String [] meses = new String [12];
        meses[0] = "enero"; meses [1] = "febrero"; meses[2] = "marzo"; meses[3] = "abril"; meses[4]="mayo;";
        meses[5] = "junio"; meses [6] = "julio"; meses[7] = "agosto"; meses[8] = "septiembre"; meses[9] = "octubre";
        meses[10] = "noviembre"; meses[11] = "diciembre";

        //Declaracin String mesSecreto a adivinar
        String mesSecreto;
        //Declaro un new de la clase Random para generar aleatoriamente un int que corresponda a las posiciones de la array
        Random numero = new Random();
        //Declaro un new de la clase EntradaDatos para recoger la palabra introducida
        EntradaDatos entrada = new EntradaDatos();
        //Declaro y asigno false boolean semaforo para salir del bucle
        boolean semaforo = false;
        //Asignación
        mesSecreto = meses [numero.nextInt(12)];

        System.out.println("Iniciamos el programa... ");
        System.out.println(" \n \n Introduce el nombre de un mes para adivinar el Mes Secreto");

        while(semaforo == false){

            if(mesSecreto.equalsIgnoreCase(entrada.recogerString())){ System.out.println("Has acertado!!"); semaforo = true;
            }else { System.out.println(" No ha adivinado. Prueba introduciendo otro mes. \n "); }
        }
       System.out.println (" \n \n Finalizando el programa... Final");
    }
   
}


88
Ahí van mis respuestas aunque parece que esté escribiendo Groucho Marx con "la parte contratante de la parte contratante".  ;D ( A riesgo de equivocarme me lanzo )

a: ¿Se puede acceder a un objeto anónimo contenido en un ArrayList?

Respuesta Sí, tendrá una posicion en el ArrayList con la que acceder a lainformación aunque no tenga un nombre como Objeto cococido.

b: ¿Se puede inicializar un objeto de una clase que contiene tres atributos de tipo objeto declarando en el constructor que los atributos se inicializan mediante objetos anónimos?

Respuesta Sí, el objeto se puede inicializar igual, pues los 3 atributos contienen la información requerida(necesaria para iniciar el objeto) porque ha sido inicializada, aunque no sepamos el nombre del Objeto que constituyen esos contenidos.


89
Buenas tardes, dejo mi ejercicio, he intentado ceñirme a lo solicitado, controlando las posibles malas entradas.
Utilizo un semaforo que no deja salir de la aplicación sin añadir al menos un cantante (pero no logré ver donde podia hacer un println que así lo indicara :-)  )

Ahí va :)

Clase CantanteFamoso

Código: [Seleccionar]
public class CantanteFamoso{

    private String nombre;
    private String discoConMasVentas;

    public CantanteFamoso(){ //constructor inicializando atributos con ""
        nombre = "";
        discoConMasVentas = "";
    }

    //Setters
    public void setNombre(String valorNombre){ nombre = valorNombre; }

    public void setDisco(String valorDisco){ discoConMasVentas = valorDisco; }

    //Getters

    public String getNombre(){ return nombre; }

    public String getDisco() { return discoConMasVentas; }
}


Clase ListaCantantesFamosos

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

public class ListaCantantesFamosos{

    private ArrayList<CantanteFamoso> lista;

    public ListaCantantesFamosos(){
        lista = new ArrayList <CantanteFamoso>();
    }

    public void añadirCantante(String nombre, String disco){
        CantanteFamoso entrada = new CantanteFamoso();
        entrada.setNombre(nombre);
        entrada.setDisco(disco);
        lista.add(entrada);
    }

    public void imprimirArray(){
        CantanteFamoso cantante;
        Iterator <CantanteFamoso > it = lista.iterator();
        while(it.hasNext() ){
            cantante = it.next();
            System.out.println(" Cantante: " + cantante.getNombre() + "   Disco más vendido: " + cantante.getDisco() );
        }
    }
}

Clase EntradaDatos

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

public class EntradaDatos{

    public EntradaDatos(){ /*vacio*/ }

    public String recogerString(){
      String entrada;
       
        do{
          Scanner escaner = new Scanner(System.in);
           entrada = escaner.nextLine();
        } while(entrada.length()<1);
     
      return entrada;
    }
   
   
   
    public char recogerChar(){

        String entrada;
        char respuesta;

        do{
            System.out.print(" Solo puedes introducir los carácteres (S)i / (N)o ");
            Scanner escaner = new Scanner(System.in);
            entrada = escaner.nextLine();
            respuesta = entrada.charAt(0);
        } while (!entrada.equalsIgnoreCase("s") && !entrada.equalsIgnoreCase("n"));
       
        respuesta = Character.toLowerCase(respuesta);
        return respuesta;
    }

}


Clase GestorLista (Main)

Código: [Seleccionar]
public class GestorLista{
     
   
    public static void main(String [] args){
        String nombre; String disco;
        char opcion;
        boolean semaforo = false;
        // creo nuevo objeto ListaCantantesFamosos
        ListaCantantesFamosos nuevaLista = new ListaCantantesFamosos();
       
        //añado dos cantantes manualmente a la arrayList de la nueva ListaCantantesFamosos
        nuevaLista.añadirCantante("Michael Jackson","Thriller");
        nuevaLista.añadirCantante("Iron Maiden", "The number of the beast");

        nuevaLista.imprimirArray();
       
         do{
           
              EntradaDatos entrada = new EntradaDatos();
                System.out.println(" \n\n ¿Desea introducir los datos de otro cantante ");
                opcion = entrada.recogerChar();
             
               if (opcion == 's'){
                 System.out.println("\n Introduce el nombre de un nuevo cantante ");
                 nombre = entrada.recogerString();
                 System.out.println("\n Introduce el nombre del disco más vendido ");
                 disco = entrada.recogerString();
                 
                 nuevaLista.añadirCantante(nombre,disco);
                 semaforo = true;
                 nuevaLista.imprimirArray();
                 
                }
               
            }while(opcion == 's' || semaforo == false);
           
    }
   
}

90
Buenas aquí va la solución de mi ejercicio.

Tengo una pregunta que igual es una tonteria, dentro de los métodos, las variables que se creas solo para el metodo no debe indicarse que son private, public, etc... (lo intenté y me dió error) entiendo porque ya declaramos como public el propio metodo o private.?

Clase ListaCantantesFamosos

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

public class ListaCantantesFamosos{
   
    private ArrayList<String> listado = new ArrayList<String>(); //creado Arraylist listado
   
    public ListaCantantesFamosos(){ //constructor sin parametros
       
        // añado 3 Strings a listado
        listado.add("Sean Paul"); listado.add("Bonney M"); listado.add("Michael Jackson");
    }
   
    public void añadirCantante(String nombre){ listado.add(nombre); }  //método para añadir nombres
   
    public void imprimirCantantes(){
        for(String nombre: listado){ System.out.println(nombre); }
    } //método imprimir lista con bucle for extendido
       
    }

Clase RecogerDatos

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

public class RecogerDatos{

    public RecogerDatos(){ /*vacio*/ }

    public int recogerNumero(){  //recojo datos numéricos
        boolean semaforo = false;
        int numero=0;

        while(semaforo == false){

            Scanner escaner = new Scanner(System.in);
            try {
                numero = escaner.nextInt(); 

                switch(numero){  // solo se permite introducir el 1,2 o 3 para lo demas vuelve a pedir valor
                    case 1: 
                    case 2: 
                    case 3: { semaforo = true; break; }
                    default: { System.out.println("Solo números 1,2 o 3 son válidos"); }
                }
            } catch (InputMismatchException e){ System.out.println("Solo números 1,2 o 3 son válidos"); }
        }
        return numero;
    }  //final del método recogerNumeros       

    public String recogerNombre(){  //recojo datos String
        String nombre;
       
        do{
            System.out.print ("\n Introduzca el nombre del nuevo cantante \n");
            Scanner escaner = new Scanner(System.in);
            nombre = escaner.nextLine();
        }while(nombre.length() < 1); //no he sido capaz esta vez que con (nombre == "") pidiera de nuevo datos   
       
        return nombre;
    }

}

Clase GestorLista (Main)

Código: [Seleccionar]
public class GestorLista{

    public static void main(String[] args){

        boolean semaforo = false;
        ListaCantantesFamosos lista = new ListaCantantesFamosos(); //creamos nuevo Objeto ListaCantantesFamosos

        lista.imprimirCantantes();

        System.out.println(" \n Estos son los cantantes actuales de la Lista de Cantantes Famosos \n");

        while (semaforo == false){

            System.out.println("\n Elige que operacion deseas realizar indicando el número: \n\n 1.- Añadir nuevo cantante \n 2.- Mostrar lista cantantes \n 3.- Salir \n");

            RecogerDatos entrada = new RecogerDatos();

            switch(entrada.recogerNumero() ){
                case 1: { lista.añadirCantante(entrada.recogerNombre()); break; }
                case 2: { lista.imprimirCantantes(); break; }
                case 3: { semaforo = true; break;}
            } // final switch
        } //final while
    } // final main
}

91
Buenas noches, aquí va mi respuesta al ejercicio.

Comentar que hice 3 clases, una EntradaDatos otra ListaCantantesFamosos y el main GestorLista.

En el main pido numero de introducciones de cantantes, para no limitarlo a dos, controlo la excepción numerica en un metodo de EntradaDatos.
Hace todo lo que pide el ejercicio por lo demás.

Por cierto Toni, recordé tu comentario sobre que podiamos utilizar el mismo objeto Scanner tantas veces como hiciera falta, pues al recoger datos del mismo, queda de nuevo "vacio". Gracias muy útil lo que comentas como siempre.

Clase ListaCantantesFamosos

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

public class ListaCantantesFamosos{
    //Atributos clase, un nombre de la lista (podria ser POP, ROCK o General) y un array con los cantantes
    private String nombreTabla = "";
    private ArrayList<String> tablaFamosos;

    //Constructor
    public ListaCantantesFamosos(String valorNombreTabla){
        nombreTabla = valorNombreTabla;
        tablaFamosos = new ArrayList<String>();
        añadirNombre("Julio Iglesias"); añadirNombre("David Bisbal"); añadirNombre("Chenoa");
    }

    //Añadir nombre   
    public void añadirNombre(String nombre){
        tablaFamosos.add(nombre);}

    //Extraer nombres
    public String recuperarNombre(int indice){ return tablaFamosos.get(indice); }

    //Imprimir la lista tablaFamosos
    public void imprimirLista(){
        for(int x = 0;x < tablaFamosos.size(); x++){
            System.out.println("Famoso "+ nombreTabla+ " " + (x+1) + ": " + recuperarNombre(x));
        }
    }
} //cierre clase


Clase EntradaDatos

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

public class EntradaDatos {

    public EntradaDatos(){ /*vacío*/ }

    public String recogerString(){
        String nombre1;

        Scanner escaner = new Scanner(System.in);
        nombre1 = escaner.nextLine();
        return nombre1;
    } //final metodo recogerString

    public int recogerEntero(){
        int numero = 0; boolean semaforo = false;

        while(semaforo == false){ 
            semaforo = true; //pongo semaforo a true para que salga del while a no ser que entre en Excepcion
            try {
                Scanner escaner = new Scanner(System.in);
                numero = escaner.nextInt();

            } //final try
            catch (InputMismatchException ex)
            {
                System.out.println(" Has introducido un dato erroneo, introduce un número porfavor ");
                semaforo = false;
            } //final catch
        } //final while

        return numero;
    } //final método recogerEntero

} //final clase
   

Clase GestorLista

Código: [Seleccionar]
public class GestorLista{

    public static void main(String[] args){
        int cantidadAñadir;
        EntradaDatos entrada1 = new EntradaDatos(); //inicializo entrada de datos

        System.out.println("De que tipo de música quieres crear la nueva lista?");

        //Inicializamos la nueva lista de cantantes con el nombre de la clase de música indicado
        ListaCantantesFamosos lista1 = new ListaCantantesFamosos(entrada1.recogerString());

        System.out.println("Indica el número de cantantes nuevos que quieres añadir");
        cantidadAñadir = entrada1.recogerEntero();

        for(int x=0; x < cantidadAñadir; x++){
            System.out.println("Introduce el nombre de un cantante");

            lista1.añadirNombre(entrada1.recogerString() );
        } //final for

        lista1.imprimirLista();
    } //final main
} //final clase


92
Buenas tardes, ahí van las soluciones.

Consulta la clase Stack en el API de Java.

¿Cómo se llama el método para consultar el objeto en la cima de la pila?

peek()

¿Cómo se llama el método para consultar si la pila está vacía?

empty()

¿El método pop podríamos clasificarlo como tipo procedimiento, como tipo función, o como tipo mixto (procedimiento y función)?

Yo pienso que es mixto, teniendo en cuenta que elimina del stack el objeto que esta más arriba pero como return devuelve ese mismo objeto.

93
Buenas noches, estas son mis respuestas, a riesgo de equivocarme totalmente.

 Considera una clase Java que se denomina TripulacionAvion y que tiene como atributos a tres objetos de tipo Persona: Persona piloto; Persona copiloto1; Persona copiloto2.

a) ¿Sería posible que al crear un objeto TripulacionAvion se produjera que piloto, copiloto1 y copiloto2 apuntaran a un mismo objeto, es decir, que existiera una relación de identidad entre los tres atributos?

Respuesta Si. Sería algo asi como:
Código: [Seleccionar]
public TripulacionAvion(){
piloto = new Persona();
copiloto1 = piloto;
copiloto2 = piloto;
}

b) ¿Existiría relación de identidad cuando creemos un objeto TripulacionAvion entre los tres atributos si no se inicializaran en el constructor?

Respuesta No, si no los inicializamos estaria el espacio reservado para 3 atributos persona (creo) sin apuntador ni contenido.

c) ¿Cuál sería el contenido de los atributos si no se inicializan en el constructor y creamos un objeto de tipo TripulacionAvion?

Respuesta El contenido seria desconocido o null si solo se declaran pero no inicializan.


94
Buenas, entrego dos soluciones de este ejercicio.

La razón es porque en la primera queria comparar un substring con null o "vacio" y buscando no existe forma, lanza excepción cuando los parametros no están entre el tamaño del substring. Y planteé otra solución a esa.

Primera Solucion con Excepcion.

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

public class Comparador{

    public static void main (String[] args){

        String palabra1; String palabra2; String comprobar;
        int menorPalabra = 1;  //por defecto la palabra menor es la 1era si el if no lo cambia se quedará así
        int longitud = 0;

        System.out.println("Introduce la primera palabra");
        Scanner entrada1 = new Scanner(System.in);
        palabra1 = entrada1.next();   //utilizo el next() para descartar los espacios solo coje primera palabra

        System.out.println("Introduce la segunda palabra");
        Scanner entrada2 = new Scanner(System.in);
        palabra2 = entrada2.next();
         
        // Compruebo si la palabra 2 es mas larga que la primera o no, para ponerlo en el bucle for como limite.
         
         if(palabra2.length()> palabra1.length() ){
            longitud = palabra2.length();
           
        }else { longitud = palabra1.length();
                 menorPalabra = 2;}

        //inicializa a 0 y recorre todos los valores hasta llegar a la longitud menos uno
        for (int x = 0; x < longitud; x++){

            try{
                //if( palabra1.substring(x,x+1)!= null && palabra2.substring(x,x+1) != null ){
                    if(palabra1.substring(x,x+1).equals(palabra2.substring(x,x+1) ) ){
                        System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? True");
                    }else{ System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? False");}
               // }
            } catch (IndexOutOfBoundsException e) {
                System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? La palabra " +
                    menorPalabra + " no  tiene letra " + (x+1));}
        }
    } 
}

Segunda solución con dos Clases, main y una que analiza (para practicar llamar metodos de otra clase)

Clase main

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

public class Comparador1{
   
    public static void main (String[] args){
        String palabra1; String palabra2;
       
        System.out.println("Introduce la primera palabra");
        Scanner entrada1 = new Scanner(System.in);
        palabra1 = entrada1.next(); //con esta opcion me aseguro que solo recojo una palabra hasta un espacio
       
        System.out.println("Introduce la segunda palabra");
        Scanner entrada2 = new Scanner(System.in);
        palabra2 = entrada2.next();
       
        Analiza compara = new Analiza();
        compara.checkPalabra(palabra1,palabra2);
    }
}

Clase Analiza

Código: [Seleccionar]
public class Analiza{

    public Analiza(){ //vacio
    }

    public void checkPalabra(String palabra1, String palabra2){
       
        // cualMenor es un semáforo que es o 1 o 2 depende cual palabra sea la menor, por defecto se inicializa con 1.
        int cualMenor = 1; int mayor; int menor;

        if(palabra1.length() > palabra2.length() ){
            cualMenor = 2;
            mayor = palabra1.length();
            menor = palabra2.length();
        }else {
            mayor = palabra2.length();
            menor = palabra1.length();
        }

        for(int x = 0; x < mayor;){
            while(x < menor){
                if(palabra1.substring(x,x+1).equals(palabra2.substring(x,x+1)) ){
                    System.out.println("Letra " + (x+1) + " igual en las dos palabras: True");
                }else{
                    System.out.println("Letra " + (x+1) + " igual en las dos palabras: False");
                }
                x++;
            }

            System.out.println("La palabra " + cualMenor + " no tiene letra " + (x+1));
            x++;

        }
    }
}

95
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



96
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


97
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

98
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
       
       




99
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
   


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

Páginas: 1 2 3 4 [5] 6

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