проблема преобразования из строки в список массивов в java

#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 переменной не указан оператор diamond ArrayList , который должен ArrayList<String> указывать, что он будет содержать строковые элементы (для получения дополнительной информации о операторах diamond https://www.baeldung.com/java-diamond-operator )
  • Arrays.asList() не возвращает an ArrayList<> , но возвращает a List<> (супертип 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>