#java
#java
Вопрос:
У меня проблема! Я пытаюсь преобразовать строку в ArrayList, но это не работает, в консоли указано несоответствие типов: невозможно преобразовать из списка в ArrayList моя маленькая программа :
package nfa032.application;
import java.util.*;
import java.util.ArrayList;
import java.util.Scanner;
import java.io.*;
public class ArrayListUtils {
public static void AfficherArrayListString(ArrayList<String>a)
{
for(int i=1; i<=a.size(); i )
{
System.out.println(a.get(i));
}
}
public static ArrayList<String> lireArrayListString(int n) throws IOException
{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader in=new BufferedReader(isr);
String s;
String [] str;
ArrayList liste=new ArrayList<String>();
for(int i=1; i<=n; i )
{
System.out.println("Entrer une chaîne.");
s=in.readLine();
str=s.split("\s ");
liste=Arrays.asList(str);
}
return liste;
}
}
Ответ №1:
Я думаю, проблема в этой строке liste=Arrays.asList(str);
Это потому, что вы пытаетесь назначить интерфейс List
реализации этого интерфейса, который ArrayList
Чтобы решить эту проблему, вы можете сделать List<String> liste=new ArrayList<String>();
Ответ №2:
Существует несколько проблем с имеющимся у вас кодом.
- В вашей
liste
переменной не указан оператор diamondArrayList
, который долженArrayList<String>
указывать, что он будет содержать строковые элементы (для получения дополнительной информации о операторах diamond https://www.baeldung.com/java-diamond-operator ) Arrays.asList()
не возвращает anArrayList<>
, но возвращает aList<>
(супертип ArrayList). Если вы хотите использоватьArrays.asList
, вам нужно изменить типliste
наList<String>
Код становится примерно таким
public static void AfficherArrayListString(final ArrayList<String> a) {
for (int i = 1; i <= a.size(); i ) {
System.out.println(a.get(i));
}
}
public static List<String> lireArrayListString(final int n) throws IOException {
final InputStreamReader isr = new InputStreamReader(System.in);
final BufferedReader in = new BufferedReader(isr);
String s;
String[] str;
List<String> liste = new ArrayList<>();
for (int i = 1; i <= n; i ) {
System.out.println("Entrer une chaîne.");
s = in.readLine();
str = s.split("\s ");
liste = Arrays.asList(str);
}
return liste;
}
Ответ №3:
public static ArrayList<String> lireArrayListString(int n) throws IOException
{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader in=new BufferedReader(isr);
String s;
String [] str;
ArrayList<String> liste=new ArrayList<String>();
for(int i=1; i<=n; i )
{
System.out.println("Entrer une chaîne.");
s=in.readLine();
str=s.split("\s ");
liste=(ArrayList<String>) Arrays.asList(str);
}
return liste;
}
}
Комментарии:
1. здесь я поместил ArrayList<String> после liste=
2. и перед Arrays.asList(str);
3. но есть исключение, когда я ввожу блок-цепочку
4. Исключение в потоке «main» java.lang. ClassCastException: класс java.util. Массивы $ArrayList не могут быть приведены к классу java.util. ArrayList (java.util. Массивы$ArrayList и java.util. Список массивов находится в модуле java.base загрузчика ‘bootstrap’) в nfa032.application. ArrayListUtils. lireArrayListString(ArrayListUtils.java:26) в nfa032.application.Main.main(Main.java:27)
5. Arrays.asList() не возвращает ArrayList<>, но возвращает список<> (супертип ArrayList). Если вы хотите использовать Arrays.asList, вам нужно изменить тип liste на List<String>