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 - Dimitar Stefanov

Páginas: 1 ... 15 16 17 18 19 [20] 21 22 23 24 25 ... 30
381
Gracias, Kabuto, por toda la información tan valiosa que me "regalas" mediante tus aclaraciones. Ahora mismo, en este etapa de mi crecimiento como programador soy como una esponja y este tipo de información, por muy sencilla que te parezca a ti, para mi es muy valiosa. Gracias.

Desconocía totalmente lo de las dobre comillas y las simples. Estoy acostumbrado de utilizar las doble comillas (por el curso de CSS que hicimos, en esta página:)).

Para programar en JavaScript utilizo Sublime text, pero para programación en Java sigo las recomendaciones del curso y me he instalado "BlueJ". No sé si es mejor o peor, de momento me va bien.
Es verdad, no es tan sofisticado como Sublime, pero me muestra (gráficamente) donde empiezan y acaban las cosas (condicionales, bucles, etc.).

Te quería preguntar otra cuestión, si no es mucha molestía. Como puedo hacer que un proyecto hecho en Java se ejecute no sólo en la máquina virtual de Java. Quiero decir, hay alguna manera de convertir los archivos (proyectos de Java) en archivos autoejecutables (tipo extensión exe, etc.). en el sentido que cuando le pase a otra tercera persona mi programa lo pueda ejecutar en su PC sin que tenga Java instalado.

Y también, si se puede instalar (subir) una aplicaciones hecha en Java en alguna página. Verlo a través del navegador. Creo que se tiene que programar con clases "applet", pero ni sé para que se utilizan.

Sigo con el curso. Ahora mismo estoy en la entrega CU00672B, pero he mirado por encima las demás entregas que me faltan y no veo por ningún lado que se enseñe como se pueden subir proyectos en una página web. Lo mismo estoy en lo incierto.

Gracias.

PD: Tomo nota sobre que "Scanner" es un objeto y no una clase, jeje:)

382
Buenas tardes, César.

Creo que he dado con la solución.

Así queda el código:

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

public class Test01{
    public static void main(String []Args){
        System.out.println("Los cantantes famosos en la lista son:");
        ListaCantantesFamosos listacantantes = new ListaCantantesFamosos();
        listacantantes.cantantesEnLaLista();
        System.out.print("Introduzca otro cantante:");
        String entradaTeclado = "";
        Scanner entradaScaner = new Scanner(System.in);
        entradaTeclado = entradaScaner.nextLine();
        if(entradaTeclado.equals("")==false){
        listacantantes.addNombre(entradaTeclado);
        listacantantes.cantantesEnLaLista();}
        String entradaDesicion = "";
        System.out.print("Deseas entrar más cantante: Sí/No: ");
        entradaDesicion = entradaScaner.nextLine();
       
        //Contemplar todas las respuestas distintos a: "No","no","Sí","Si","sí" y "si". Todo lo que no sea opción que tengo como respuesta lo convierto en "noCorrecto"
        if(entradaDesicion.equals("No")==false && entradaDesicion.equals("no")==false && entradaDesicion.equals("Sí")==false && entradaDesicion.equals("Si")==false && entradaDesicion.equals("sí")==false && entradaDesicion.equals("si")==false){
                entradaDesicion = "noCorrecto";
                while(entradaDesicion.equals("noCorrecto")){
                System.out.print("Deseas entrar más cantante: Sí/No: ");
                entradaDesicion = entradaScaner.nextLine();
               
                 if(entradaDesicion.equals("Sí") || entradaDesicion.equals("Si") || entradaDesicion.equals("sí") || entradaDesicion.equals("si")){
                    entradaDesicion = "Sí";
                 }else if(entradaDesicion.equals("No")|| entradaDesicion.equals("no")){
                    entradaDesicion = "No";
                 }else if(entradaDesicion.equals("Sí")==false && entradaDesicion.equals("sí")==false && entradaDesicion.equals("Si")==false && entradaDesicion.equals("si")==false && entradaDesicion.equals("No")==false && entradaDesicion.equals("no")==false){
                    entradaDesicion = "noCorrecto";
                 }
             }
           }
       
       
       
       
       
       //En el caso de que la respuesta sea: "Sí", "Si", "sí" o "si"
        if(entradaDesicion.equals("Sí") || entradaDesicion.equals("Si") || entradaDesicion.equals("sí")|| entradaDesicion.equals("si")){
            entradaDesicion="Sí";
            while(entradaDesicion.equals("Sí")){
            System.out.print("Introduzca otro cantante:");
            entradaTeclado = entradaScaner.nextLine();
            if(entradaTeclado.equals("")==false){
            listacantantes.addNombre(entradaTeclado);
            listacantantes.cantantesEnLaLista();}
            System.out.print("Deseas entrar más cantante: Sí/No: ");
            entradaDesicion = entradaScaner.nextLine();
           
            //Valorar las respuestas otra vez
                 if(entradaDesicion.equals("Sí") || entradaDesicion.equals("Si") || entradaDesicion.equals("sí") || entradaDesicion.equals("si")){
                    entradaDesicion = "Sí";
                 }else if(entradaDesicion.equals("No")|| entradaDesicion.equals("no")){
                    entradaDesicion = "No";
                 }else if(entradaDesicion.equals("Sí")==false && entradaDesicion.equals("sí")==false && entradaDesicion.equals("Si")==false && entradaDesicion.equals("si")==false && entradaDesicion.equals("No")==false && entradaDesicion.equals("no")==false){
                    entradaDesicion = "noCorrecto";
                     while(entradaDesicion.equals("noCorrecto")){
                       System.out.print("Deseas entrar más cantante: Sí/No: ");
                       entradaDesicion = entradaScaner.nextLine();
               
                        if(entradaDesicion.equals("Sí") || entradaDesicion.equals("Si") || entradaDesicion.equals("sí") || entradaDesicion.equals("si")){
                        entradaDesicion = "Sí";
                        }else if(entradaDesicion.equals("Sí")==false && entradaDesicion.equals("sí")==false && entradaDesicion.equals("Si")==false && entradaDesicion.equals("si")==false && entradaDesicion.equals("No")==false && entradaDesicion.equals("no")==false){
                        entradaDesicion = "noCorrecto";
                        }
             }
           }
        }
       
    }
       
           
           
           
           
           
           //En el caso de que la respuesta sea un: "No" o "no"
            if(entradaDesicion.equals("No")==true || entradaDesicion.equals("no")){
            System.out.println("Gracias por utilizar nuestro programa.");
        }
           
           
    }
   
}



