类似java.lang.IllegalArgumentException的异常:fromIndex(XXX)>;toIndex(XX)

类似java.lang.IllegalArgumentException的异常:fromIndex(XXX)>;toIndex(XX),java,Java,我有一个带分页的jqgrid。用户可以在页面之间自行向neviaget输入数据 如上例所示,如果用户在第199行输入的可用页面数超过了可用页面数,则会出现错误。如何解决这个问题 if(noOfRows != null && !recipeList.isEmpty()) if ((noOfRows * pageNo) < recipeList.size()) { recipeList = recipeList.subList((noOf

我有一个带分页的jqgrid。用户可以在页面之间自行向neviaget输入数据

如上例所示,如果用户在第199行输入的可用页面数超过了可用页面数,则会出现错误。如何解决这个问题

if(noOfRows != null && !recipeList.isEmpty())
        if ((noOfRows * pageNo) < recipeList.size()) {
            recipeList = recipeList.subList((noOfRows * (pageNo - 1)),
                    (noOfRows * pageNo));
        } else {
            recipeList = recipeList.subList((noOfRows * (pageNo - 1)), 
                    recipeList.size());  //line 199:  giving error
        }
    for (Recipe recp : recipeList) {
             ..............
             ..............
if(noOfRows!=null&&!recipeList.isEmpty())
如果((noOfRows*pageNo)
我试图更改代码的else部分,其中第199行:

  int totalCustomPagesNums=noOfRows * (pageNo - 1); 
        int firstIndex=totalCustomPagesNums < recipeIdList.size()?totalCustomPagesNums:1;
        recipeList = recipeList.subList(firstIndex,
         recipeList.size());
int totalcustompagesums=noOfRows*(第1页);
int firstIndex=totalCustomPagesNums
我将其简化为:

  • 计算下限,下限必须至少为0,最多为
    recipeList.size()
  • 计算出独占上限,该上限必须至少为0,最多为
    recipeList.size()
  • 以子列表为例
因此:


现在您肯定知道,
0我会将其简化为:

  • 计算下限,下限必须至少为0,最多为
    recipeList.size()
  • 计算出独占上限,该上限必须至少为0,最多为
    recipeList.size()
  • 以子列表为例
因此:


现在您可以肯定地知道,
0您正在尝试创建一个子列表,该子列表从索引100开始,到索引72结束。由于列表的开头在末尾之后,因此您将获得IllegalArgumentException


如果您试图创建一个子列表,该子列表从索引100开始,到索引72结束。由于列表的开头在末尾之后,因此您将获得IllegalArgumentException


如果
(noOfRows*pageNo

,请添加另一个复选框,我会在代码的开头添加两个额外的块

if (pageNo < 1) {
    pageNo = 1;
}

if ((pageNo - 1) * noOfRows >= recipeList.size()) {
    pageNo = 1 + ( recipeList.size() - 1 ) / noOfRows;
}
if(页码<1){
pageNo=1;
}
如果((pageNo-1)*noOfRows>=recipeList.size()){
pageNo=1+(recipeList.size()-1)/noOfRows;
}
如果页码太低,第一个块将修复问题。如果页码太高,第二个块将修复问题


第二个块开头的检查是确保要显示的第一个配方的索引(即
(pageNo-1)*noOfRows
)在
recipeList
的范围内。内部的赋值将
pageNo
设置为最大值,该值为真。

我将在代码开头添加两个额外的块

if (pageNo < 1) {
    pageNo = 1;
}

if ((pageNo - 1) * noOfRows >= recipeList.size()) {
    pageNo = 1 + ( recipeList.size() - 1 ) / noOfRows;
}
if(页码<1){
pageNo=1;
}
如果((pageNo-1)*noOfRows>=recipeList.size()){
pageNo=1+(recipeList.size()-1)/noOfRows;
}
如果页码太低,第一个块将修复问题。如果页码太高,第二个块将修复问题


第二个块开头的检查是确保要显示的第一个配方的索引(即
(pageNo-1)*noOfRows
)在
recipeList
的范围内。内部的赋值将
pageNo
设置为该值为真的最高值。

通过检查输入的数字是否有效。如果
(noOfRows*(pageNo-1))>recipeList.size()
,这将是您的problem@JBNizet是的,很好,我想我知道。但问题是怎么做?我在上面试过,但没有work@Stewart是的,这就是问题所在。首先告诉我们用户输入的内容。以及所有这些变量是什么。如果我正确阅读了您的问题,您需要
If(通过检查输入的数字是否有效来输入数字。如果
(noOfRows*(pageNo-1))>recipeList.size()
,这将是您的problem@JBNizet是的,很好,我想我知道。但问题是怎么做?我在上面试过,但没有work@Stewart是的,这就是问题所在。首先告诉我们用户输入的内容。以及所有这些变量是什么。如果我正确阅读了您的问题,您需要
If(enteredNumber@Sundara:我的代码不会因此中断。它将显示一个空页面,但不会中断。您将同时获得
start
end
作为
recipeList.size()
。要我把你的代码放在其他部分吗?@Sundara:不,我的代码会取代你的整个if/else。你是说从我的第一行开始到第199行(正如我在上面的问题代码中指定的那样)?您的代码替换了它?@Sundara:我的代码不会在这上面中断。它将显示一个空页面,但不会中断。您将以
start
end
成为
recipeList.size()
。要我把你的代码放在其他部分吗?@Sundara:不,我的代码替换了你的整个if/else。你的意思是从我的第一行开始到第199行(正如我在上述问题代码中指定的那样)?你的代码替换了那个?