Раздел Объекты в Java. Уровень 8, лекция 4.
Программа для хранения цвета точки на экране.
Создаем новый класс - это пока понятно
public class Point
{
public int x;
public int y;
public int color;
}
Далее сам код
class Solution
{
public static void printPoints(Point[] points) // тут создаем свой метод и в этом методе создаем переменную метода - массив points нового типа Point.
{
for (int i = 0; i < points.length; i++)
System.out.println("Цвет точки x=" + points[i].x + ", y=" + points[i].y + " " + points[i].color);
}
public static void main(String[] args)
{
Point[] data = new Point[100]; // тут создаем опять же массив дата нового типа Point на 100 "позиций" - это понятно
for (int i = 0; i < data.length; i++) - создаем цикл для перебора всех позиций в массиве дата
data[i] = new Point(); - вот эту строку не понимаю - каждому элементу массива i мы присваиваем .... ? что ??
printPoints(data); тут тоже понятно - вызываем ранее описанный метод printPoints и в переменную метода передаем ранее созданный и заполненный массив дата нового типа Point.
}
}
Buble76
7 уровень
Помогите понять назначение строки кода
Обсуждается
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #2322530
9 января 2021, 10:36
data[i] = new Point(); - вот эту строку не понимаю - каждому элементу массива i мы присваиваем .... ? что ??
ссылку на новый объект типа Point
0
Buble76
9 января 2021, 15:55
Хорошо, тогда еще вопрос - зачем ? У нас инициализирован массив дата типа Point величиной 100 позиций. Зачем каждому элементу данного массива мы присваиваем ссылку на новый объект типа Point ? Не программист ни разу ... поэтому не понимаю.
0
hidden #2322530
9 января 2021, 16:07
У нас инициализирован массив дата типа Point величиной 100 позиций
и что? каждый элемент заполняется автоматически null. для этого и делается присвоение каждого элемента новым объектом.
0
Buble76
9 января 2021, 17:09
Видно я тупороез. Не понимаю зачем. В новом же объекте типа Point не содержится же информация о том, что х = тому, у = иному а color = третьему. Для меня было бы понятно если было бы написано, первая итерация цикла - что data[1] = new Point(х=1,у=2,color=3) - мы поместили в ячейку 1 значения трех переменных 1,2,3, следующая итерация 2 - кладем следующие значения х,у,color. А тут получается что мы в ячейку i помещаем ссылку на новый объект класса Poinr, но данных в этом объекте нет. Зачем это делается ? Далее мы же вызываем метод printPoints() - он должен печатать значения. А их в моем понимании нету...
0
hidden #2322530
9 января 2021, 17:19
В новом же объекте типа Point не содержится же информация о том, что х = тому, у = иному а color = третьему.
содержится. в новом объекте, примитивные поля инициализируются значениями по умолчанию. ссылочные поля инициализируются null. в классе Point все поля это int, они по умолчанию будут инициализироваться нулями.
+1
Buble76
11 января 2021, 12:39
Я понимаю что если создать новый объект типа Point, то в автомате мы получим х,y и color с нулями. Я имел ввиду зачем это делать ? Смысл этого действия ? Бежать по массиву и присваивать 0. Я имел ввиду что если бы присваивались конкретные значения - ну типа мы их откуда-то получили и записываем для хранения в массив - тогда понятно. А мы бежим по массиву пишем в него 0 - вопрос - зачем ? В чем смысл данной операции ? У каждой же операции в программе должен быть смысл и общая логика происходящего и вот на этой строке я ее теряю - data[i] = new Point(); ...
0
Ksenia VolkovaJava Developer в DXCMaster
11 января 2021, 12:43
Вот если ты рисовать соберешься - ты возьмешь белый лист бумаги и начнешь что-то на нем изображать. Сам по себе белый лист никакого смысла не несет, но без него и рисовать не получится.
Вот и массив точек - это своего рода "белый лист" (ну, или пустой, только что созданный файл в пейнте).
+1
hidden #2322530
11 января 2021, 12:48полезный
здесь задача учебная.
тебе что бы выводить на экран точки, здесь ты создаёшь массив с элементами типа Point, но. пока ты не инициализируешь каждый элемент, массив автоматически заполняется null. (массив с элементами ссылочного типа автоматически заполняется null)
далее тебе надо вывести на экран этот самый массив:
а как ты будешь выводить на экран этот самый массив, если у тебя он заполнен null?
а у null нет ни полей ни методов. и значит тут будут исключения, программа завершится с ошибкой.
для этого и создаются объекты с полями, заполненными по умолчанию. просто чтобы были объекты, у которых есть x , y , color. к которым можно обратиться и вывести на экран. да это будут 0. но это учебная задача, тут важна отработка самого механизма (алгоритма), и реальность данных тут ни к чему. будут там значения 3, 5, 7, или же 0, 0, 0. для понимания алгоритма разницы нет.
+11
Buble76
11 января 2021, 14:24
Во, теперь дошло !! Спасибо !!
0