Entendí donde me equivocaba. Cuando ponía el código:

Código: [Seleccionar]
if(entradaDesicion.equals("No")==false || entradaDesicion.equals("no")==false || entradaDesicion.equals("Sí")==false || entradaDesicion.equals("Si")==false || entradaDesicion.equals("sí")==false || entradaDesicion.equals("si")==false){
 //Instrucciones...
}
if(entradaDesicion.equals("Sí") || entradaDesicion.equals("Si") || entradaDesicion.equals("sí") || entradaDesicion.equals("si")){
//Instrucciones...
}
if(entradaDesicion.equals("No")==true || entradaDesicion.equals("no")){
//Instrucciones...
}

me sorprendía de que entraba lo que entraba, siempre me entraba en la primera condición. Mirándolo mucho entendí que aunque entraría "sí" sí que cumplía con la condicional : "entradaDesicion.equals("si")==false", pero todas las además declaraciones en la misma condicional las cumplía. Y todo era porque utilizaba el operador "||" y no "&&". Una vez dado cuenta de ello, cambié el código a:

Código: [Seleccionar]
if(entradaDesicion.equals("No")==false && entradaDesicion.equals("no")==false && entradaDesicion.equals("Sí")==false && entradaDesicion.equals("Si")==false && entradaDesicion.equals("sí")==false && entradaDesicion.equals("si")==false){
 //Instrucciones...
}
if(entradaDesicion.equals("Sí") || entradaDesicion.equals("Si") || entradaDesicion.equals("sí") || entradaDesicion.equals("si")){
//Instrucciones...
}
if(entradaDesicion.equals("No")==true || entradaDesicion.equals("no")){
//Instrucciones...
}

y ahora sí que salta en las otras condiciones.

Gracias. (ahora creo que lo he hecho bien) :)

383
Buenas, César.

He conseguido hacer algo, pero no esta del todo bien el código.

Me ha quedado así:

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

public class Test{
    public static void main(String []args){
        System.out.println("Los cantantes famosos en la lista son:");
        ListaCantantesFamosos listacantantes = new ListaCantantesFamosos();
        listacantantes.cantantesEnLaLista();
        System.out.print("Introduzca otro cantante:");
        String entradaTeclado = "";
        Scanner entradaScaner = new Scanner(System.in);
        entradaTeclado = entradaScaner.nextLine();
        if(entradaTeclado.equals("")==false){
        listacantantes.addNombre(entradaTeclado);
        listacantantes.cantantesEnLaLista();}
        String entradaDesicion = "";
        System.out.print("Deseas entrar más cantante: Sí/No: ");
        entradaDesicion = entradaScaner.nextLine();
        if(entradaDesicion.equals("No")==false || entradaDesicion.equals("no")==false || entradaDesicion.equals("Sí")==false || entradaDesicion.equals("sí")==false || entradaDesicion.equals("Si")==false || entradaDesicion.equals("si")==false){
        while(entradaDesicion.equals("Sí")==false){ //|| entradaDesicion.equals("No") == false || entradaDesicion.equals("no") == false){
                System.out.print("Deseas entrar más cantante: Sí/No: ");
                entradaDesicion = entradaScaner.nextLine();
        }
    }
        if(entradaDesicion.equals("No") || entradaDesicion.equals("no") ){
            System.out.println("Gracias por utilizar nuestro programa.");
            }
        while(entradaDesicion.equals("Sí") || entradaDesicion.equals("sí") || entradaDesicion.equals("Si") || entradaDesicion.equals("si") ){
            if(entradaDesicion.equals("Sí") || entradaDesicion.equals("Si") || entradaDesicion.equals("sí")|| entradaDesicion.equals("si"))
            System.out.print("Introduzca otro cantante:");
            entradaTeclado = entradaScaner.nextLine();
            if(entradaTeclado.equals("")==false){
            listacantantes.addNombre(entradaTeclado);
            listacantantes.cantantesEnLaLista();}
            System.out.print("Deseas entrar más cantante: Sí/No: ");
            entradaDesicion = entradaScaner.nextLine();
            while(entradaDesicion.equals("")){
                System.out.print("Deseas entrar más cantante: Sí/No:");
                entradaDesicion = entradaScaner.nextLine();
            }
            if(entradaDesicion.equals("No") || entradaDesicion.equals("no") ){
            System.out.println("Gracias por utilizar nuestro programa.");
            }
        }
        }
}

Ya verás, que cumpliéndose la primera condiciones, si

