Estou desenvolvendo um questionário online em JSP, onde, ao usuário seleciona o radio de cada questão a ser validada. Exemplo: um questionário de 25 questões, se o usuário chegar na 25 e clicar na anterior 24 e da um próximo para a 25, gera o erro java.lang.IndexOutOfBoundsException: Index: 25, Size: 25. Estava pesquisando na Internet e encontrei que este erro pode ocorrer, se um método tenta acessar um endereço de memória em um array que não existe, e ou já chegou em seu limite.
Trecho da classe Exam.class que o sistema acusa o erro: //Configuração Funciona, porem, da erro, se o usuário volta na ultima questões do exame e clicar na posterior
for(int i=0;i<taken-1;i++){
System.out.println("i ExamController: "+i+ "taken: "+taken);
//o erro ocorre aqui!!!!
if((userSelectionsList.get(i)-1)==correctAnswersList.get(i)){
totalCorrect++;
System.out.println("totalCorrect ExamController: "+totalCorrect);
}
}
Trecho do código que chama o método calcularResultado: /O exame será finalizado quando o usuário finalizar ou quando o limite de tempo para o exame é longo./
else if("Finish Exam".equals(action)||( minute==0 && second==0))
{ finish=true;
/*Submetendo o Exame e Avaliação Resultado Exame. Quando o usuário clica no botão Concluir, ExamController
*chama o método calculateResult () passando o objeto Exame, calculateResult ()*/
int result=exam.calculateResult(exam,exam.questionList.size());
request.setAttribute("result",result);
request.getRequestDispatcher("/jsps/result.jsp").forward(request,response);
}
Erro no console:
Número pergunta 0 recuperado Número pergunta 1 recuperado Número pergunta 2 recuperado Número pergunta 3 recuperado Número pergunta 4 recuperado Número pergunta 5 recuperado Número pergunta 6 recuperado Número pergunta 7 recuperado Número pergunta 8 recuperado Número pergunta 9 recuperado Número pergunta 10 recuperado Número pergunta 11 recuperado Número pergunta 12 recuperado Número pergunta 13 recuperado Número pergunta 14 recuperado Número pergunta 15 recuperado Número pergunta 16 recuperado Número pergunta 17 recuperado Número pergunta 18 recuperado Número pergunta 19 recuperado Número pergunta 20 recuperado Número pergunta 21 recuperado Número pergunta 22 recuperado Número pergunta 23 recuperado Número pergunta 24 recuperado Você clicou Botão Anterior Número pergunta 23 recuperado Número pergunta 24 recuperado Você clicou Botão Anterior Número pergunta 23 recuperado Você clicou Botão Anterior Número pergunta 22 recuperado Número pergunta 23 recuperado Número pergunta 24 recuperado
i ExamController: 0taken: 32 totalCorrect ExamController: 1 i ExamController: 1taken: 32 i ExamController: 2taken: 32 i ExamController: 3taken: 32 i ExamController: 4taken: 32 i ExamController: 5taken: 32 i ExamController: 6taken: 32 i ExamController: 7taken: 32 i ExamController: 8taken: 32 i ExamController: 9taken: 32 i ExamController: 10taken: 32 i ExamController: 11taken: 32 totalCorrect ExamController: 2 i ExamController: 12taken: 32 totalCorrect ExamController: 3 i ExamController: 13taken: 32 i ExamController: 14taken: 32 i ExamController: 15taken: 32 i ExamController: 16taken: 32 i ExamController: 17taken: 32 i ExamController: 18taken: 32 i ExamController: 19taken: 32 i ExamController: 20taken: 32
jun 17, 2016 5:52:48 PM org.apache.catalina.core.StandardWrapperValve invoke GRAVE: Servlet.service() for servlet [br.com.tkcsapcd.quiz.controller.ExamController] in context with path [/Tkcsapcd_cadastros] threw exception java.lang.IndexOutOfBoundsException: Index: 25, Size: 25 at java.util.ArrayList.rangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at br.com.tkcsapcd.quizz.Exam.calculateResult(Exam.java:128) at br.com.tkcsapcd.quiz.controller.ExamController.doPost(ExamController.java:127) at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
Alguém com experiência poderia me ajudar, por favor! Obrigado!