#java #arrays #class #object
#java #массивы #класс #объект
Вопрос:
Я создал один класс для своего объекта:
public class circles {
int coor_x;
int coor_y;
int ray;
public circles(int coor_x, int coor_y, int ray) {
this.coor_x=coor_x;
this.coor_y = coor_y;
this.ray =ray ;
}
public int getCoor_x() {
return coor_x;
}
public int getCoor_y() {
return coor_y;
}
public int getRay() {
return ray;
}
public void setCoor_x(int coor_x){
this.coor_x=coor_x;
}
public void setCoor_y(int coor_y){
this.coor_y=coor_y;
}
public void setRay(int ray){
this.ray=ray;
}
}
Но когда я обычно создаю из него массив и заполняю его for , с помощью этого кода:
int coor_x=2;
int coor_y=2;
int ray=2;
int i = 0;
circles circles_test[]=new circles[10];
for(i=0; i<=circles.length;){
circles_test[i]=new circles(coor_x, coor_y, ray i); //line 30
System.out.println("Ray of circles: " circles_test[i].getRay());
i ;
}
он работает, но с ошибками:
Исключение в потоке «main» java.lang.Исключение ArrayIndexOutOfBoundsException: 10
в circlesObjectCreator.main(circlesObjectCreator.java:30)
Результат Java: 1
Что я делаю не так? Лучше, почему это так? Пожалуйста, помогите и спасибо.
Комментарии:
1. Попробуйте
for(i=0; i<circles.length;)
Ответ №1:
Вы обращаетесь к массиву с 10 элементами, индексируемыми 0-9, с индексом, идущим от 0 до длины массива, 10, из-за i <= circles.length
. Вы хотите использовать i < circles.length
.
Комментарии:
1. Спасибо всем за быстрые ответы.. Какой позор для меня.
Ответ №2:
Ваш for
цикл проверяет значение circles.length
, что бы это ни было, но ваш массив вызывается circles_test
.Кроме того, вы должны проверить с помощью сравнения less-than ( <
), потому что массивы основаны на нуле. (Длина — это не самый высокий индекс, доступный в массиве, это количество элементов в массиве.)
Ответ №3:
В вашем коде есть несколько ошибок.
Во-первых, лучшим именем для класса circles было бы Circle . Классы Java обычно пишутся с большой буквы и в единственном числе, а не во множественном.
Далее, ваш цикл for заходит слишком далеко. Ваш массив содержит 10 элементов, но массивы в Java индексируются с нулевым индексом. Это означает, что первый элемент в circle_test есть circles_test[0]
, второй есть circles_test[1]
и так далее. Но circles_test[10]
не существует, потому что это будет 11-й элемент в вашем массиве размером 10. Это вызывает исключение ArrayIndexOutOfBoundsException, потому что вы пытаетесь использовать индекс 10, который слишком велик. Это происходит потому, что вы написали это в своем цикле for:
i <= circles_test.length
Это означает, что i
это будет проходить весь путь до и включая circles_test.length
. Но мы не хотим, чтобы он доходил до 10, потому что этот индекс выходит за рамки, поэтому удалите =
знак.
Далее, лучший способ написать цикл for — включить оператор increment в цикл следующим образом:
for(i=0; i < circles.length; i ) {
}
Циклы For работают следующим образом:
for(first_statement; second_statement; third_statement)
first_statement
произойдет один раз в начале цикла. second_statement
будет проверяться один раз каждый раз в начале одного повторения цикла, и если оно равно false, цикл завершится. third_statement
будет происходить каждый раз в конце цикла.
Если у вас есть еще какие-либо вопросы, не стесняйтесь спрашивать.
Комментарии:
1. Объявление кругов носит чисто стилистический характер. Это может вызвать у вас недовольство, но, безусловно, не является неправильным.
2. Достаточно справедливо, но я сказал «лучше».
3. Нет, вы сказали: «вы неправильно объявляете свой массив кругов».
circles c[] = new circles[10]
является совершенно допустимой Java.
Ответ №4:
Вы создали массив из 10 элементов, 0-9. Но ваш цикл пытается получить доступ к элементам 0-10.
Используйте i<circles.length
, чтобы не пытаться получить доступ к несуществующему элементу 10.
Ответ №5:
Длина Java-массива является эксклюзивной, это означает:
length 0
= Нет объектов
length 1
= один объект в позиции [0] массива
length 2
= два объекта в позициях [0] [1]
Итак, вам нужно сделать условие вашего цикла эксклюзивным i<circles.length
Кроме того, в качестве плюса, for
блок может инициализировать переменные и увеличивать их:
for (int i = 0; i < circles.length; i )