Código: [Seleccionar]
        if(entradaDesicion.equals("No")==false || entradaDesicion.equals("no")==false || entradaDesicion.equals("Sí")==false || entradaDesicion.equals("sí")==false || entradaDesicion.equals("Si")==false || entradaDesicion.equals("si")==false)
Entramos en un bucle infinito. Sólo se puede salir de él respondiendo a la pregutna  con un  "Sí".

No entiendo por qué no me deja poner más de una condición en el bucle while. Es decir, que quede así:

Código: [Seleccionar]
while(entradaDesicion.equals("No")==false || entradaDesicion.equals("no")==false || entradaDesicion.equals("Sí")==false || entradaDesicion.equals("sí")==false || entradaDesicion.equals("Si")==false || entradaDesicion.equals("si")==false){
//Instrucciones para cumplir
}

Gracias

384
Hola, César.

No entendí muy bien de lo "un constructor sin atributos". ¿Te refieres a un constructor vacío? Algo así:

Código: [Seleccionar]
public CantanteFamoso(){
    }

Es decir, el código de "CantanteFamoso" debería de quedar de la siguiente forma:

Código: [Seleccionar]
public class CantanteFamoso{
    public String nombre;
    public String discoConMasVentas;
   
    public CantanteFamoso(){
        //Nada que declarar
    }
   
    public CantanteFamoso(String valor_nombre, String valor_discoConMasVentas){
        nombre = valor_nombre;
        discoConMasVentas = valor_discoConMasVentas;
    }
   
    public void setNombre(String valor_nombre){
        nombre = valor_nombre;
    }
   
    public void setDiscoConMasVentas(String valor_discoConMasVentas){
        discoConMasVentas = valor_discoConMasVentas;
    }
   
    public String getNombre(){return nombre;}
   
    public String getDiscoConMasVentas(){return discoConMasVentas;}
   
    public void mostrarCantante(){
        System.out.println("Cantante: "+nombre+"\nDisco más vendido: "+discoConMasVentas);
    }
}

En el código de "ListaCantantesFamosos", agregué lo siguiente:

Código: [Seleccionar]
public void setListaCantantes(ArrayList<CantanteFamoso> nueva_listaCantantes){
        listaCantantes = nueva_listaCantantes;
    }

y por lo que el código se quedó:

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

public class ListaCantantesFamosos{
   
    private ArrayList<CantanteFamoso> listaCantantes;
   
    public ListaCantantesFamosos(){
        listaCantantes = new ArrayList<CantanteFamoso>();
    }
   
    public void setListaCantantes(ArrayList<CantanteFamoso> nueva_listaCantantes){
        listaCantantes = nueva_listaCantantes;
    }
   
    public void añadirCantante(String valor_nombre, String valor_discoConMasVentas){
        listaCantantes.add(new CantanteFamoso(valor_nombre, valor_discoConMasVentas));
    }
   
    public int getTamaño(){return listaCantantes.size();}
   
    public CantanteFamoso obtenerInfo(int posicion){return listaCantantes.get(posicion);}
   
    public ArrayList<CantanteFamoso> obtenerLista(){
        return listaCantantes;
    }
}

No estoy muy seguro que si corregí bien los errores. ¿Podrás volver a mirártelo?, por favor.

Gracias

385
Buenaso días, Kabuto.

Primero, agradecerte que has constestado a la propuesto de César (y posteriormente mía) de demostrar el mundo fascinante de la programación y más concretamente que un mismo objetivo se puede conseguir mediante una infinidad de formas y métodos.

Sobre los dos códigos que has puesto, me parecen perfectos. Quiero decir, cumplen el cometido del ejercicio, y por supuesto, el/los código/s está/n escirto/s de una manera mucho más límpia que el mio. Has ordenado muy bien el código y todo se entiendo.

Varias cuestiones que me han parecido interesantes para comentar:

Primero: no sabía para que se utilizaba el método .close de la clase "Scanner". Consulté la documentación de "Java" y ví que es para cerrar el método:

Citar
close()
Closes this scanner.

Mi pregunta es: Si no ponemos esta línea, pasa algo?

Segundo: Muy interesante el planteamiento con los dos distintos métodos de la clase "String". Interpreto, de lo que he visto, que el método String.charAt() lo que devuelve es un tipo primitivo (char) y el método String.substring() devolverá un String que es un objeto un tanto especial (como se comenta en las entragas del curso).

Y para acabar esta observación: me ha parecido muy original que si las dos palabras tengan la misma longitud, no entren en ninguno de los dos bucles secundarios y así evitar que se imprimen las líneas "La primera/segunda línea no tiene la letra n".

En difinitiva, me ha gustado tu forma de solucionar el probrema.

387
Buenas, César.

Gracias por corregir otro ejercicio más.

Me alegra que pienses eso de mi planteamiento. Es verdad, el código no es muy limpio (ordenado), pero un día llegará cuando también consiga eso, jeje.

A ver si alguien, de verdad se anima, y lo deje un poquito más "leible".

Un saludo.

388
Buenas, César.

Primo, y ante nada, quería agradecerte la extensa y compensiva explicación. Realmente quería entender tu ejemplo, así que de verdad cogí 2 cojas (una más pequeña que la otra), puse dentro varios objetos e hice las instrucciones, jejeje. Es que como Java y los objetos son cosas tan abstractas, viéndolo se entiend mejor :)

A veces estoy un día entero con un ejercicio y no me muevo hasta que lo entienda, pero es que única y exclusivamente así avanzaré, entendiendo las cosas.

Sí, resulta muy confuso al principio, pero poco a poco se te aclaran las cosas.

Gracias.

389
Posible solución del ejercicio CU00670B del curso Java desde cero.

Citar
EJERCICIO

El API de Java proporciona herramientas para pedir datos al usuario a través de ventanas. Un ejemplo de ello es el uso de la clase JOptionPane perteneciente al paquete javax.swing.JOptionPane del API Java. El método showInputDialog permite pedir un dato al usuario y almacena su respuesta en un objeto de tipo String. Queremos crear un programa que pida al usuario un número y muestre por pantalla el doble de ese número. Para ello hemos creado este código:

import javax.swing.JOptionPane;
public class ejemplo1 {
    public static void main (String[] Args) {
        String entradaUsuario = JOptionPane.showInputDialog ( "Introduzca un número:" );
        System.out.println ("El doble del número introducido es: " + 2*entradaUsuario); 
    }
}

El problema que tenemos es que nos salta un mensaje de error “operator * cannot be applied to int, java.lang.String”. ¿Qué interpretación haces de este mensaje de error? ¿Cómo se puede corregir el código para que a través de una conversión de tipos se ejecute el programa?

Código: [Seleccionar]
import javax.swing.JOptionPane;
public class ejemplo1{
    public static void main(String []Args){
        String entradaUsuario = JOptionPane.showInputDialog("Introduzca un número");
        Integer convertir; //Por lo que he leido en los foros, tamibén se puede declarar así: int convertir; y el compilador automáticament (en segundo plano convierte "convertir" en un objeto Integer
        convertir = Integer.valueOf(entradaUsuario);
        System.out.println("El dobre del número introducido es: "+2*convertir);
    }
}

Gracias.

390
Hola a todos.

Os pongo una posible solución del ejercicio CU00669B del curso Java desde cero.

Citar
EJERCICIO

Crea una clase con el método main donde declares una variable de tipo array de Strings que contenga los doce meses del año, en minúsculas y declarados en una sola línea. A continuación declara una variable mesSecreto de tipo String, y hazla igual a un elemento del array (por ejemplo mesSecreto = mes[9]. El programa debe pedir al usuario que adivine el mes secreto y si acierta mostrar un mensaje y si no pedir que vuelva a intentar adivinar el mes secreto.  Puedes comprobar si tu  código es correcto consultando en los foros aprenderaprogramar.com.

Un ejemplo de ejecución del programa podría ser este:

Adivine el mes secreto. Introduzca el nombre del mes en minúsculas: febrero

No ha acertado. Intente adivinarlo introduciendo otro mes: agosto

No ha acertado. Intente adivinarlo introduciendo otro mes: octubre

¡Ha acertado!

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

public class TestMeses{
   
    public static void main(String []Args){
        //String [] meses;
        //meses = new String [12];
        String []mes = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};;
        String mesSecreto = mes[9];
        System.out.print("Adivina el mes secreto. Introduzca el nombre del mes en minúsculas:");
        String entradaTeclado = "";
        Scanner entradaScanner = new Scanner(System.in);
        entradaTeclado = entradaScanner.nextLine();
        while(entradaTeclado.equals(mesSecreto)==false){
            System.out.print("No has acertado. Intenta adivinar introduciendo otro mes: ");
            entradaTeclado = entradaScanner.nextLine();}
        if(entradaTeclado.equals(mesSecreto)){
            System.out.print("Has acertado!!!");
        }
       
    }


}

Gracias

391
Buenas tardes.

A continuación os pongo una posible solución del ejercicio CU00667B del curso Java desde cero.

Citar
EJERCICIO

Crea una clase denominada ListaCantantesFamosos que disponga de un atributo ArrayList listaCantantesFamosos que contenga objetos de tipo CantanteFamoso. La clase debe tener un método que permita añadir objetos de tipo CantanteFamoso a la lista. Un objeto de tipo CantanteFamoso tendrá como atributos nombre (String) y discoConMasVentas (String), y los métodos para obtener y establecer los atributos. Crea una clase test con el método main que inicialice un objeto ListaCantantesFamosos y añade manualmente dos objetos de tipo CantanteFamoso a la la lista. Usando iterator muestra los nombres de cada cantante y su disco con más ventas por pantalla. Se debe pedir al usuario un nombre y disco con más ventas de otro cantante famoso, y una vez introducidos los datos mostrar la lista actualizada usando iterator. Una vez mostrada la lista actualizada, se debe dar opción a elegir entre volver a introducir los datos de otro cantante o salir del programa (se podrán introducir tantos datos de cantantes como se desee. Para ello usa un bucle while que dé opción a elegir al usuario).

Código de la clase "CantanteFamoso":

Código: [Seleccionar]
public class CantanteFamoso{
    public String nombre;
    public String discoConMasVentas;
   
    public CantanteFamoso(String valor_nombre, String valor_discoConMasVentas){
        nombre = valor_nombre;
        discoConMasVentas = valor_discoConMasVentas;
    }
   
   
    public String getNombre(){return nombre;}
   
    public String getDiscoConMasVentas(){return discoConMasVentas;}
   
    public void mostrarCantantes(){
        System.out.println("Cantante: "+nombre+"\nDisco más vendido: "+discoConMasVentas);
    }
}

Código de la clase "ListaCantantesFamosos":

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

public class ListaCantantesFamosos{
   
    private ArrayList<CantanteFamoso> listaCantantes;
   
    public ListaCantantesFamosos(){
        listaCantantes = new ArrayList<CantanteFamoso>();
    }
   
    public void añadirCantante(String valor_nombre, String valor_discoConMasVentas){
        listaCantantes.add(new CantanteFamoso(valor_nombre, valor_discoConMasVentas));
    }
   
    public int getTamaño(){return listaCantantes.size();}
   
    public CantanteFamoso obtenerInfo(int posicion){return listaCantantes.get(posicion);}
   
    public ArrayList<CantanteFamoso> obtenerLista(){
        return listaCantantes;
    }

}

Código de la clase "Test":

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

public class Test{
   
    private Scanner entradaScanner;
    private ListaCantantesFamosos listaCantantes;
   
    public static void main(String Args[]){
        ListaCantantesFamosos listaCantantes = new ListaCantantesFamosos();
        listaCantantes.añadirCantante("Michael Jackson","Thriller");
        listaCantantes.añadirCantante("Luis Miguel","Mi jardín oculto");
        Scanner entradaScanner = new Scanner(System.in);
        String entradaTeclado03;
        System.out.println("Cantantes en la lista:");
        Iterator<CantanteFamoso> iteratorCantante = listaCantantes.obtenerLista().iterator();
        while(iteratorCantante.hasNext()){
            iteratorCantante.next().mostrarCantantes();
        }
        do{ 
        System.out.print("Introduce otro cantante:");
        String entradaTeclado01;
        entradaTeclado01 = entradaScanner.nextLine();
        System.out.print("Introduce su disco de más ventas:");
        String entradaTeclado02;
        entradaTeclado02 = entradaScanner.nextLine();
        listaCantantes.añadirCantante(entradaTeclado01,entradaTeclado02);
        iteratorCantante = listaCantantes.obtenerLista().iterator();
         while(iteratorCantante.hasNext()){
            iteratorCantante.next().mostrarCantantes();
         }
       
         System.out.print("Quieres introducir más cantantes? sí/no: ");
        entradaTeclado03 = entradaScanner.nextLine();
    }while(entradaTeclado03.equals("sí"));
    if(entradaTeclado03.equals("sí")==false){
        System.out.print("Gracias por usar nuestro programa.\nHasta pronto!");
    }
  }
       
       
    }
 

PD: Para esta solución me ha servido de ayuda la resolución de barriway desde el siguiente hilo:

https://www.aprenderaprogramar.com/foros/index.php?topic=2889.0

Gracias.

392
Corrijo el código "Test":

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

public class Test{
    public static void main(String []args){
        System.out.println("Los cantantes famosos en la lista son:");
        ListaCantantesFamosos listacantantes = new ListaCantantesFamosos();
        listacantantes.cantantesEnLaLista();
        System.out.print("Introduzca otro cantante:");
        String entradaTeclado = "";
        Scanner entradaScaner = new Scanner(System.in);
        entradaTeclado = entradaScaner.nextLine();
        if(entradaTeclado.equals("")==false){
        listacantantes.addNombre(entradaTeclado);
        listacantantes.cantantesEnLaLista();}
        String entradaDesicion = "";
        System.out.print("Deseas entrar más cantante: Sí/No: ");
        entradaDesicion = entradaScaner.nextLine();
        while(entradaDesicion.equals("")){
                System.out.print("Deseas entrar más cantante: Sí/No: ");
                entradaDesicion = entradaScaner.nextLine();
        }
        while(true){
            if(entradaDesicion.equals("Sí") || entradaDesicion.equals("Si") || entradaDesicion.equals("sí")|| entradaDesicion.equals("si"))
            System.out.print("Introduzca otro cantante:");
            entradaTeclado = entradaScaner.nextLine();
            if(entradaTeclado.equals("")==false){
            listacantantes.addNombre(entradaTeclado);
            listacantantes.cantantesEnLaLista();}
            System.out.print("Deseas entrar más cantante: Sí/No: ");
            entradaDesicion = entradaScaner.nextLine();
            while(entradaDesicion.equals("")){
                System.out.print("Deseas entrar más cantante: Sí/No:");
                entradaDesicion = entradaScaner.nextLine();
            }
            if(entradaDesicion.equals("No") || entradaDesicion.equals("no")){
            System.out.println("Gracias por utilizar nuestro programa.");
            break;
            }
        }
        }
}

Así creo que cubre más posibilidades que se pueden dar por parte del usuario. En el caso de que no entre nada en el campo de cantante nuevo, mediante la condicional :

Código: [Seleccionar]
if(entradaTeclado.equals("")==false){
        listacantantes.addNombre(entradaTeclado);
        listacantantes.cantantesEnLaLista();}

no se añadirá nada.

También, en el caso de que no responda nada en la pregunta "Si desea o no añadir un cantante nuevo", dicha pregunta se preguntará hasta que no conteste algo gracias al bucle "while":

Código: [Seleccionar]
while(entradaDesicion.equals("")){
                System.out.print("Deseas entrar más cantante: Sí/No: ");
                entradaDesicion = entradaScaner.nextLine();
        }

Y únicamente se podra salir del bucle "while(true)" cuando el usuario conteste con: "No" o "no" mediante esta condicional:

Código: [Seleccionar]
if(entradaDesicion.equals("No") || entradaDesicion.equals("no")){
            System.out.println("Gracias por utilizar nuestro programa.");
            break;
            }

Gracias

393
Una posible solución del ejercicio CU00666B del curso Java desde cero.

Citar
EJERCICIO

Crea una clase denominada ListaCantantesFamosos que al ser inicializada contenga un ArrayList con tres Strings que sean el nombre de cantantes famosos. Crea una clase test con el método main que inicialice un objeto ListaCantantesFamosos y usando un for extendido muestre los cantantes en la lista por pantalla. Se debe pedir al usuario un nombre más de cantante famoso, y una vez introducido mostrar la lista actualizada usando un for extendido. Una vez mostrada la lista actualizada, se debe dar opción a elegir entre volver a introducir otro cantante o salir del programa (se podrán introducir tantos cantantes como se desee, para ello usa un bucle while que dé opción a elegir al usuario).

Código "ListaCanstantesFamosos":

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

public class ListaCantantesFamosos{
    private ArrayList<String> listacantantesfamosos;
   
    public ListaCantantesFamosos(){
        listacantantesfamosos = new ArrayList<String>();
        listacantantesfamosos.add("Joan Bon Jovi");
        listacantantesfamosos.add("Michael Jackson");
        listacantantesfamosos.add("Julio Iglesias");
    }
   
    public void addNombre(String valor_nombre){
        listacantantesfamosos.add(valor_nombre);
    }
   
    public void cantantesEnLaLista(){
        int i = 1;
        for(String cantante: listacantantesfamosos){
            System.out.println("Cantante "+i+": "+cantante);
            i++;
        }
    }
}

Código "Test":

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

public class Test{
    public static void main(String []args){
        System.out.println("Los cantantes famosos en la lista son:");
        ListaCantantesFamosos listacantantes = new ListaCantantesFamosos();
        listacantantes.cantantesEnLaLista();
        System.out.print("Introduzca otro cantante:");
        String entradaTeclado = "";
        Scanner entradaScaner = new Scanner(System.in);
        entradaTeclado = entradaScaner.nextLine();
        listacantantes.addNombre(entradaTeclado);
        listacantantes.cantantesEnLaLista();
        String entradaDesicion = "";
        System.out.print("Deseas entrar más cantante: Sí/No: ");
        entradaDesicion = entradaScaner.nextLine();
        while(true){
            if(entradaDesicion.equals("Sí") || entradaDesicion.equals("Si") || entradaDesicion.equals("sí")|| entradaDesicion.equals("si"))
            System.out.print("Introduzca otro cantante:");
            entradaTeclado = entradaScaner.nextLine();
            listacantantes.addNombre(entradaTeclado);
            listacantantes.cantantesEnLaLista();
            System.out.print("Deseas entrar más cantante: Sí/No: ");
            entradaDesicion = entradaScaner.nextLine();
            if(entradaDesicion.equals("No") || entradaDesicion.equals("no")){
            System.out.println("Gracias por utilizar nuestro programa.");
            break;
            }
        }
        }
}

Gracias

394
Buenas, Mario.

Ahora entiendo. Había entendido más la condición de salida del bucle "while". Es decir, mientras se cumple la condición de "while - mientras" se repiten las instrucciones del bucle, pero a la que no se cumple ya la condición se saldrá del bucle. Es decir, cuando "i<msg.length()" ya no cumple esta condición ya se saldrá del bucle, o sea, no hace falta de un "break".

Por lo entendido, el código quedará de la siguiente manera:

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java

public class BucleWhile{

    public static void main(String []args){
        System.out.println("Introduzca una cadena de texto");
        String msg = "";
        Scanner entradaPorConsola = new Scanner(System.in); //Creación de un objeto Scanner
        msg = entradaPorConsola.nextLine(); //Invocación un método sobre un objeto Scanner
        int i=0;
        while(i<msg.length()){
            System.out.println("Letra "+(i+1)+":"+msg.substring(i,i+1));
            i++;
        }
    }
}


Lo único que he hecho es eliminar la línea:

Código: [Seleccionar]
if(i==msg.length()){break;}
Gracias.

395
Buenas noches.

Aquí dejo una posible solución del ejercicio CU00665B del curso Java desde cero.

Citar
EJERCICIO

Crea una clase denominada ListaCantantesFamosos que al ser inicializada contenga un ArrayList con tres Strings que sean el nombre de cantantes famosos. Crea una clase test con el método main que inicialice un objeto ListaCantantesFamosos, pida dos cantantes famosos más al usuario, los añada a la lista y muestre el contenido de la lista por pantalla.

Código de clase "ListaCantantesFamosos":

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

public class ListaCantantesFamosos{
    private ArrayList<String> listacantantesfamosos;
   
    public ListaCantantesFamosos(){
        listacantantesfamosos = new ArrayList<String>();
        listacantantesfamosos.add("Joan Bon Jovi");
        listacantantesfamosos.add("Michael Jackson");
        listacantantesfamosos.add("Julio Iglesias");
    }
   
    public void addNombre(String valor_nombre){
        listacantantesfamosos.add(valor_nombre);
    }
   
    public String getNombre(int posicion){
        if(posicion >=0 && posicion<listacantantesfamosos.size()){
            return listacantantesfamosos.get(posicion);
        }else{return "No existe cantante para la posición solicitada";}
    }
   
    public int getTamaño(){return listacantantesfamosos.size();}
   
}

Código de la clase "EntradaDeTeclado":

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
//Definimos una clase EntradaDeTeclado aprenderaprogramar.com
public class EntradaDeTeclado{

    private String entradaTeclado; //Variable de instrancia (campo) de clase
   
    public EntradaDeTeclado(){ //Constructor
        entradaTeclado = "";
        pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
    } //Cierre del constructor
   
