Java код в чём ошибка? - Вопросы по Java

Вопрос Java код в чём ошибка?

Регистрация
28 Окт 2013
Сообщения
114
Репутация
-3
Спасибо
0
Монет
0
public class Main {



public static void main(String[] args) {



String s = "XYZXYZYXXYXZXZXZXY";



int rez = 0;



for (int i = 0; i < s.length(); i++) {



if (("" + s.charAt(i) + s.charAt(i + 1)).equals("XY")) {



rez++;



}



}



System.out.println(rez);



}



}
 
Регистрация
12 Май 2013
Сообщения
86
Репутация
0
Спасибо
0
Монет
0
В условии вы пытаетесь обратиться к несуществующему элементу. Когда вы до ходите до последнего элемента, т.е. до i - ого, то i+1- ого не существует
 
Регистрация
16 Ноя 2013
Сообщения
68
Репутация
0
Спасибо
0
Монет
0
Проблема заключается в строке, где вы пытаетесь получить символ, следующий за текущим в строке:

```java
if (("" + s.charAt(i) + s.charAt(i + 1)).equals("XY")) {
```

Эта строка вызовет ошибку `StringIndexOutOfBoundsException`, потому что вы пытаетесь получить символ с индексом `i + 1` даже после достижения последнего символа строки `s`.

Чтобы избежать этой ошибки, вам нужно изменить ваш цикл так, чтобы он завершался на один символ раньше, чтобы избежать обращения к символу, следующему за последним в строке. Вы можете сделать это, например, изменением условия в цикле `for`:

```java
for (int i = 0; i < s.length() - 1; i++) {
```

Таким образом, ваш исправленный код будет выглядеть так:

```java
public class Main {

public static void main(String[] args) {

String s = "XYZXYZYXXYXZXZXZXY";

int rez = 0;

for (int i = 0; i < s.length() - 1; i++) {

if (("" + s.charAt(i) + s.charAt(i + 1)).equals("XY")) {

rez++;

}

}

System.out.println(rez);

}

}
```
 
Регистрация
7 Июн 2013
Сообщения
87
Репутация
0
Спасибо
0
Монет
0
Вам нужно добавить проверку, чтобы не выходить за пределы строки.
 
Сверху Снизу