I am with a class exercise where we must store items in an arraylist.
When adding those articles through objects, it gives me an error that it could not be converted to String. I don't understand why it puts that, since the three attributes are String. I give you what I have. Please help me find the bug or fix it. Thank you very much in advance.
Item Class:
public class Articulo {
//Creamos los atributos
private String codigo;
private String descripcion;
private String existencias;
//Creamos los Setter y Getters
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public String getExistencias() {
return existencias;
}
public void setExistencias(String existencias) {
this.existencias = existencias;
}
//Contructor sin parametos inicializando codigo
public Articulo() {
this.codigo = "XX.000X";
}
//Contructor con parametros y los tres atributos
public Articulo(String codigo, String descripcion, String existencias) {
this.codigo = codigo;
this.descripcion = descripcion;
this.existencias = existencias;
}
//Contructor con parametros, dos atributos y el tercero inicializandolo
public Articulo(String codigo, String descripcion) {
this.codigo = codigo;
this.descripcion = descripcion;
this.existencias = "";
}
//Copia objeto
public Articulo(Articulo copiaArticulo) {
this.codigo=copiaArticulo.codigo;
this.descripcion=copiaArticulo.descripcion;
this.existencias=copiaArticulo.existencias;
}
public static boolean ValidarCodigo(String codigo) {
boolean codigoValido;
Pattern pat = Pattern.compile("^[A-Z]{2}[.]{1}[0-9]{1,3}[a-zA-X]{1,}$");
Matcher mat = pat.matcher(codigo);
if (mat.matches()) {
codigoValido = true;
} else {
System.out.println("No has introducido bien el codigo, por favor intentelo de nuevo");
codigoValido = false;
}
return codigoValido;
}
public static boolean ValidarDescripcion(String descripcion) {
boolean descripcionValida;
Pattern pat1 = Pattern.compile("^[A-Za-z\\s]{3,15}$");
Matcher mat1 = pat1.matcher(descripcion);
if (mat1.matches()) {
descripcionValida = true;
} else {
System.out.println("No has introducido bien la descripción, por favor intentelo de nuevo. Recuerda que debe tener un mínimo de tres letras y máximo de 15");
descripcionValida = false;
}
return descripcionValida;
}
public static boolean ValidarExistencias(String existencias) {
boolean existenciasValida;
Pattern pat2 = Pattern.compile("^[0-9]{1,3}$");
Matcher mat2 = pat2.matcher(existencias);
if (mat2.matches()) {
existenciasValida = true;
} else {
System.out.println("El número introducido no es correcto, recuerda que debe ser positivo y que esté entre 1 y menos de 1000 ");
existenciasValida = false;
}
return existenciasValida;
}
}
Warehouse Class:
public class Almacen {
private ArrayList<String> coleccion = new ArrayList();
public static void main(String[] args) {
//Objeto sin parametros
Articulo prueba = new Articulo();
prueba.setCodigo("XX.000X");
prueba.setDescripcion(null);
prueba.setExistencias("0");
//Contructor con tres paramentros
Articulo tornillos = new Articulo("AA.123A","tornillos", "9");
//objeto con dos parametros
Articulo tuercas = new Articulo("BB.111B","tuercas");
tuercas.setExistencias("500");
//objeto copia
Articulo arandelas = new Articulo (tornillos);
arandelas.setCodigo("CC.222C");
arandelas.setDescripcion("arandelas");
arandelas.setExistencias("500");
coleccion.add(prueba);
}
}
There are two errors according to the example code you posted:
1- The error you mention is because you try to add an object to the list of string(
private ArrayList<String> coleccion = new ArrayList();
) to solve this you must declare that it is a list but of objects (Specifically the object you want to add:ArrayList<Articulo> coleccion = new ArrayList();
)2- The second error is because in a static method you cannot access or have access to a reference or any variable that is static. Therefore, the list must be declared inside your main method like this:
The error is basically given, because the collection variable is of type
ArrayList<String>
.it should be this way
also I would not declare it as private (global) outside the method, but inside the same method in this way:
At this point, depending on the version of Java you are using, you must pass the name of the object inside the quotes of the new
ArrayList
.Cheers