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

Páginas: [1] 2
1
Hola César y Wolf. Disculpad mi intromisión en este post. Desde que lo vi no he parado de darle vueltas a un código alternativo (que siempre los habrá, por supuesto), ya que siempre vi dos series altenándose. La primera, números impares que empiezan en 1; y la segunda, números impares que empiezan en 5. Después se unen las dos en una sola serie altenando un valor de cada una de ellas. Bueno, ahí os dejo el código como prueba. Muy interesante el problema. Saludos.

Código: [Seleccionar]
import java.util.Scanner;
public class TestSerie{
    public static void main(String[]args){
        int numero;
        int i=0;
        System.out.print("Indique cuántos números de la serie quiere ver: ");
        Scanner entrada=new Scanner(System.in);
        numero=entrada.nextInt();
        int elementos[]=new int[numero];
        do{
           elementos[i]=i+1; //añado números de la serie 1
           i++;
           if(i<numero){
               elementos[i]=i+4; //añado números de la serie 2
               i++;}}
        while(i<numero);
        System.out.println("La serie resultante es:");   
        for (int j=0;j<elementos.length;j++){
               System.out.print(elementos[j]+ "  ");}}}

3
Se me olvidaba responder a las preguntas teóricas.
El 'array' puede almacenar tanto datos tipo primitivos como objeto.

Por contra, el ArrayList, solo almacena datos tipo objeto: creados por el usuario, de la biblioteca de Java o tipos envoltorio como Long, float, Integer, etc.

Saludos

4
Buenas noches a tod@s. Aquí os dejo mi solución al ejercicio del tema CU00675B, de Java desde cero.

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?

Código: [Seleccionar]
import java.util.ArrayList;
public class TestCopiaArraysConArrayList{
     public static void main(String[]Args){
        ArrayList<Integer>lista=new ArrayList<Integer>();
        lista.add(8);lista.add(12);lista.add(45);lista.add(-36);lista.add(101);
        int cont;
        int[]miArray={2,-4,3,-7};
        for(cont=0;cont<miArray.length;cont++){
            System.out.print("Array["+cont+"]= "+ miArray[cont]+"; ");}
        System.out.println("");
        cont=0;
        for(int elementolista:lista){
            System.out.print("ArrayList["+cont+"]= "+elementolista+"; ");
            cont++;}
        for(cont=0;cont<miArray.length;cont++){
            lista.add(miArray[cont]);} //Añado elementos de miArray a ArrayList
        System.out.println("");
        System.out.println("");
        cont=0;
        for(int elementolista:lista){
            System.out.println("ArrayList["+cont+"]= "+elementolista);
            cont++;}}}

Saludos

6
Hola nani. El código que propones ejecuta correctamente lo estipulado en el enunciado del ejercicio. No obstante, y aunque no lo dice, convendría que pensaras en el control de los errores que pueden suceder al introducir datos que no cumplan con los parámetros que definas en el código. ¿Que pasaría si la primera cadena no tuviera más de un caracter? ¿O que la segunda no tuviera más de tres? ¿Y si la tercera no tuviera más de cinco? Prueba a introducir en uno de esos casos menos caracteres de los solicitados. Intenta después añadir las líneas de código necesarias para que el programa funcione adecuadamente y no te de error en tiempo de ejecución.
Saludos

7
Hola. Está bien nani. Yo le añadí al código la detección de números negativos para el cálculo de la raíz cuadrada. Hazlo, verás que no cuesta mucho. En realidad ya está hecho :)

8
Hola de nuevo. Gracias por vuestros comentarios. Me abrumáis y, encima, por partida doble. Un lujazo!!!  :D
Lo de mejorada, no sé. Adapté lo que estaba en la lección dada por el curso. Gracias.
Sí, intento hacerlo con clases distintas, para llamarlas después desde la clase 'main'. Creo que es la filosofía de Java. Además, se pueden reutilizar para otros programas. Por ejemplo, la clase entradaDeTeclado la utilizo siempre como entrada.

Gracias de nuevo. Sois fantásticos por vuestra atención, comentarios y por la calidad del curso. De verdad. Hasta el siguiente post.

10
Hola a tod@s. Aquí os dejo mi resolución del ejercicio propuesto. Acepto mejoras, críticas, etc. Estamos para aprender ;D.


Clase AdivinarUnNumero, con el 'main':

Código: [Seleccionar]
public class AdivinarUnNumero{
    public static void main(String[]Args){
        Integer miInteger=0;
        boolean continuar=false;
        EntradaDeTeclado entrada; //Creo un objeto 'EntradaDeTeclado'
        NumeroAleatorio numero=new NumeroAleatorio(); //Creo un objeto 'Numeroaleatorio'
        numero.generarNumeroAleatorio(); //Genero un numero aleatorio
        System.out.println("\nEmpieza el programa. Para salir en cualquier momento, pulse 'Return'");
        System.out.print("Se ha generado un número entero aleatorio entre 1 y 100, ambos incluidos. Intente adivinarlo: ");
        entrada=new EntradaDeTeclado(); //Pido datos por teclado
        continuar=entrada.getContinuar(); //Compruebo si se ha pulsado 'Return'
        while(continuar){ //Si no se ha pulsado 'Return', entro
            miInteger=miInteger.valueOf(entrada.getEntrada()); //El valor del 'String' de entrada, se convierte en objeto tipo Integer
            if((int)miInteger==numero.getNumeroAleatorio()){
                System.out.println("\n¡Enhorabuena!. Ha acertado.");
                continuar=false;} //Se ha acertado, por lo que el programa finaliza
            else if((int)miInteger<numero.getNumeroAleatorio()){   
                System.out.print("No ha acertado. El número introducido es menor que el buscado. Intente adivinarlo introduciendo otro: ");}
            else if((int)miInteger>numero.getNumeroAleatorio()){   
                System.out.print("No ha acertado. El número introducido es mayor que el buscado. Intente adivinarlo introduciendo otro: ");}   
            if(continuar){ //Evita que se entre si se ha acertado
                entrada=new EntradaDeTeclado(); //Pido datos por teclado
                continuar=entrada.getContinuar();}} //Compruebo si se ha pulsado 'Return'               
        System.out.println("\nFin del programa");}}


Clase Numeroaleatorio;

Código: [Seleccionar]
import java.util.Random;
public class NumeroAleatorio{//Esta clase genera un entero aleatoriamente entre 1 y 100
    int numeroAleatorio=0;
    public NumeroAleatorio(){numeroAleatorio=0;} //Constructor
    public void generarNumeroAleatorio(){
        Random num=new Random();
        while(numeroAleatorio==0){ //Evito que me genere el cero
            numeroAleatorio=num.nextInt(101);}}
    public int getNumeroAleatorio(){return numeroAleatorio;} }


Clase EntradaDeTeclado:

Código: [Seleccionar]
import java.util.Scanner;
public class EntradaDeTeclado{
    private String entradaTeclado;
    boolean continuar=true;
    public EntradaDeTeclado(){ //Constructor
        entradaTeclado="";
        pedirEntrada();} //Al crear un objeto, se ejecuta este método
    public void pedirEntrada(){
        Scanner entradaEscaner=new Scanner(System.in);
        entradaTeclado=entradaEscaner.nextLine();
        if (entradaTeclado.length()==0) {continuar=false;}} //Si pulso 'Return', finalizará el programa
    public boolean getContinuar(){return continuar;}
    public String getEntrada(){return entradaTeclado;}}


Saludos a todos los foreros. :)


11
Hola nani. Creando los dos constructores con parámetros que te faltaban, el ejercicio es correcto. Cuando quieras insertar varias clases, hazlo mejor por separado en el post, de igual manera que lo haces en el BlueJ. Y no te importe volver a publicar el código corregido tantas veces como sea necesario hasta que te salga bien. en este foro la gente ayuda de verdad las veces que haga falta. Son fantásticos. :)
Saludos

13
Hola nani. Lo que pasa es que has puesto juntas tres clases públicas diferentes. Por eso el error que te da es: "class CocinaCasa is public, should be declared in a file named CocinaCasa.java".
Cada una de esas tres clases tienes que compilarlas por separado.

Saludos

14
Hola. Aquí estoy "dando la vara otra vez". No he podido dejar de pensar en como hacer el código anterior sin utilizar 'if' anidados. Creo que encontré la solución. Os la expongo a continuación.

Código: [Seleccionar]
public class MesesDelAño {
    public static void main (String[]args) {
        String[]MesesDelAño={"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
        String mesSecreto=MesesDelAño[4];
        EntradaDeTeclado entrada;
        boolean continuar=false;
        System.out.println("Empezamos el programa. Si pulsa solo 'Return' el programa finalizará ");
        System.out.println("\nAdivine el mes secreto. Introduzca el nombre del mes en minúsculas: ");
        do{ 
            entrada=new EntradaDeTeclado();
            continuar=entrada.getContinuar();
            if(!continuar) {System.out.println("\nHa pulsado 'Return'");} //Si se pulsa 'Return', el programa finaliza
            else if(entrada.getEntrada().equals(mesSecreto)) { //Si se acierta ...
                System.out.println("\n¡Enhorabuena!. Ha acertado.");
                continuar=false;} //Se ha acertado, por lo que el programa finaliza
                else {System.out.println("No ha acertado. Intente adivinarlo introduciendo otro mes: ");}  }//Si no se acierta ...
        while(continuar); //Se comprueba si se ha acertado el mes o si se ha pulsado 'Return'
        System.out.println("\nFin del programa"); } }


Saludos

15
Hola otra vez. Entiendo lo de los 'if anidados'. Puede ser complejo de entender.
El problema es que intento que si pulsa 'Return' (orden de finalización del programa) al introducir el mes, directamente se acabe el programa, y no pase por el 'else' y le diga que no ha acertado. Demasiado afinar, creo.
Saludos.

16
Buenos días. Gracias por vuestros comentarios. Tomo nota del tema 'break'.
Transcribo el código de la clase MesesDelAño, tal y como me quedaría a mí. He utilizado el mismo booleano para evitar la introducción de 'Return' y para saber si he acertado. Funciona correctamente pero, ¿estaría bien hecho así o no es recomendable hacerlo de esta manera?

Código: [Seleccionar]
public class MesesDelAño {
    public static void main (String[]args) {
        String[]MesesDelAño={"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
        String mesSecreto=MesesDelAño[4];
        EntradaDeTeclado entrada;
        boolean continuar=false;
        System.out.println("Empezamos el programa. Para salir, pulse 'return'");
        System.out.println("\nAdivine el mes secreto. Introduzca el nombre del mes en minúsculas: ");
        do{ 
            entrada=new EntradaDeTeclado();
            continuar=entrada.getContinuar();
            if(continuar) {//Si no se teclea 'Return'
                if(entrada.getEntrada().equals(mesSecreto)) {//Si se acierta el mes secreto
                    System.out.println("\n¡Enhorabuena!. Ha acertado.");
                    continuar=false;}//Se ha acertado, por lo que se sale del programa
                    else {System.out.println("No ha acertado. Intente adivinarlo introduciendo otro mes: ");} }//Si no se acierta
            else {continuar=false;} }//Si se teclea 'Return'
        while(continuar);//Compruebo que se ha acertado o si se teclea 'Return'
        System.out.println("\nFin del programa"); } }
 

Saludos.

17
Hola a tod@s. Os transcribo el código de dicho ejercicio. Acepto todo tipo de mejoras, críticas, etc.  :).


Clase MesesDelaño:

Código: [Seleccionar]
public class MesesDelAño {
    public static void main (String[]args) {
        String[]MesesDelAño={"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
        String mesSecreto=MesesDelAño[4];
        EntradaDeTeclado entrada;
        System.out.println("Empezamos el programa. Para salir, pulse 'return'");
        System.out.println("\nAdivine el mes secreto. Introduzca el nombre del mes en minúsculas: ");
        do{ 
            entrada=new EntradaDeTeclado();
            if(entrada.getContinuar()) {//Si no se teclea 'Return'
                if(entrada.getEntrada().equals(mesSecreto)) {//Si se acierta el mes secreto
                System.out.println("\n¡Enhorabuena!. Ha acertado.");
                break;}
                    else {System.out.println("No ha acertado. Intente adivinarlo introduciendo otro mes: ");} }//Si no se acierta
            else {break;} }//Si se teclea 'Return'
        while(entrada.getContinuar());//Compruebo que no se teclea 'Return'
        System.out.println("\nFin del programa"); } }


Clase EntradaDeTeclado:

Código: [Seleccionar]
import java.util.Scanner;
public class EntradaDeTeclado {
    private String entradaTeclado;
    boolean continuar=true;
    public EntradaDeTeclado() { //Constructor
        entradaTeclado="";
        pedirEntrada(); } //Al crear un objeto, se ejecuta este método
    public void pedirEntrada() {
        Scanner entradaEscaner=new Scanner(System.in);
        entradaTeclado=entradaEscaner.nextLine();
        if (entradaTeclado.length()==0) {continuar=false;} }
        //Si pulso 'Return', no se introducirán más datos
    public boolean getContinuar() {return continuar;}
    public String getEntrada() {return entradaTeclado;} }


Gracias por vuestra atención. Saludos

19
Buenos días Ogramar. Da gusto con vosotros. Gracias como siempre por los comentarios.

Citar
Si dispones de constructores puedes inicializar los objetos más rápidamente. Imagínate que en vez de 1 ó 2 atributos tuvieras 4 ó 5. Lo que podrías resolver con un constructor, tendrías que hacerlo usando 4 ó 5 líneas de set (menos práctico).


Lógico, claro y conciso. Muchas gracias. Te inserto el código tal y como lo he modificado a este último comentario.


Clase 'TestListaCantantesFamosos':

Código: [Seleccionar]
public class TestListaCantantesFamosos {
    public static void main (String [ ] args) {
        String nombreDeLaLista="\"Cantantes famosos y sus discos más vendidos\"";
        EntradaDeTeclado entrada;
        CantanteFamoso cantante;
        System.out.println("Empezamos el programa. Para salir, pulse 'return'");
        ListaCantantesFamosos lista=new ListaCantantesFamosos(nombreDeLaLista);
        cantante=new CantanteFamoso("Madonna","All I Want Is You");
        lista.addNombre(cantante);
        cantante=new CantanteFamoso("Jorge Negrete","Jalisco");
        lista.addNombre(cantante);
        System.out.println("La lista se llama: "+nombreDeLaLista);
        System.out.println("La lista inicial contiene los siguientes datos: ");
        lista.listarTodosLosNombres();
        do{  //Bucle do-while para ingresar datos en la lista
            System.out.println("\nPor favor, introduzca los datos de otro cantante. Para salir, pulse 'Return'");
            entrada=new EntradaDeTeclado();
            //Si pulsamos 'RETURN' en cualquiera de las dos entradas,
            //el objeto 'CantantesFamosos' actual no se añadirá a la lista
            if(entrada.getContinuar()) {//1ª Entrada: Introducción del cantante
                cantante=new CantanteFamoso();
                cantante.setNombre(entrada.getEntrada());
                entrada=new EntradaDeTeclado();
                if(entrada.getContinuar()) {//2ª Entrada: Introducción del disco
                    cantante.setDiscoConMasVentas(entrada.getEntrada());
                    lista.addNombre(cantante);
                    System.out.println("\nLa lista actualizada contiene los siguientes datos: ");
                    lista.listarTodosLosNombres(); } } }
        while(entrada.getContinuar()); ////Si pulso 'Return', se acabará la introducción de datos
        System.out.println("\nLa lista actualizada contiene los siguientes datos: ");
        lista.listarTodosLosNombres();
        System.out.println("\nFin del programa"); } }


clase 'CantanteFamoso':

Código: [Seleccionar]
public class CantanteFamoso{
    private String nombre;
    private String discoConMasVentas;
    public CantanteFamoso() {//Constructor 1
        nombre="";
        discoConMasVentas="";}
    public CantanteFamoso(String valorNombre,String valorDiscoConMasVentas) {//Constructor 2
        nombre=valorNombre;
        discoConMasVentas=valorDiscoConMasVentas;}
    public void setNombre(String valorNombre) {nombre=valorNombre;}
    public void setDiscoConMasVentas(String valorDiscoConMasVentas) {discoConMasVentas=valorDiscoConMasVentas;}
    public String getNombre() {return nombre;}
    public String getDiscoConMasVentas() {return discoConMasVentas;} }

La verdad es que es más práctico y elegante así. ¿Le falta o sobra algo?.

20
Hola Dan_SB. Lo primero, gracias por tus observaciones y pronta respuesta. Da gusto seguir este curso y la interacción que del mismo se hace en el foro. Sois maravillosos.
Sobre los puntos 1 y 2, totalmente de acuerdo. En un principio, inicialicé los atributos de CantanteFamoso en el constructor, como se dijo en las lecciones del curso. Después los quité. No pasará más ;D.

Respecto al punto 3, "manipular los atributos directos de clase... esto no es optimo", ¿no es óptimo manipularlos si antes no los inicializo desde el constructor de la clase 'CantanteFamoso'; o no debiera darles estos valores manualmente desde el 'main' directamente, y sí hacerlo desde el constructor de la clase 'CantanteFamoso'?.

Citar
"Me encanto tu forma de salir del programa por cierto :)
Gracias ;)

Y gracias por tu atención y comentarios:"Corregir pequeños errores, evita grandes fracasos" . Saludos.

Páginas: [1] 2

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