Задать вопрос
@xxxSergeyxxx
В начале пути по изучению Java

Почему возникает ошибка: Exception in thread «main» java.lang.StringIndexOutOfBoundsException: Index -1 out of bounds for length 3?

Помогите, пожалуйста, не могу понять, из-за чего ошибка.
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                String slovo = sc.nextLine();
                long x = (slovo.length())-1;
                int b = (int)x;
                boolean y = x>=0;
                while (true) {
                    if (y) {
                        char a = slovo.charAt(b);
                        System.out.print(a);
                        b--;
                    } else {
                        sc.close();
                        break;
                    }
    }
}
}
  • Вопрос задан
  • 77 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
ZooMMaX
@ZooMMaX
Я так понимаю, что вы хотели печатать введённый текст наоборот.
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String slovo = sc.nextLine();
        int b = slovo.length() - 1; // Начинаем с последнего символа
        while (b >= 0) { // Идём до начала строки
            char a = slovo.charAt(b);
            System.out.print(a);
            b--;
        }
        sc.close(); // Закрываем сканер после завершения
    }
}


test = tset

Я так же поубирал лишние переменные, коих у Вас есть)

В Вашем случае boolean y
Не обновлялась от итерации к итерации. Вы так же использовали бесконечный цикл
while(true)
в котором производили вычитание b и получение символа по значению в переменной. У Java в строке по определению не может быть -1 символ, а бесконечный цикл доходит до того, что у Вас b становится равна -1. Вот тут вы и получали ошибку.

Правльный логический подход - сделать цикл с условием завершения (когда b < 0, завершить).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
xez
@xez Куратор тега Java
TL Junior Roo
Потому что у вас в бесконечном цикле b стремится к -бесконечности, следовательно тут: char a = slovo.charAt(b); возникает ошибка, когда b достигает значения -1
Ответ написан
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Ты думал что это функция которая исполняется каждый раз?

boolean y = x>=0;

А это просто переменная которая один раз присваивается и больше не меняется.
Вот поэтому цикл - бесконечный и приводит к ошибке индекса символа в строке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы