2015-06-09 61 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

相關問題