Я изучаю Java шаг за шагом. Теперь я знаю до массивов, а затем - Коллекции.
Поскольку я изучаю основываясь на проектах, я заметил, что большинство программистов предпочитают использовать Collections
а не простые массивы, чтобы исключить циклы и использовать предопределенные функции (например, sort
и многое другое). Итак, сначала я пытаюсь преобразовать int[]
в Collection
. Но я получаю ошибку в цикле foreach
...
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Coll {
public static void main(String[] args) {
Coll obj = new Coll();
obj.op();
}
void op() {
System.out.println("To convert Array to Collections");
Scanner getinp = new Scanner(System.in);
System.out.println("Enter the size of array : ");
int siz = getinp.nextInt();
int[] arry = new int[siz];
System.out.println("Enter the values of elements");
for (int i = 0; i < arry.length; i++) {
System.out.println("arry[" + i + "] : ");
arry[i] = getinp.nextInt();
}
List arrycoll = Arrays.asList(arry);
for (String elem : arrycoll) {
System.out.println(elem);
}
}
}
Ошибка указана в следующей строке:
for(String elem : arrycoll)
Указывая на arrycoll
, в нем говорится:
required 'String' but found 'Object'
Если я определяю arry
как String
и сохраняю String
s, это не будет ошибкой, но для int
он не работает.
Учитывая это сообщение
он утверждает, что требуется String, но найден объект
Вы получаете две важные части информации. Во-первых, вы используете String
для элементов вашего int[]
. И два, у вас есть необработанный тип (поэтому ваши элементы Integer рассматриваются как элементы Object). Не используйте Raw Types ! Я уверен, что вы хотели что-то вроде
List<Integer> arrycoll = Arrays.asList(arry);
for(Integer elem:arrycoll) { // <-- Integer, not String.
System.out.println(elem);
}
редактировать
Конечно, для работы с коллекцией вам понадобится объект. int
имеет тип оболочки Integer
, поэтому вам нужно будет изменить
int[] arry=new int[siz];
в
Integer[] arry=new Integer[siz];
Arrays.asList(arry)
. Несоответствие типов: невозможно преобразовать из List <int []> в List <Integer>
требуется
String
но найденObject
В вашем для каждого цикла вы используете String как тип для элемента, тогда как arrycoll - это список ссылок исходного списка, тип которых - Object.
List arrycoll
Вы указали список ссылок на исходный список. Вы должны сообщить компилятору, что они будут List<Integer> values
:
List<Integer> arrycoll
а также
используйте Integer вместо String для elem
Заменить int[] arry = new int[siz];
с Integer [] arry = new Integer [siz];
Следовательно, код станет:
Integer[] arry = new Integer[siz];
List<Integer> arrycoll = Arrays.asList(arry);
for (Integer elem : arrycoll) {
System.out.println(elem);
}
Arrays.asList(arry);
по-прежнему возвращает список этого типа: List<int[]>
Нет проблем!
Измените список на список, который теперь будет статичным, чтобы объекты в списке были целыми (в общем, все они рассматриваются как целые)
Замените String на Integer, так как теперь все объекты в списке имеют тип Integer (не String или что-то еще)
Только для печати, просто попробуйте это; литье как int[]
List arrycoll = Arrays.asList(arry);
for (Object elem : arrycoll) {
int[] iArr1 = (int[]) elem;
for (int i : iArr1) {
System.out.println(i);
}
}
List<Integer>
. Кроме того, вы вставляете целое число и пытаетесь вернуть строку ...Arrays
фактически поддерживаютsort
.