我遇到了一个问题,我不知道为什么会发生。基本上,我试图将列表中的所有元素传递到不同类中的另一个列表。我尝试使用 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/