Успявам да разпечатам матрицата, но не и в патерна, който се изисква. Създадох допълнителна променлива result, която да се иницира на нов ред и да е с 1 по-голямо от последната предишна, но не се получава.
Забележи подсказката в условието: Use two nested loops.
Отне ми доста време ровене и аз да го разбера:
Започваме с генералния for loop - точно както си го направил.
В него единствено инициализираме int j, който ще ползваме по-късно, а най-накрая (преди затварянето на loop-a) слагаме println, което ще ни създаде бъдещите редове, както и ти си направил.
Първи nested for loop:
for (j = i; j <= N; j++)
В него принтираме с print (j + " ").
Дотук при написване на 3, получаваме:
1 2 3
2 3
3
Сега задачата е да запълним този празен триъгълник с нарастващи цифри на въведеното число.
Втори nested for loop:
for(int k = i-1; k >= 1; k–) *Edit: На k са два минуса, просто не се показват добре
В него имаме пак print (j + " "), а под него имаме j++;
Така при написване на 3, получаваме:
1 2 3 (Вторият for loop не се активира все още, защото k = i-1 = 0)
2 3 4 (Генералният for loop е вече на i = 2; -> вторият nested loop се активира веднъж и добавя N+1 = 4. Тази стойност се взима от int j, който инициализирахме по-рано. Вероятно** защото след последния трети iteration на първия nested loop, increment expression-а j++ се активира като финална стъпка и макар nested loop-a да прекъсва, защото j <= N вече не е валиден, то variable-a int j от генералния loop се обновява още веднъж.)
3 4 5 (Първият nested loop се активира вече веднъж, а вторият два пъти, като j++ вече ни влиза на помощ.)
Лично аз намерих много примери на подобни матрици в Интернет, чиято логика вечно беше недоизказана и просто приета за даденост. Хубаво е човек на този етап да има достъп до по-подробни обяснения, за да може умът да свикне да размишлява по този начин - заради което и си позволявам по-обширното ми разяснение.