    public void pedirEntrada(){ //Método de la clase
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
    } //Cierre del método pedirEntrada
   
    public String getEntrada(){return entradaTeclado;} //Cierre del método getEntrada
   
} //Cierre de la clase

Clase "Test":

Código: [Seleccionar]
public class Test{
    public static void main(String []args){
        System.out.println("Introduzca nombre de un cantante famoso:");
        EntradaDeTeclado entrada1 = new EntradaDeTeclado();
        System.out.println("Introduzca nombre de otro cantante famoso:");
        EntradaDeTeclado entrada2 = new EntradaDeTeclado();
        ListaCantantesFamosos lista1 = new ListaCantantesFamosos();
        lista1.addNombre(entrada1.getEntrada());
        lista1.addNombre(entrada2.getEntrada());
        for(int i=0;i<lista1.getTamaño();i++){
            System.out.println("El cantante "+(i+1)+" es: "+lista1.getNombre(i));
        }
    }
}


396
Buenas noches.

A continuación dejo la solución del ejercicio CU00662B del curso Java desde cero.

Citar
EJERCICIO

Crea una clase en cuyo método main ejecutes una comparación letra a letra usando equals de dos palabras usando bucles. Por ejemplo si las palabras son “avispa” y “ave” el programa debe dar como resultado: ¿Letra 1 igual en las dos palabras? True. ¿Letra 2 igual en las dos palabras? True ¿Letra 3 igual en las dos palabras? False ¿Letra 4 igual en las dos palabras? La palabra 2 no tiene letra 4 ¿Letra 5 igual en las dos palabras? La palabra 2 no tiene letra 5 ¿Letra 6 igual en las dos palabras? La palabra 2 no tiene letra 6.

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

public class CompararDosCadenas{
   
    public static void main(String []args){
        System.out.println("Introduzca la primera entrada: ");
        Scanner entradaEscaner = new Scanner(System.in);
        String entradaTeclado01;
        entradaTeclado01 = entradaEscaner.nextLine();
        System.out.println("Introduzca la segunda entrada: ");
        String entradaTeclado02;
        entradaTeclado02 = entradaEscaner.nextLine();
        int comparador01 = entradaTeclado01.length();
        if(entradaTeclado01.length()>entradaTeclado02.length()){ //Comparamos cuál de las dos entradas tiene menos carácteres
            comparador01 = entradaTeclado02.length(); //Establecemos el comparador a la entrada que tiene menos carácteres
        }
        int comparador02 = entradaTeclado01.length();
        if(entradaTeclado01.length()<entradaTeclado02.length()){ //Comparamos cuál de las dos entradas tiene más carácteres
            comparador02 = entradaTeclado02.length(); //Establecemos el comparador a la entrada que tiene más carácteres
        }
        comparador02 -= comparador01; //Calculamos la diferencia del comparador que tiene más valor menos el que tiene menos, para así saber cuantas veces tenemos que repetir la frase "La palabra no tiene esta letra"
        for(int i=0;i<comparador01;i++){
        System.out.println("¿La letra: "+(i+1)+" igual en las dos palabras?: "+entradaTeclado01.substring(i,i+1).equals(entradaTeclado02.substring(i,i+1)));
        }
        String palabraCorta = entradaTeclado01;
        if(entradaTeclado01.length() > entradaTeclado02.length()){
            palabraCorta = entradaTeclado02;
        }
        for(int j=0;j<comparador02;j++){
            System.out.println("La palabra: \""+palabraCorta+"\" no tiene letra: "+(j+comparador01+1));
        }
    } //Cierre del main
   
} //Cierre de la clase

Gracias.

397
Pedro, ya se porque no funciona. La respuesta la encontré en la siguiente entrega, jeje:

https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=627:pensar-en-objetos-una-entrada-de-teclado-o-consola-en-java-como-objeto-con-campos-y-metodos-cu00661b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

precisamente aquí:

Citar
/*IMPORTANTE: EN JAVA LOS OBJETOS NO SE PUEDEN COMPARAR USANDO == POR ESO ESTO NO FUNCIONARÁ       

          if (entradaTeclado.substring(0,1)=="j") {

          System.out.println ("Hemos detectado una j");

          } else { System.out.println ("Mira esto:" + entradaTeclado.substring(0,1) ); }*/ 

398
Hola, Pedro.

He corregido el código y me ha quedado de la siguiente manera:

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java

public class CU00657B{

    public static void main(String []args){
        System.out.println("Introduzca una cadena por teclado:");
        String entradaPorTeclado = "";
        String msg = "La cadena tiene menos de 5 carácteres y empieza por la letra \"a\"";
        Scanner entradaMetodoScanner = new Scanner(System.in); //Creación de un objeto Scanner
        entradaPorTeclado = entradaMetodoScanner.nextLine();
        if(entradaPorTeclado.length() < 5 && (entradaPorTeclado.substring(0,1)!= "a" || entradaPorTeclado.substring(0,1)!= "A") ){
            msg = "La cadena tiene menos de 5 carácteres y NO empieza por la letra \"a\"";
        }else if(5 <= entradaPorTeclado.length() && entradaPorTeclado.length()<= 15 && (entradaPorTeclado.substring(0,1)== "a" || entradaPorTeclado.substring(0,1)== "A")){
            msg = "La cadena tiene más de 5 y menos de 15 carácteres y empieza por la letra \"a\"";
        }else if(5 <= entradaPorTeclado.length() && entradaPorTeclado.length()<= 15 && (entradaPorTeclado.substring(0,1)!= "a" || entradaPorTeclado.substring(0,1)!= "A")){
            msg = "La cadena tiene más de 5 y menos de 15 carácteres y NO empieza por la letra \"a\"";
        }else if(entradaPorTeclado.length()> 15 && (entradaPorTeclado.substring(0,1)== "a" || entradaPorTeclado.substring(0,1)== "A")){
            msg = "La cadena tiene más de 15 carácteres y empieza por la letra \"a\"";
        }else if(entradaPorTeclado.length()>15 && (entradaPorTeclado.substring(0,1)!= "a" || entradaPorTeclado.substring(0,1)!= "A")){
            msg = "La cadena tiene más de 25 carácteres y NO empieza por la letra \"a\"";
        }
            System.out.println(msg);
       
    } //Cierre del método "main"
} //Cierre de la clase

