java.lang.IndexOutOfBoundsException: индекс: 4, размер: 4 - PullRequest
1 голос
/ 07 октября 2010

Как я могу это исправить 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);

Я знаю, почему я получаю ошибку, но я не уверенкак решить проблему.

Ответы [ 6 ]

12 голосов
/ 07 октября 2010

Проблема в том, что i+i часть в myTag.get(i+i). Это будет работать для i=0, но, как только i=1, вы получите исключение, поскольку вы добавили два элемента к myTag, но получаете доступ к третьему элементу (myTag.get(2)).

2 голосов
/ 07 октября 2010

Вы используете цикл for, перебирая String TagNum.Вам нужно только сказать: myTag.add(TagNum).

Представьте, что строковый TagNum состоит из 4 символов.Вы добавляете строку в список 4 раза, но когда вы достигаете i = 3, вы пытаетесь получить элемент в позиции 3 + 1, но в списке есть элементы от 0 до 3.

Также попробуйтезаменить BannerID на?и установите параметр для оператора соответственно.

2 голосов
/ 07 октября 2010

Что вы ожидаете от myTag.get(i + i)?

При первом прохождении цикла "i" равно нулю, и вы добавляете один элемент.Элемента 1 не будет, поэтому вызов вызовет исключение. Теперь, когда я на самом деле вижу то, что вы написали, произойдет сбой на второй итерации, а не на первой, как заметил бедный @Giu в своей статье "Теперь"удаленный ответ.Тем не менее, это странно, и я не знаю, чего вы пытаетесь достичь, вызывая .get() и даже не глядя на возвращаемое значение.

Вам действительно придется объяснить, что вы пытаетесьделать, потому что это не имеет никакого смысла, как написано.Это исключение в заголовке вопроса действительно пришло из этого кода, или вы отредактировали его часть при публикации?

edit - к сожалению, все увидели: «я +я "как" я + 1 ".Однако все еще не имеет смысла для меня.

1 голос
/ 07 октября 2010

Даже без проблем с get ваша программа в том виде, в котором она написана, прочитает результаты запроса, а затем для каждого CHARACTER в tagNum добавит экземпляр tagNum в ваш массив.Так, если tagNum, скажем, «ABC», массив будет содержать «ABC» три раза.Если tagNum равен «ABCD», он будет содержать «ABCD» четыре раза.Это не имеет большого смысла.

Я думаю, что вам нужно просто добавить tagNum в массив, определяя массив OUTSIDE цикла ResultSet.next.Примерно таквы пытаетесь сделать для этой части.)

Обновление

Предположим, у вас есть десять записей в таблице базы данных.После завершения вышеуказанного цикла массив должен быть заполнен.

Попробуйте что-то вроде этого:

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);
}

Это должно дать вам список всех тегов.Обратите внимание, что вы должны изучить список ПОСЛЕ окончания цикла (ResultSet).Внутри цикла у вас пока будут только прочитанные элементы.

Если вы все еще получаете только одно значение, убедитесь, что у вас есть более одной записи, возвращаемой из набора результатов.Например, запустите запрос вне Java-программы и посмотрите, сколько записей вы получите.

1 голос
/ 07 октября 2010

Это myTag.get(i + i); вызывает исключение.

Первый раз в цикле i равен 0, вы добавляете элемент в ArrayList и затем вызываете get(0+0), что хорошо.

На следующей итерации вы добавляете еще один элемент (всего 2 элемента в списке сейчас) и вызываете get(1+1), это вызывает исключение, так как у вас есть только 2 элементов и допустимый индекс 0 и 1 .

0 голосов
/ 19 июня 2017
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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...