[ Foro de Java ]
Tengo el siguiente código y me pone el siguiente error: The method add(Integer) in the type ArrayList<Integer> is not applicable for the arguments (String)
¿Alguien puede explicarme porque?
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Act2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Integer> clase = new ArrayList<Integer>();
//String valor = sc.nextLine();
System.out.println("Introduce los nombres: ");
String valor = ""; // char valor[10] = "";
while(true) {
valor = sc.nextLine(); // scanf("%s", &valor);
if("fin".equalsIgnoreCase(valor)){
break;
}
clase.add(valor);
}
System.out.println(clase);
Collections.sort(clase);
for(int i=0; i<clase.size();i++)
System.out.print(clase.get(i) + "");
}
}
El mensaje es claro: es una lista de enteros, no puedes añadirle cadenas de texto. Deberás convertir antes de texto a número.
Estas tratando de agregar un tipo de dato String(cadena de texto) a una lista de valores numericos enteros (List<Integer>).
Java es un lenguaje fuertemente tipeado. Si declaraste un tipo de dato no podes meterle otro.
Tenes 2 opciones:
1- usas el metodo nextInt (creo que se llamaba asi) de la clase scanner (sc.nextInt()) y lo almacenas en una variable de tipo int o Integer.
2- haces un cast del valor de la cadena al tipo numerico. Si ingresas un valor que no sea numero, te va a largar una excepcion cuando queiras hacer el casting.
El error se produce porque estás intentando agregar una cadena de caracteres (String) a una lista que espera elementos de tipo Integer. En el código que has proporcionado, la variable "valor" es de tipo String y se está agregando a la lista "clase", que se ha declarado como una lista de enteros.
Para solucionarlo, deberías cambiar el tipo de datos de la lista a ArrayList<String>, de la siguiente manera:
Scanner sc = new Scanner(System.in);
ArrayList<String> clase = new ArrayList<String>();
System.out.println("Introduce los nombres: ");
String valor = "";
while(true) {
valor = sc.nextLine();
if("fin".equalsIgnoreCase(valor)){
break;
}
clase.add(valor);
}
System.out.println(clase);
Collections.sort(clase);
for(int i=0; i<clase.size();i++) {
System.out.print(clase.get(i) + "");
}
Con estos cambios, podrás agregar cadenas de caracteres a la lista sin problemas.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)