@amalchikov

Где же ошибка в коде?

Консоль ругается: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:9
at Q.pop(Upr2.java:28)
at Upr2.main(Upr2.java:50)

В чем ошибка? Код:

class Q {
	
	int nloc, kloc, size;
	char ch[];
	
	Q(int sz){
		size=sz;
		kloc=0;
		ch=new char[size];
	}
	
	void push(char c){
	
		if (kloc==size) {
			System.out.println("Stek polon"); 
			return;}
		
		ch[nloc]=c;		
		kloc++;		
		
	}
	
	
	char pop(){
		if (kloc==0) {
			System.out.println("Stek pust"); return (char) 0;}
		else {
		char temp=ch[kloc];
		kloc--;
		return temp;
		}
	}
}
	
	
	
	class Upr2{
	public static void main(String args[]){
	int r=9;
	char choose, sym;
	sym='A';
	choose='y';
	Q que=new Q(r);
	for (int i=0; i<r; i++){
		que.push(sym);
		sym++;
	}
	
	for (int i=0; i<r-1; i++){
		System.out.println(que.pop());
	}
	
	
	}
}
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
GavriKos
@GavriKos
Выход за пределы массива в 28 строке. Нумерация элементов начинается с нуля, не с единицы. Отладчик в руки - и вперед.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
GavriKos прав. Действительно, выход за границы массива, в данном случае - за верхнюю (size). У вас есть условие в пуше: if (kloc==size). Если сразу после этого сделать поп, то будет выход за границы массива. В джаве массивы индексируются от 0 до size-1.
Кстати, условие в поп о size == 0 логически неверное. У вас останется 1 элемент, который вы потеряете.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект