java - 列表问题

标签 java list arraylist

我遇到了一个问题,我不知道为什么会发生。基本上,我试图将列表中的所有元素传递到不同类中的另一个列表。我尝试使用 List 类中的变量、 get 方法甚至 addAll 方法,但没有任何效果。我不断收到空列表...

这就是错误发生的地方:

public class ChecaOrtografia
{
    // instance variables - replace the example below with your own
   Dicionario dicionario = new Dicionario();
   Gramatica gramatica = new Gramatica();
   Frase frase = new Frase();   
   public List<String> listaFrases;
   public List<Item> listaDicionario;
   public List<String> listaGramatica;

    /**
     * Constructor for objects of class ChecaOrtografia
     */
    public ChecaOrtografia()
    {
        listaFrases = new ArrayList<>();
        this.listaFrases.addAll(frase.listaFrases);
        listaDicionario =  new ArrayList<>();
        this.listaDicionario.addAll(dicionario.listaItens);
        listaGramatica =  new ArrayList<>();
        this.listaGramatica.addAll(gramatica.listaRegras);
    }

请记住,我已经尝试过类似的操作:

listaFrases = frase.listaFrases;

listaFrases = frase.getFrases();

这是我主课的一部分:

public class corretorGramatical 
{       
  public static void main(String [ ] args) 
  {
   Dicionario dicionario = new Dicionario();
   Gramatica gramatica = new Gramatica();
   Frase frase = new Frase();
   ChecaOrtografia checador;
   List<String> saida = new ArrayList<>();
   Item a;
   String word, category, specification, frases;
   int contador = 0;
   char code;
   Scanner entry = new Scanner(System.in); 
loop:while (entry.hasNextLine()) { 
       code = entry.nextLine().charAt(0); 
   switch(code)
   {
      case 'd':
          System.out.println ("Diga quantas words seu dicionario tera");
          contador = entry.nextInt();
          entry.nextLine(); 
          for(int i = 0; i < contador; contador--) 
          {
            System.out.println ("Qual é a palavra?");
            word = entry.nextLine();
            System.out.println ("Qual a categoria?");
            category = entry.nextLine(); 
            a = new Item (word, category);
            dicionario.listaItens(a);

          }
      break;

      case 'g':   
         System.out.println ("Quantas linhas serão utilizadas para especificar a gramática?");
         contador = entry.nextInt();
         entry.nextLine();

         for(int j = 0; j < contador; contador--) 
         {
          System.out.println ("Qual é a especificação?");
          specification = entry.nextLine(); 
          gramatica.listaRegras(specification);

         } 
          break;

      case 'f':
            System.out.println ("Digite as frases que deseja checar");

            entry.nextLine();

             for(int f = 0; f < contador; contador--) 
         {
          System.out.println ("Qual é a frase?");
          frases = entry.nextLine(); 
          frase.listaFrases(frases); 
         } 
       checador = new ChecaOrtografia();
       saida = checador.checarOrtografia();
       break;

      case 's':
        break loop;
    }
  }

最佳答案

因为您要再次创建这些类。它们不是您存储数据的地方。

您必须将数据从一个类传递到另一个类。您可以创建 setter 或将其传递到构造函数中。

以下是使用构造函数的方法。

让你的构造函数接受这 3 个类。

public ChecaOrtografia(Dicionario dicionario, Gramatica gramatica, Frase frase)
{
    listaFrases = new ArrayList<>();
    this.listaFrases.addAll(frase.listaFrases);
    listaDicionario =  new ArrayList<>();
    this.listaDicionario.addAll(dicionario.listaItens);
    listaGramatica =  new ArrayList<>();
    this.listaGramatica.addAll(gramatica.listaRegras);
}

现在将这些类传递给构造函数。因此我们可以在 ChecaOrtografia 类中从中获取数据。

checador = new ChecaOrtografia(dictionario, grammatica, frase);

并删除 ChecaOrtografia 类中这 3 个类的声明,因为您不再需要它。

关于java - 列表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33898577/

相关文章:

java - 为什么在 Java 中不能有 "List<List<String>>"?

java - 无法将连字符转换为 UTF-8

java - Android Studio AddView TableLayout,必须removeChild错误?

python - 返回最常见的小写字母并按字母顺序排列

java - 如何获取列表中选项标签的内部文本?

linux - 对命令行中的列表感到困惑

java - 如何修复此数组列表的迭代?

java - 将 Matlab 组件添加到 Java JWindow

java - 多客户端服务器 - Java

android - 简单的方式在 Activity 和 Intent 之间传递arraylist