Pero no sé por qué, no hace bien las comparaciones de los substring. Sólo comprueba la longitud y a base a ello me ejecuta las condicionales. Por qué?

Gracias.

PD. También he hecho esto:

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java

public class EjercicioCU00657B{

    public static void main(String []args){
        System.out.println("Introduzca una cadena por teclado:");
        String entradaPorTeclado = "";
        String msg = "La cadena tiene menos de 5 carácteres y empieza por la letra \"a\"";
        Scanner entradaMetodoScanner = new Scanner(System.in); //Creación de un objeto Scanner
        entradaPorTeclado = entradaMetodoScanner.nextLine();
        if(entradaPorTeclado.length() < 5 && entradaPorTeclado.substring(0,1).matches("a") != true ){
            msg = "La cadena tiene menos de 5 carácteres y NO empieza por la letra \"a\"";
        }else if(5 <= entradaPorTeclado.length() && entradaPorTeclado.length()<= 15 && entradaPorTeclado.substring(0,1).matches("a") == true){
            msg = "La cadena tiene más de 5 y menos de 15 carácteres y empieza por la letra \"a\"";
        }else if(5 <= entradaPorTeclado.length() && entradaPorTeclado.length()<= 15 && entradaPorTeclado.substring(0,1).matches("a") != true){
            msg = "La cadena tiene más de 5 y menos de 15 carácteres y NO empieza por la letra \"a\"";
        }else if(entradaPorTeclado.length()> 15 && entradaPorTeclado.substring(0,1).matches("a") == true){
            msg = "La cadena tiene más de 15 carácteres y empieza por la letra \"a\"";
        }else if(entradaPorTeclado.length()>15 && entradaPorTeclado.substring(0,1).matches("a") != true){
            msg = "La cadena tiene más de 25 carácteres y NO empieza por la letra \"a\"";
        }
            System.out.println(msg);
       
    } //Cierre del método "main"
} //Cierre de la clase

pero en este código, como comprobarás, sigo usando "matches()" aunque precedentemente le he puesto "substring()"

399
Buenos días, Pedro.

Ai, es verdad, porque en dichos métodos no hay una sobrecarga de nombres.

Gracias por corregirlo.

400
Buenas, César.

Gracias por la corrección.

Me he leído los enlaces que me recomiendas y sobre todo este:

https://www.aprenderaprogramar.com/foros/index.php?topic=1220.0

He optado por la siguiente manera: (sólo cuelgo el código de "Casa")

Código: [Seleccionar]
public class Casa{
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocina;
   
    public Casa(){
        superficie = 0;
        direccion = "";
        salonCasa = new SalonCasa();
        cocina = new CocinaCasa();
    }
   
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa classSalonCasa, CocinaCasa classCocinaCasa){
        superficie = valorSuperficie;
        direccion = valorDireccion;
        salonCasa = new SalonCasa(classSalonCasa.getNumeroDeTelevisores(), classSalonCasa.getTipoSalon());
        cocina = new CocinaCasa(classCocinaCasa.getEsIndependiente(), classCocinaCasa.getNumeroDeFuegos());
    }
   
    public void setSuperficie(double valor_superficie){
        superficie = valor_superficie;
    }
   
    public void setDireccion(String valor_direccion){
        direccion = valor_direccion;
    }
   
   
   
    public void setSalonCasa(SalonCasa objetoSalon){
       salonCasa = new SalonCasa();
       salonCasa.setNumeroDeTelevisores(objetoSalon.getNumeroDeTelevisores());
       salonCasa.setTipoSalon(objetoSalon.getTipoSalon());
    }
   
     public void setCocina(CocinaCasa objetoCocina){
        cocina = new CocinaCasa();
        cocina.setEsIndependiente(objetoCocina.getEsIndependiente());
        cocina.setNumeroDeFuegos(objetoCocina.getNumeroDeFuegos());
     }
   
    public double getSuperficie(){return superficie;}
   
    public String getDireccion(){return direccion;}
   
    public SalonCasa getSalonCasa(){return salonCasa;}
   
    public CocinaCasa getCocina(){return cocina;}
}

De este código no entiendo: si hemos creado ya en el contructor un nuevo objeto que es "salonCasa" y "cocina" por qué los velvemos a crear en el método "setSalonCasa" y "setCocina", respectivamente. Y por qué como parámetros le pasamos los métodos "getNumeroDeTelevisores()", "getTipoSalon()", "getEsIndependiente()" y "getNumeroDeFuegos()". (Me baso en lo que ha explicado Mario R. Rancel en el hilo que te comenté).

Gracias

Páginas: 1 ... 15 16 17 18 19 [20] 21 22 23 24 25 ... 30

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