2015-06-09 69 views
0

我正在进行某种测验,并有一系列问题和答案,通过控制器传递给我的视图类。人们可以在一个页面上提问并回答问题,然后我的系统会“收集”这些问题,以便从中进行测验。当我的其他人应该阻止它时,为什么会出现IndexOutOfBoundsException?

如果您是第一个启动程序/测验的人,则问题列表为空。因此,我想用if/else子句检查一个空的测验,如果case似乎工作正常,但其他情况下抛出一个IndexOutOfBoundsException,我不明白为什么。我认为在问题列表为空时不会使用else部分,因此不应引发异常。如若....

视图类:

@(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> 

所以,我在这里失踪?

+0

只要注意:我可以使用@if(questionList> 0)...'然后我的代码工作,但我不明白为什么其他人不会做同样的事情。有任何想法吗? – hamena314

+0

你的代码看起来应该可以工作 - 我想知道'=='操作符是否会出现一个错误的否定,可能是由于类型? (也就是说,'questionList.length'与文字'0'是不同的类型,所以它们是平凡的不相等的)。通常,我更喜欢使用@if(questionList.isEmpty)或类似的方法来避免这样的问题。 –

+0

我用'@if(questionList.isEmpty)'测试了它,没有改变。但是,在尝试这个时,我发现解决方案:if-bracket和else之间不能有return/newline ......所以感谢提示! – hamena314

回答

5

我已经找到了解决办法,并altough这是不好的做法来回答自己的问题,我搜索了几个小时,这,也许我的回答可以帮助别人:

不能有回报/ if/else之间的换行符。

是否工作:

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

else { ... 

作品:

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

编辑:由于@if(questionList.length > 0){做的工作还,反对accidentically插入新行稳定,是有点更容易阅读和明白,我会用这个而不是别的。

+5

回答你自己的问题并不是一个坏习惯。 http://stackoverflow.com/help/self-answer –

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> 
} 
+0

'@ questionList.get(0).questionText'确实有效。 – hamena314

+0

我很惊讶,不适合我。你使用的是什么版本的Scala和playframework? – Adi

+0

我正在使用play framework 2.3.8。它有它自己的Scala,所以我不知道Scala究竟是哪个版本。你能发布你的代码吗?也许在一个pastebin或类似的东西?有趣的是,看看这在不同版本中是否有所不同。 – hamena314

相关问题