Java-массив с ошибкой моего класса

#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 )