![](/img/trans.png)
[英]java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
[英]java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
如何解决此OutOfBoundsException
?
这是我正在使用的代码:
ResultSet rsTagCheck = stmt.executeQuery(
"SELECT PARKING.XKRPRMT.XKRPRMT_PIDM, PARKING.XKRPRMT.XKRPRMT_STATUS, PARKING.XKRPRMT.XKRPRMT_EXPIRE_YR, PARKING.XKRPRMT.XKRPRMT_TAG FROM PARKING.XKRPRMT WHERE XKRPRMT_PIDM ='" + BannerID + "'");
while (rsTagCheck.next()){
String TagNum = rsTagCheck.getString("XKRPRMT_TAG");
ArrayList<String> myTag = new ArrayList<String>();
for (int i = 0; i < TagNum.length(); i++){
myTag.add(TagNum);
myTag.get(i + i);
我有点知道为什么会出错,但是我不确定如何解决该问题。
问题是myTag.get(i+i)
的i+i
部分。 它适用于i=0
,但是一旦i=1
,您就会引发异常,因为您已经向myTag
添加了两个元素,但是正在访问第三个元素( myTag.get(2)
)。
您希望myTag.get(i + i)
能做什么?
第一次循环,“ i”为零,您添加了一个元素。
不会有元素1,因此调用将引发异常。
既然我已经真正看到您的内容,它就会在第二次迭代中失败,而不是第一次迭代,就像可怜的@Giu在他现在删除的答案中指出的那样。 不过,这很奇怪,我不知道您要通过调用.get()
甚至不查看返回值来尝试完成什么。
您确实必须解释您要做什么,因为按照书面说明,这实际上没有任何意义。 问题标题中的异常是否真的源于该代码,还是您在发布时将其一部分进行了编辑?
编辑 -哎呀,他们完全将“ i + i”视为“ i + 1”。 但是对我来说仍然没有意义。
您正在通过迭代String TagNum使用for循环。 您只需要说: myTag.add(TagNum)
。
假设String TagNum有4个字符。 您将String添加到列表中4次,但是当达到i = 3时,您尝试检索位置3 + 1处的元素,但是列表中的元素从0到3。
另外,尝试用?替换BannerID。 并相应地将参数设置为语句。
这个myTag.get(i + i);
导致异常。
第一次在循环i
是0
,您将一个项目添加到ArrayList中,然后调用get(0+0)
很好。
在下一次迭代中,添加另一个元素(现在列表中共有2个元素)并调用get(1+1)
,这将导致异常,因为只有2
元素且有效索引为0
和1
。
即使没有问题,编写的程序也会读取查询的结果,然后对于tagNum中的每个CHARACTER,它将为您的数组添加一个tagNum实例。 因此,如果tagNum是“ ABC”,则该数组最终将包含“ ABC”三次。 如果tagNum为“ ABCD”,它将四次包含“ ABCD”。 这没有多大意义。
我认为您想要的只是将tagNum添加到数组,定义ResultSet.next循环的数组OUTSIDE。 可能是这样的:
ArrayList<String> myTag = new ArrayList<String>();
ResultSet rsTagCheck = stmt.executeQuery(
"SELECT PARKING.XKRPRMT.XKRPRMT_PIDM, PARKING.XKRPRMT.XKRPRMT_STATUS, PARKING.XKRPRMT.XKRPRMT_EXPIRE_YR, PARKING.XKRPRMT.XKRPRMT_TAG FROM PARKING.XKRPRMT WHERE XKRPRMT_PIDM ='" + BannerID + "'");
while (rsTagCheck.next()){
String TagNum = rsTagCheck.getString("XKRPRMT_TAG");
myTag.add(TagNum);
}
(当然,这不会使用查询中的任何其他数据,我也不知道您要做什么,但是我相信这就是您要为此做的工作。)
更新资料
假设您的数据库表中有十条记录。 完成上述循环后,应填充阵列。
尝试这样的事情:
ArrayList<String> myTag = new ArrayList<String>();
ResultSet rsTagCheck = stmt.executeQuery(
"SELECT PARKING.XKRPRMT.XKRPRMT_PIDM, PARKING.XKRPRMT.XKRPRMT_STATUS, PARKING.XKRPRMT.XKRPRMT_EXPIRE_YR, PARKING.XKRPRMT.XKRPRMT_TAG FROM PARKING.XKRPRMT WHERE XKRPRMT_PIDM ='" + BannerID + "'");
while (rsTagCheck.next()){
String TagNum = rsTagCheck.getString("XKRPRMT_TAG");
myTag.add(TagNum);
}
for (String tag : myTag)
{
System.out.println(tag);
}
那应该给你所有标签的清单。 注意,您必须在while(ResultSet)循环结束后检查List。 在循环内部,您到目前为止只能读取元素。
如果您仍然只获得一个值,请确保从结果集中返回一条记录。 像在Java程序外部运行查询,然后查看获得的记录数。
List<WebElement> div1=driver.findElements(By.xpath(".//*[@class='art_title']"));
for(int i=0;i<=div1.size();i++)
{
System.out.println(div1.get(i).getText());
Thread.sleep(1000);
}
Instead of the above format I changed it into this format :
List<WebElement> div1=driver.findElements(By.xpath(".//*[@class='art_title']"));
String[] abc = new String[div1.size()];
int i= 0;
for (WebElement e : div1)
{
abc[i] = e.getText();
i++;
System.out.println(e.getText());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.