如何解决此问题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);
我知道为什么我会收到错误,但我不确定如何解决这个问题。
答案 0 :(得分:12)
问题是i+i
中的myTag.get(i+i)
部分。它适用于i=0
,但只要i=1
,您就会抛出异常,因为您已向myTag
添加了两个元素,但正在访问第三个元素( myTag.get(2)
)。
答案 1 :(得分:2)
您希望myTag.get(i + i)
做什么?
第一次循环,“i”为零,你添加一个元素。没有元素1,所以调用会抛出一个异常。现在我实际上看到了你写的东西,它会在第二次迭代时失败,而不是第一次迭代,因为可怜的@Giu在他的现在删除的答案。不过,这很奇怪,我不知道你要通过调用.get()
来完成什么,甚至不知道返回值。
你真的必须解释你正在尝试做什么,因为这没有任何意义。问题标题中的例外真的是来自该代码,还是在发布时编辑了部分内容?
编辑 - 哎呀完全看到“i + i”为“i + 1”。但是对我来说仍然没有意义。
答案 2 :(得分:2)
通过迭代String TagNum,您正在使用for循环。您只需要说:myTag.add(TagNum)
。
想象一下String TagNum有4个字符。您将String添加到列表中4次,但是当您到达i = 3时,您尝试检索位置3 + 1处的元素,但该列表包含从0到3的元素。
另外,尝试用一个?替换BannerID?并相应地将参数设置为语句。
答案 3 :(得分:1)
此myTag.get(i + i);
导致异常。
第一次循环i
是0
,你将一个项添加到ArrayList中,然后调用get(0+0)
,这很好。
在下一次迭代中,您添加另一个元素(现在列表中总共有2个元素)并调用get(1+1)
,这会导致异常,因为您只有2
个元素且有效索引为{{1 }和0
。
答案 4 :(得分:1)
即使没有get的问题,你编写的程序也会读取查询结果,然后对于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程序之外运行查询,看看你得到了多少记录。
答案 5 :(得分:0)
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());
}