Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: macarena2405 en 04 de Junio 2015, 16:03
-
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
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
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!
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);
}
}
}
-
La clese ListaCantantesFamosos no tiene constructor seria algo asi
public ListaCantantesFamosos(ArrayList<String> listadecantantesfamosos) {
this.listadecantantesfamosos = listadecantantesfamosos;
}
Tampoco tiene un metodo para lista cantantes
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 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
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();
}
-
Con la modificación de tu código quedaría algo así
este es el de lista de cantantes
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
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
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
-
Muchas gracias ahora si funciona y te pregunto que función cumple el this en ese caso?
-
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 (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