当我的其他人阻止它时,为什么我会得到IndexOutOfBoundsException?

时间:2015-06-09 11:55:28

标签: scala exception playframework

我正在进行某种测验,并有一个问题和答案列表,通过控制器传输到我的视图类。人们可以在页面上提问和回答问题,然后我的系统会“收集”这些问题,以便从中进行测验。

如果您是第一个启动该计划/测验的人,则问题列表为空。因此,我想检查带有if / else子句的空测验,if-case似乎工作正常,但是else-case抛出IndexOutOfBoundsException,我不明白为什么。我认为当问题列表为空时不会使用else-part,因此不应该抛出异常。应该....

查看课程

@(questionList: List[Question], answerList: List[Answer], answerRadioForm: Form[Answer])

@if(questionList.length == 0){
    No questions yet!
}

else {
<!-- As only the highest ranked question gets put into the List, there is only one entry on first place -->
<b>@questionList.get(0).questionText</b>

    @for(question <- questionList)  {
        @question.questionText - @question.ownerID <br>
    }
} 

错误:

[IndexOutOfBoundsException: Index: 0, Size: 0]
49          <b>"""),_display_(/*27.8*/questionList/*27.20*/.get(0).questionText),format.raw/*27.40*/("""</b>

那么,我在这里错过了什么?

2 个答案:

答案 0 :(得分:5)

我找到了一个解决方案,尽管回答你自己的问题是不好的做法,我已经搜索了几个小时,也许我的回答可以帮助其他人:

if / else。

之间不能有返回/换行符

是否有效:

@if(questionList.length == 0){
    No questions yet!
}

else { ...

<强>使用:

@if(questionList.length == 0){
    No questions yet!
} else {

编辑:由于@if(questionList.length > 0){也可以正常工作,可以防止意外插入换行符,并且更容易阅读和理解,我将使用此代替其他内容。

答案 1 :(得分:0)

首先,您的代码是否已编译,因为List上没有get方法。您可以改为使用list.headOption

好吧,我可以使用questionList(0)

另一种解决方案。

@questionList.headOption.map(q => <b>{q.text}</b>).getOrElse("No questions yet!")
@for(question <- questionList)  {
    @question.text - @question.ownerId <br>
}