Как работает этот код
Всем привет, изучаю java с книжги, такой вот код, программа выводит 25 1. Самостоятельно допереть у меня не получается, не понимаю как работает цикл, объясните как оно рабоатет.
package test214;
public class Mix4 {
int counter = 0;
public static void main (String []args) {
int count = 0;
Mix4 [] m4a = new Mix4[20];
int x = 0;
while (x<20) {
m4a[x]= new Mix4();
m4a[x].counter = m4a[x].counter + 1;
count = count +1;
count = count + m4a[x].maybeNew(x);
x=x+1;
}
System.out.println(count + " " +m4a[1].counter);
}
public int maybeNew(int index) {
if(index<5) {
Mix4 m4 = new Mix4();
m4.counter= m4.counter+1;
return 1;
}
return 0 ;
}
}
Сейчас опишу , то что я понимаю...
Mix4 [] m4a = new Mix4[20];
создаем массив размером 20 с именем m4a.
while (x<20) {
пока x<20, в массиве в элементе по индексу х создается новый Mix4 и присваеваем его значение.
m4a[x].counter = m4a[x].counter + 1; для каждого элемента массива складываем// 0+1//1+1// 2+1 и так далее .
count = count + m4a[x].maybeNew(x); вот , с этого момента я уже плыву, count присваивает значение count + m4a[x].maybeNew(x). самое интересное что я не понимаю как этот метод работает maybeNew.
пока index< 5 , как понять чему равно индекс, сколько раз будет выполнятся if
мы создаем ссылку экземпляра m4 . Mix4 m4 = new Mix4();
m4.counter = m4.counter +1 ; 0+1// 1+1// и так далее
return 1;
return 0;
И по поводу return, в моем предстовление метод return возвращает значение, сначало он возврщает значение 1, потом 0.
какой смысл возвращать 0,смысл тогда этого метода.
как видите плыву очень сильно..
Ответы (1 шт):
Метод maybeNew(int index) работает просто - если index < 5 возвращает 1, иначе - возвращает 0. Все остальные операции делаются над локальными переменными и не имеют значения за пределами функции. Этот метод можно переписать так:
public int maybeNew(int index) {
if(index<5)
return 1;
return 0 ;
}
А вообще код очень искусственный. Функция maybeNew() не использует в работе данных конкретных экземпляров класса, её можно сделать static и вызывать не от объекта, а от имени класса
count = count + Mix4.maybeNew(x);
В общем, если коротко:
- создается массив ссылок
m4a - цикл на 20 итераций. На каждой итерации:
- создается объект класса
Mix4и назначается ссылке в массиве - внутри созданного элемента увеличивается на единицу
counter. Всё, больше операций с объектами нет - увеличивается на единицу локальная в
main()переменнаяcount - если итерация меньше 5, то локальная переменная
countещё раз увеличивается на единицу, возвращаемую функциейmaybeNew() - после цикла выводится на печать значение локальной переменной
countи значение поляcounterвторого объекта из массива.