Java索引数组越界异常
这个循环很奇怪 我在Java中运行了这个,它给出了一个索引越界异常。我在源代码中的任何地方都找不到Java索引数组越界异常,java,Java,这个循环很奇怪 我在Java中运行了这个,它给出了一个索引越界异常。我在源代码中的任何地方都找不到intl声明,我也弄不清楚它是什么,也弄不清楚以这种方式声明它是合法的 但这里的交易是,我不明白这段代码在做什么。对于任何大小的resultSIList,它都会给出一个ArrayIndexOutOfBoundsException for (int i = offset, l = Math.min(i + maxItemsInOnePage, totalSIs); i < l; i++){
intl
声明,我也弄不清楚它是什么,也弄不清楚以这种方式声明它是合法的
但这里的交易是,我不明白这段代码在做什么。对于任何大小的resultSIList
,它都会给出一个ArrayIndexOutOfBoundsException
for (int i = offset, l = Math.min(i + maxItemsInOnePage, totalSIs); i < l; i++){
resultSIList.get(i);
}
for(int i=offset,l=Math.min(i+maxItemsInOnePage,totalSIs);i
编辑:谢谢大家
下面是我用来理解整个循环的可运行代码。是的,这是一块可怕的垃圾
public class IndexOutOfBoundsTest {
public static void main(String args[]){
int offset = 50;
int maxItemsInOnePage = 50;
int totalSIs = 50;
final int buildThis = 15;
List resultSIList = new ArrayList();
// build list
for(int zz = 0; zz < buildThis; zz ++){
resultSIList.add("Hi " + zz);
}
try{
for (int i = offset,
d = Math.min(i + maxItemsInOnePage, totalSIs);
i < d; i++){
System.out.println(resultSIList.get(i));
}
}catch(Exception e){
e.printStackTrace();
}
}
}
公共类IndexOutOfBoundsTest{
公共静态void main(字符串参数[]){
整数偏移=50;
int maxItemsInOnePage=50;
总积分=50;
最终int buildThis=15;
List resultSIList=new ArrayList();
//构建列表
对于(intzz=0;zz
检查偏移量是否小于列表的大小 检查偏移量是否小于列表的大小 此代码将'ResultsList'从'offset'位置循环到'offset+maxItemsInOnePage'和'totalSIs'中的最小值
如果offset>0且totalSIs=resultSIList.size(),我认为它不会给您一个越界异常
在您的示例中,偏移量为50,列表大小仅为15。您必须检查偏移量是否小于列表大小 此代码将'ResultsList'从'offset'位置循环到'offset+maxItemsInOnePage'和'totalSIs'中的最小值 如果offset>0且totalSIs=resultSIList.size(),我认为它不会给您一个越界异常
在您的示例中,偏移量为50,列表大小仅为15。您必须检查偏移量是否小于列表大小 要获取更多信息,您可以在运行时添加一些日志记录:
System.out.println("offset: " + offset);
System.out.println("maxItemsInOnePage: " + maxItemsInOnePage);
System.out.println("totalSIs: " + totalSIs);
System.out.println("resultSIList.size(): " + resultSIList.size());
for (int i = offset, l = Math.min(i + maxItemsInOnePage, totalSIs); i < l; i++){
System.out.println("i: " + i);
resultSIList.get(i);
}
System.out.println(“偏移量:”+offset);
System.out.println(“maxItemsInOnePage:+maxItemsInOnePage”);
System.out.println(“totalSIs:+totalSIs”);
System.out.println(“resultSIList.size():”+resultSIList.size());
对于(int i=offset,l=Math.min(i+maxItemsInOnePage,totalSIs);i
运行这个程序应该会对你的问题有所帮助;最后一个打印的i超出了范围,通过分析前四个打印输出,您应该会发现您的问题。要获得更多信息,您可以通过添加一些日志来运行它:
System.out.println("offset: " + offset);
System.out.println("maxItemsInOnePage: " + maxItemsInOnePage);
System.out.println("totalSIs: " + totalSIs);
System.out.println("resultSIList.size(): " + resultSIList.size());
for (int i = offset, l = Math.min(i + maxItemsInOnePage, totalSIs); i < l; i++){
System.out.println("i: " + i);
resultSIList.get(i);
}
System.out.println(“偏移量:”+offset);
System.out.println(“maxItemsInOnePage:+maxItemsInOnePage”);
System.out.println(“totalSIs:+totalSIs”);
System.out.println(“resultSIList.size():”+resultSIList.size());
对于(int i=offset,l=Math.min(i+maxItemsInOnePage,totalSIs);i
运行这个程序应该会对你的问题有所帮助;最后一个被打印的i超出了范围,通过分析前四个打印输出,您应该发现您的问题。您应该始终检查索引i是否小于大小
for (int i = offset, l = Math.min(i + maxItemsInOnePage, totalSIs);
i < l && i < resultSIList.size ();
i++){
resultSIList.get(i);
}
for(int i=offset,l=Math.min(i+maxItemsInOnePage,totalSIs);
i
您应该始终检查索引i是否小于大小
for (int i = offset, l = Math.min(i + maxItemsInOnePage, totalSIs);
i < l && i < resultSIList.size ();
i++){
resultSIList.get(i);
}
for(int i=offset,l=Math.min(i+maxItemsInOnePage,totalSIs);
i
当且仅当总计
等于或小于结果列表
的大小时,它才能按预期工作。再次检查该值。以下是一些随机值的工作示例:
List<Integer> resultSIList = Arrays.asList(1,2,3,4,5,6,7,8);
int totalSIs = resultSIList.size();
int maxItemsInOnePage = 2;
int offset = 1;
for (int i = offset, l = Math.min(i + maxItemsInOnePage, totalSIs); i < l; i++){
resultSIList.get(i);
}
位于for循环后面,用于快速修复。当且仅当
totalSIs
等于或小于resultSIList
的大小时,它才能按预期工作。再次检查该值。以下是一些随机值的工作示例:
List<Integer> resultSIList = Arrays.asList(1,2,3,4,5,6,7,8);
int totalSIs = resultSIList.size();
int maxItemsInOnePage = 2;
int offset = 1;
for (int i = offset, l = Math.min(i + maxItemsInOnePage, totalSIs); i < l; i++){
resultSIList.get(i);
}
在for循环后面有一个快速修复方法。我有一个词要告诉你:调试器。逐步进行,查看行为如何与您的假设不匹配。您是否有一个负的
偏移量
?结果的大小是多少?该片段从偏移量
循环到数学.min(偏移量+最大项sinonepage,totalSIs)-1
。(初始化写得很糟糕,但据我所知它就是这么做的。)但这里的人怎么知道这些变量是什么?什么是resultSIList
等。?你必须发布所有相关的代码,否则没有人能帮你。也不应该使用“l”作为变量名。它看起来像1和I,使阅读代码变得非常困难。我有一个词要告诉你:调试器。逐步进行,查看行为如何与您的假设不匹配。您是否有一个负的偏移量
?结果的大小是多少?该片段从偏移量
循环到数学.min(偏移量+最大项sinonepage,totalSIs)-1
。(初始化写得很糟糕,但据我所知它就是这么做的。)但这里的人怎么知道这些变量是什么?什么是resultSIList
等。?你必须发布所有相关的代码,否则没有人能帮你。也不应该使用“l”作为变量名。它看起来像1和I,使读取代码变得非常困难。如果偏移量
大于或等于