Профил
Loading...
svetoslav_halachev avatar svetoslav_halachev 1 Точки

Задача "триъгълник от 55 звездички"

public class LiveDemo {
    public static void main(String[] args) {
        for (int row = 1; row <= 10; row++) {
            for (int i = 0; i <= row; i++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

Извинявам се за тъпия въпрос, но някой може ли да ми обясни с по-прости думи, така написана задачата защо се получат 10 реда, но на първия ред са 2 звездички, а на 10-я са 11. Най-вече защо на първия ред са 2 звездички. Ще съм благодарен, ако някой реши да обясни



Тагове:
0
Programming Basics with Java
BalioFVFX avatar BalioFVFX 40 Точки
Best Answer

Здравей! Ето кратко обяснение, защо в началото имаш 2 звездички:


1. Първият цикъл инициализира row със стойност 1.

2. Вътрешният цикъл (colвинаги започва от 0 и се върти до стойността на row включително. (Която в момента е 1, тоест получаваш 2 звездички защото се върти от 0 до включително.

3. Печаташ нов ред.
4. Стойността на row се увеличава с 1, става 2

5. Повтаряш стъпка 2 и 3 отново, този път обаче печаташ от 0 до 2 включително, тоест ще получиш 3 звездички.

0
03/06/2018 17:29:00
svetoslav_halachev avatar svetoslav_halachev 1 Точки

т.е при първото завъртане вътрешния цикъл увеличава стойноста на row с 1 , в смисъл вътрешния цикъл прави допълнително завъртане защото започва от 0. 

Тогава защо при решение на задача по този начин по-долу , който е правилен на първия ред получаваме 1 звездичка. Тук вътрешния цикъл започва от 0 или от 1?

for (int row = 1; row <= 10; row++) {
    for (int i = 1; i <= row; i++) { 

А при решени на задачата:

for (int row = 1; row <= 10; row++) {
    for (int i = 0; i < row; i++) {

което също е правилно пак на първия ред си получаваме 1 звездичка. Тук пак започваме от 0 предполагам. 

Само при решение на задачата така:

for (int row = 1; row <= 10; row++) {
    for (int i = 0; i <= row; i++) {

получаваме 2 звездички на първи ред и съответно на 10-ти ред имаме 11 звездички, но затова че са 11 е ясно как става.

0
03/06/2018 21:45:50
zonax avatar zonax 4 Точки

Преди да дам това обяснение, искам да Ви кажа, че съм нов и го разбирам за себе си и ме извинете ако не мога да Ви го обясня добре. Сигурно ще има някой, който ще Ви го обясни доста по-добре. Колегато по-горе обясни много добре защо се получават 2 звездички, а по пътя на логиката, лесно разбирате защо са 11. Щом е инициализиран ред 1, а вътрешния цикъл започва от 0, то звездичката от ред 0 отива към ред 1, защото в този случай имаме =, което означава, че обхваща и сегашния ред. По същият път, при ред 10, печатате от 0 до 10 включително, което води до 11 звездички.(Мисля, че ако на един лист хартия си напишете числата от 0 до 11, ще разберете по-добре защо са 11 звездички накрая.) При първия Ви пример и двата цикъла започват от 1 (row = 1; int = 1), а не от 0 и краят им е при 10 (row <= 10; i <= row). При втория пример може би се бъркаш малко. Отново имаме 10 реда, отново i = 0, но този път при втория цикъл имаме i < row, което в случая означава, че не обхваща  генерирания ред, защото нямаме =. Така първия цикъл отпечатва първи ред, но тъй като втория цикъл не обхваща реда, защото имаме i < row, звездичката я принтира на ред 0. При ред 10, вторият цикъл не обхваща десетия ред, а само деветия, затова я принтира на ред 9, но ние отново имаме интервал от 0 до 9, което прави 10 реда. При третия пример Ви обясних с коментара ми по-горе. Дано съм помогнал :)


 
1
03/06/2018 22:36:47
BalioFVFX avatar BalioFVFX 40 Точки

Идеята е, че когато вътрешният цикъл приключи, външният започва отначало, като добавя единица на row, докато row не стане по-малко или равно на даденото число в случая 10.

Този код (1):

        for (int row = 1; row <= 10; row++) {
            for (int i = 1; i <= row; i++) {
                System.out.print("*");
            }
            System.out.println();
        }

Получаваме една звездичка в началото, защото вътрешнят цикъл с променливата i която винаги има начална стойност 1 започва от 1, докато е по-малко или равно на row, тоест първият път ще принтира една звездичка, защото ще се завърти само един път. Идва ред на външният цикъл, който увеличава стойността на row с единица, следователно вътрешният цикъл се върти от 1 до 2 включително защото имаме <= (по-малко или равно).
код (2):

        for (int row = 1; row <= 10; row++) {
            for (int i = 0; i < row; i++) {
                System.out.print("*");
            }
            System.out.println();
        }

Тук разликата е, че вътрешният цикъл се върти от 0 до row (в началото row = 1) но не включително, защото ( i < row ), а не < (i <= row), ако беше включително щеше да изпечата две звездички.

Код (3):

        for (int row = 1; row <= 10; row++) {
            for (int i = 0; i <= row; i++) {
                System.out.print("*");
            }
            System.out.println();
        }

Получаваме 2 звездички, защото i = 0, докато е по-малко или равно на row (което е 1), тоест въртим два пъти цикъла първият път.

0
03/06/2018 23:11:28
zonax avatar zonax 4 Точки

BalioFVFX, тъй като виждам, че сте доста навътре с нещата, мога ли чрез Facebook/Skype/т.н. да Ви питам нещо на лично?

0
BalioFVFX avatar BalioFVFX 40 Точки

Можеш да намериш скайпа ми в профила ми.

0
svetoslav_halachev avatar svetoslav_halachev 1 Точки

BalioFVFX, благодаря за отговора. Може би моето объркването идваше от факта,че според мен в символа "<=" равното влиза в сила само когато се стигне до последното завъртане, в този случай дали да е до 10 или до 9, не знаех че важи при всяко завъртане. Сега вече ми стана ясно.

0
BalioFVFX avatar BalioFVFX 40 Точки

При всяко завъртане важи.

0