Dúvidas com ArrayList

Olá Pessoal.

Estou com dúvidas nos laços abaixo. O que ocorre é o seguinte, a listaQuestaoAlunos possui 2 elementos, já a listaDisciplinas possui 7 elementos que esta vindo de um inputText que esta em uma coluna dinamica de uma dataTable. O laço em si esta sendo percorrido corretamente, porem esta trazendo apenas as 7 ultimas notas digitas. Ao total teria 14 notas de acordo com o digitado pelo usuario, porem esta trazendo 14 notas iguais as 7 ultimas digitadas, não estou conseguindo enxergar como resolver isso.


for (int i = 0; i < listaQuestaoAlunos.size(); i++) {
					for (int y = 0; y < listaDisciplinas.size(); y++) {

						digAlun.setUsuario(usuario);
						digAlun.setNota(listaDisciplinas.get(y).getNota());
						digAlun.setTurma(listaDisciplinas.get(y).getTurma());
						digAlun.setQuestao(listaQuestaoAlunos.get(i)
								.getQuestao());
						digAlun.setDataPreenchimento(new Date());

						abDAO.saveOrUpdate(digAlun);
						digAlun = null;
						reset();

					}
				}

Tela:


<p:dataTable paginator="true" style="overflow: auto; width: 980px"
							value="#{preenchimentoBacking.listaQuestaoAlunos}" var="a"
							rows="10">

							<p:column>
								<f:facet name="header">
									<h:outputText value="Questões" style="font-size: 9px" />
								</f:facet>
								<div align="left"
									style="overflow: auto; width: 300px; font-size: 9px">

									<h:outputText
										value="Cód. #{a.questao.codigoFormatado} - #{a.questao.descricao}" />
								</div>
							</p:column>


							<div style="width: 5px">
								<p:columns var="b" style="width:15px"
									value="#{preenchimentoBacking.listaDisciplinas}">
									<div align="center">
										<f:facet name="header">
											<div align="center"
												style="overflow: auto; width: 120px; font-size: 8px">
												<h:outputText value="- #{b.turma.disciplina.idOrion} -" />
												<br />
												<h:outputText value="#{b.turma.disciplina.nome}" />
												<br />
												<h:outputText value="#{b.turma.docente.nome}" />
											</div>
										</f:facet>

										<p:inputMask style="font-size:4px;width:40;height:20"
											value="#{b.nota}" mask="9" maxlength="1">
										</p:inputMask>

									</div>
								</p:columns>
							</div>

						</p:dataTable>

Desde já agradeço.

Renan.

Não estou vendo onde digAlun sendo instanciado ou por que você atribui null à ele, mais esse reset no final. Você está reaproveitando um mesmo objeto várias vezes?

Olá Bruno.

Primeiramente obrigado pelo contato. Sim, estou aproveitando o mesmo objeto. Não coloquei o trecho do código onde estou instanciando o digAlun, mas é acima desse método. Neste caso a cada loop eu estou salvando, atribuindo null e o reset esta dando new novamente, pois preciso salvar um registro para cada disciplina e questão. O problema esta no seguinte:

Minha lista de questao no momento possui:

Questao 1
Questao 2

Minha lista de disciplina no momento possui:

Disciplina 1
Disciplina 2
Disciplina 3
Disciplina 4
Disciplina 5
Disciplina 6
Disciplina 7

Isso tudo esta sendo carregado em um dataTable, onde a a lista de disciplinas corresponde as colunas que são dinâmicas. Eu tenho inputMask que recebe as notas digitadas para cada disciplina e questão, onde o value é o atributo nota que pertence a lista de disciplinas. Se eu digitasse 14 numeros diferentes no campo nota, eu teria que ter 14 notas diferentes armazenada na lista de disciplinas, porém não é isso que esta ocorrendo. Esta sendo armazenado 14 notas igual as 7 ultimas digitadas. Acredito que eu teria que ter uma outra lista ai para resolver o problema, mas ainda não consegui enxergar como resolver.

Sabe como posso resolver isso?

Desde já agradeço.

Renan.

Se a nota é uma função de Disciplina X Questão:

digAlun.setNota(listaDisciplinas.get(y).getNota());  

Não adianta pegar nota sempre de uma disciplina sem considerar a questão associada. As notas deveriam vir de uma matriz de notas.

Outra dica que tenho é nunca reaproveitar um mesmo objeto, isso é uma abertura gigantesca para a entrada de bugs no teu sistema. Deixe o ciclo de vida dos teus objetos o mais curto possível. Instancie o digAlun dentro do for mais interno, apague o null e reveja esse reset.