2015-11-24 5 views
0

У меня возникла проблема с тем, что я не знаю, почему это происходит. В основном, я пытаюсь передать все элементы в списке в другой список в другом классе. Я попытался использовать переменные, метод get и даже метод addAll из класса List, и ничего не работает. Я получаю пустой список ...Проблема со списком

Вот где ошибка происходит:

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; 
    } 
    } 
+2

Я не вижу в вашем коде, где вы заполняете список. – Dherik

+0

Я не вижу, как это должно работать, поскольку нет другого экземпляра 'CeckaOrtografia'. Если вам нужно скопировать элементы между двумя экземплярами, вам нужно иметь два (например, «CheckaOrtografia other») для копирования или копирования. – Jack

+0

Возможно, вам не хватает paraemter в вашем конструкторе с другим экземпляром 'CeckaOrtografia' – k0ner

ответ

1

Потому что вы снова создаете эти классы. Это не та, в которой вы храните свои данные.

Вам придется передавать данные из одного класса в другой. Вы можете либо создать сеттеры, либо передать его в конструкторе.

Вот как вы это делаете, используя конструкторы.

Сделайте свой конструктор приемлемым для 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(dicionario, gramatica, frase);

И удалить объявления из этих 3-х классов в ChecaOrtografia классе, потому что вам не нужно больше.

+0

Попробуй сразу. –

0

В вашем коде вы ничего не добавили в список, который вы добавляете. Когда вы добавляете список, вы действительно добавляете элементы списка, а не сам список.

+0

В моем основном классе. Я просто использую класс checkaOrtografia после заполнения их всех. –

0

На основе кода, который вы указали до сих пор, вы добавляете пустой список в другой пустой список, поэтому в момент построения класса список, добавляемый в пустое, является правильным поведением.

Если вы хотите добавить список в другой список, вам необходимо на самом деле заполнить некоторые его элементы.

+0

В моем основном классе. Я просто использую класс checkaOrtografia после заполнения их всех. –

+0

Вам нужно добавить в свой класс некоторые получатели и сеттеры для доступа к вашим спискам из объекта класса, а затем манипулировать списками из основного. – mcraen

1

Каждый раз, когда вы вызываете метод checarOrtagrafia, вы создаете новый ChecaOrtagrafia. Я предполагаю, что вы ожидаете, что этот экземпляр узнает о значениях в объектах и gramatica. Но он не может этого знать, потому что у него нет ссылки на них.

Поскольку эти два объекта не меняются во время цикла, я подозреваю, что вы хотите сохранить ссылку на них в ChecaOrtagrafia и просто передать объект Frase в каждый момент времени. Ваш класс должен выглядеть следующим образом:

class ChecaOrtagrafia { 
    private final Dicionario dicionario; 
    private final Gramatica gramatica; 
    public ChecaOrtagrafia(Dicionario dicionario, Gramatica gramatica) { 
     this.dicionario = dicionario; 
     this.gramatica = gramatica; 
    } 
    public List<String> checaGramatica(Frase frase) { 
     ... 
    } 
} 

Маловероятно, что ему нужны собственные копии списков в этих классах. Вы должны получить доступ к спискам в исходных классах, когда вам нужно их использовать внутри checaGramatica.

+0

В этом была проблема. спасибо –

Смежные вопросы