我遇到了一个问题,我不知道为什么会这样。基本上,我试图将List中的所有元素传递给另一个类中的另一个List。我试图使用变量,get方法甚至List类中的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;
}
}
答案 0 :(得分:1)
因为您正在再次创建这些类。它们不是您存储数据的那个。
您必须将数据从一个类传递到另一个类。您可以创建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(dicionario, gramatica, frase);
并删除ChecaOrtografia
类中这3个类的声明,因为您不再需要它了。
答案 1 :(得分:1)
每次调用ChecaOrtagrafia
方法之前,您都会创建一个新的checarOrtagrafia
。我假设您希望此实例了解dicionario
和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
中使用它们时,您应该访问原始类中的列表。
答案 2 :(得分:0)
在您的代码中,您没有在要添加的列表中放置任何内容。添加列表时,实际上是添加列表的元素,而不是列表本身。
答案 3 :(得分:0)
根据您到目前为止显示的代码,您将向另一个空列表添加一个空列表,因此在构建类时,添加为空的列表是正确的行为。
如果要将列表添加到另一个列表,则需要实际填充其中的一些元素。