Autor Tema: Clase ArrayList de Java. Concepto de clase genérica o parametrizada CU00665B  (Leído 5561 veces)

macarena2405

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 36
    • Ver Perfil
Hola este es el código de mi ejercicio pero  me da un error que no entiendo:

 "constructor ListaDeCantantesFamosos in class ListaDeCantantesFamosos cannot be applied to given types; required.java.lang.String; found: no arguments; reason: actual and formal argument lists differ in length"

este es el de lista de cantantes
Código: [Seleccionar]
import java.util.ArrayList;
import java.lang.String;
public class ListaCantantesFamosos
{
    private String nombreDeLaLista;
    private ArrayList <String > listadecantantesfamosos;
   
    public ListaCantantesFamosos(String nombre)
    {
     nombreDeLaLista=nombre;
      listadecantantesfamosos =new ArrayList <String >();
 
 
     listadecantantesfamosos.add("Adele");listadecantantesfamosos.add("Aerosmith");
     listadecantantesfamosos.add("Queen");
     
    }

  public void addCantantes (String valor_nombre){listadecantantesfamosos.add(valor_nombre);}
  public String getCantantes (int posicion){
      if (posicion >=0 && posicion <listadecantantesfamosos.size()){
          return listadecantantesfamosos.get(posicion);}
          else {return "No existe nombre para la posicion solicitada";}
        }
   
        public int getTamaño(){
            return listadecantantesfamosos.size();}
       
        public void removeCantanteFamoso(int posicion){
         if (posicion>=0 && posicion < listadecantantesfamosos.size()){
            listadecantantesfamosos.remove(posicion);}
          else {}
        }
    }



este es el de entrada de teclado que es uno que ya tenía
Código: [Seleccionar]
import java.util.Scanner;
public class EntradaDeTeclado{
    private String entradaTeclado; //variable de instancia campo de la clase
   
    public EntradaDeTeclado(){
        entradaTeclado="";
        pedirEntrada();// esto es una llamada a un metodo interno. al crear un objeto ejecutamos el metodo
    }
   
    public void pedirEntrada(){ //metodo de la clase
        Scanner entradaEscaner=new Scanner (System.in);
        entradaTeclado=entradaEscaner.nextLine();
    }
   
    public String getEntrada(){return entradaTeclado;}
    public String getPrimeraPalabra (){
          //IMPORTANTE: EN JAVA LOS OBJETOS NO SE PUEDEN COMPARAR USANDO == POR ESO ESTO NO FUNCIONARÁ     
          if (entradaTeclado.substring (0,1).equals("j")){
              System.out.println("hemos detectado una j");
            }else {System.out.println ("Mira esto:" + entradaTeclado.substring(0,1) ); }
           
             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;}
           
           
      public int getLongitud(){ //metodo de la clase
          return entradaTeclado.length();
        }}



al compilar el main es donde presenta el mensaje mencionado anteriormente alguien puede ayudarme a ver mi error gracias!


Código: [Seleccionar]
import java.lang.String;
public class TestListaDeCantantesFamosos
{
    public static void main (String [] args){
       
        System.out.println("Ingrese dos cantantes mas");
        System.out.println("Ingrese el primer cantante");
       EntradaDeTeclado entrada1 = new EntradaDeTeclado();
       System.out.println("Ingrese el segundo cantante");
       EntradaDeTeclado entrada2 = new EntradaDeTeclado();
       System.out.println("Gracias");
       
      ListaCantantesFamosos lista1 = new ListaCantantesFamosos();
      lista1.addCantantes(entrada1.getEntrada()); lista1.addCantantes(entrada2.getEntrada());
     
       for (int i=0;(i<=lista1.getTamaño);i++)
          {lista1.getCantantes(i);
            }
       
        }
    }

« Última modificación: 05 de Junio 2015, 08:54 por Alex Rodríguez »

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
La clese  ListaCantantesFamosos no tiene constructor seria algo asi
Código: [Seleccionar]
public ListaCantantesFamosos(ArrayList<String> listadecantantesfamosos) {
        this.listadecantantesfamosos = listadecantantesfamosos;
    }

Tampoco tiene un metodo para lista cantantes
Código: [Seleccionar]
public void listarCantantesFamosos() {
        for (int i = 0; i < listadecantantesfamosos.size(); i++) {
            System.out.println("Cantante Famoso " + (i + 1) + " : " + listadecantantesfamosos.get(i));
        }
    }

Este codigo ya no es necesario
Código: [Seleccionar]
public String getCantantes (int posicion){
      if (posicion >=0 && posicion <listadecantantesfamosos.size()){
          return listadecantantesfamosos.get(posicion);}
          else {return "No existe nombre para la posicion solicitada";}
        }
   
        public int getTamaño(){
            return listadecantantesfamosos.size();}
       
        public void removeCantanteFamoso(int posicion){
         if (posicion>=0 && posicion < listadecantantesfamosos.size()){
            listadecantantesfamosos.remove(posicion);}
          else {}
        }
Tampoco este del Entrada del teclado la ultima parte
Código: [Seleccionar]
public String getPrimeraPalabra (){
          //IMPORTANTE: EN JAVA LOS OBJETOS NO SE PUEDEN COMPARAR USANDO == POR ESO ESTO NO FUNCIONARÁ     
          if (entradaTeclado.substring (0,1).equals("j")){
              System.out.println("hemos detectado una j");
            }else {System.out.println ("Mira esto:" + entradaTeclado.substring(0,1) ); }
           
             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;}
           
           
      public int getLongitud(){ //metodo de la clase
          return entradaTeclado.length();
        }

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Con la modificación de tu código quedaría algo así

este es el de lista de cantantes
Código: [Seleccionar]
import java.util.ArrayList;

public class ListaCantantesFamosos {

    //private String nombreDeLaLista;
    private ArrayList<String> listadecantantesfamosos;

    public ListaCantantesFamosos(ArrayList<String> listadecantantesfamosos) {
        this.listadecantantesfamosos = listadecantantesfamosos;
    }

    public ListaCantantesFamosos() {
        //nombreDeLaLista = nombre;
        listadecantantesfamosos = new ArrayList<String>();

        listadecantantesfamosos.add("Adele");
        listadecantantesfamosos.add("Aerosmith");
        listadecantantesfamosos.add("Queen");

    }

    public void addCantantes(String valor_nombre) {
        listadecantantesfamosos.add(valor_nombre);
    }

    public void listarCantantesFamosos() {
        for (int i = 0; i < listadecantantesfamosos.size(); i++) {
            System.out.println("Cantante Famoso " + (i + 1) + " : " + listadecantantesfamosos.get(i));
        }
    }

}

este es el de entrada de teclado
Código: [Seleccionar]
import java.util.Scanner;

public class EntradaDeTeclado {

    private String entradaTeclado; //variable de instancia campo de la clase

    public EntradaDeTeclado() {
        entradaTeclado = "";
        pedirEntrada();// esto es una llamada a un metodo interno. al crear un objeto ejecutamos el metodo
    }

    public void pedirEntrada() { //metodo de la clase
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
    }

    public String getEntrada() {
        return entradaTeclado;
    }

}

y el main
Código: [Seleccionar]
public class TestListaDeCantantesFamosos {

    public static void main(String[] args) {

        System.out.println("Ingrese dos cantantes mas");
        System.out.println("Ingrese el primer cantante");
        EntradaDeTeclado entrada1 = new EntradaDeTeclado();
        System.out.println("Ingrese el segundo cantante");
        EntradaDeTeclado entrada2 = new EntradaDeTeclado();
        System.out.println("Gracias");

        ListaCantantesFamosos lista1 = new ListaCantantesFamosos();
        lista1.addCantantes(entrada1.getEntrada());
        lista1.addCantantes(entrada2.getEntrada());

       
        lista1.listarCantantesFamosos();
     

    }
}

En el main ya no es necesario mas recorrer con un for solo llama nomas al método para listar Ojala que te sirva la modificación cualquier recomendación para mejorar el código seria exelente

macarena2405

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 36
    • Ver Perfil
Muchas gracias ahora si funciona y te pregunto que función cumple el this en ese caso?

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Citar
La palabra clave this  tiene distintos usos en Java y en general podríamos interpretarla como “este objeto”.
acá se explicaba algo de la palabra this
https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=592:ejemplo-de-codigo-java-basico-clases-con-campos-constructor-y-metodos-la-palabra-clave-this-cu00652b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

Aunque igual funcionaria sin la palabra this en este caso

 

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