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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.