JavaRush /Java Blog /Random-TL /Sumasanga sa Java

Sumasanga sa Java

Nai-publish sa grupo
Sa artikulong ito titingnan natin ang konsepto ng pagsasanga sa mga programa sa computer sa pangkalahatan at ang mga nakasulat sa Java. Pag-usapan natin ang mga istruktura ng kontrol tulad ng:
  • if-then(o if)
  • if-then-else(o if-else)
  • switch-case
Sumasanga sa Java - 1

Nagsasanga-sanga

Magsimula tayo sa mga pangunahing konsepto. Ang anumang programa ay isang hanay ng mga utos na pinaandar ng isang computer. Kadalasan, ang mga utos ay isinasagawa nang sunud-sunod, isa-isa. Bahagyang hindi gaanong madalas (ngunit madalas pa rin) ang mga sitwasyon na lumitaw kapag kailangan mong baguhin ang sunud-sunod na daloy ng mga utos ng programa. Minsan, depende sa ilang mga kundisyon, maaaring kailanganin na magsagawa ng isang bloke ng mga utos sa halip na isa pa. At kapag nagbago ang mga kundisyong ito, gawin ang kabaligtaran. Halimbawa, mayroong ilang mga site na ipinagbabawal para sa mga taong wala pang 18 taong gulang na bisitahin. Karaniwan, kapag bumisita sa naturang mapagkukunan sa unang pagkakataon, ang gumagamit ay binabati ng ilang anyo kung saan ang gumagamit ay binigyan ng babala tungkol sa limitasyon ng edad at hiniling na ipasok ang kanyang petsa ng kapanganakan. Pagkatapos, depende sa data na ipinasok ng user, papayagan siyang pumasok sa mapagkukunan o hindi. Ang functionality na ito ay ibinibigay ng karaniwang tinatawag na branching. Magbigay tayo ng isa pang pagkakatulad. Isipin natin ang ating sarili sa sangang-daan ng pitong kalsada. Kami ay nahaharap sa isang pagpipilian: lumiko sa kaliwa o kanan, o dumiretso. Ang aming pagpili ay batay sa ilang mga kundisyon. Wala rin tayong pagkakataong dumaan sa ilang kalsada nang sabay-sabay. Yung. depende sa ilang kundisyon, kailangan nating pumili ng isang kalsada. Ang parehong prinsipyo ay naaangkop sa pagsasanga. Ngayon subukan nating magbigay ng kahulugan ng pagsasanga. Ang branching ay isang algorithmic na disenyo kung saan, depende sa katotohanan ng ilang kundisyon, isa sa ilang mga pagkakasunud-sunod ng mga aksyon ay ginaganap. Ang branching ay ipinatupad (malamang) sa ganap na lahat ng mga programming language. Ang Java programming language ay may ilang tinatawag na control constructs na nagbibigay-daan sa iyong ipatupad ang branching sa iyong program. Mayroong 3 tulad na mga konstruksyon sa programming language:
  • Operatorif-then
  • Operatorif-then-else
  • Operator ng Ternary? :
Sa artikulong ito titingnan natin ang if-elseat mga operator switch-case.

kung-kung gayon

Operator if-then, o marahil ifang pinakakaraniwang operator. Ang pananalitang “oo, isulat ang 1 kung” ay naging popular na. Ang operator ifay may sumusunod na istraktura:
if (bool_condition) {
	statement
}
Sa disenyong ito:
  • bool_conditionay isang boolean na expression na nagsusuri sa true o false. Ang ekspresyong ito ay tinatawag na kondisyon.
  • statement— isang utos (maaaring mayroong higit sa isa) na dapat isagawa kung ang kundisyon ay totoo ( bool_statement==true)
Ang konstruksiyon na ito ay mababasa nang ganito:

Если (bool_condition), то {statement}
Narito ang ilang halimbawa:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    }
}
Sa program na ito, hinihiling sa user na ipasok ang porsyento ng singil ng baterya sa kanyang smartphone. Kung wala pang 10 porsiyento ng singil ang nananatili, babalaan ng programa ang user tungkol sa pangangailangang singilin ang smartphone. Ito ay isang halimbawa ng pinakasimpleng disenyo if. Kapansin-pansin na kung ang variable na `a` ay mas malaki sa o katumbas ng 10, walang mangyayari. Ang programa ay patuloy na ipapatupad ang code na sumusunod sa if. Tandaan din na sa kasong ito, ang construct ifay mayroon lamang isang sequence ng mga aksyon na ipapatupad: i-print ang teksto, o wala. Ito ay isang variation ng branching na may isang "branch". Ito ay minsan kailangan. Halimbawa, kapag gusto nating protektahan ang ating sarili mula sa mga maling halaga. Halimbawa, hindi natin malalaman ang bilang ng mga titik sa isang string kung ang string ay null. Mga halimbawa sa ibaba:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    }
}
Bilang resulta ng pagpapatupad ng pangunahing pamamaraan, ang mga sumusunod ay magiging output sa console:

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
Salamat sa pagsuri na string != null, nagawa naming maiwasan ang mga error sa programa. At walang gagawin sa mga kaso kung saan ang variable stringay katumbas ng null.

kung sakali ay

Kung, sa ilalim ng normal na mga kondisyon, ifang isang programa ay may pagpipilian: "gumawa ng isang bagay o hindi gumawa ng anuman," kung gayon kapag if-elsepumipili ng isang programa ito ay bumaba sa "paggawa ng alinman sa isang bagay o iba pa." Mawawala ang opsyong "do nothing". Mayroong dalawa o higit pang variant ng execution (o bilang ng mga branch) na may ganitong uri ng branching. Isaalang-alang natin ang kaso kapag mayroong dalawang pagpipilian. Pagkatapos ang istraktura ng kontrol ay may sumusunod na anyo:
if (bool_condition) {
	statement1
} else {
	statement2
}
dito:
  • bool_statementay isang boolean na expression na nagsusuri sa true o false. Ang ekspresyong ito ay tinatawag na kondisyon.
  • statement1— isang utos (maaaring mayroong higit sa isa) na dapat isagawa kung ang kundisyon ay totoo ( bool_statement==true)
  • statement2— isang utos (maaaring mayroong higit sa isa) na dapat isagawa kung mali ang kundisyon ( bool_statement==false)
Ang konstruksiyon na ito ay mababasa nang ganito:

Если (bool_condition), то {statement1}
Иначе {statement2}
Narito ang isang halimbawa:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    } else {
        System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
    }
}
Ang parehong halimbawa tungkol sa antas ng baterya sa isang smartphone. Kung ang huling pagkakataon ay nagbabala lamang ang programa tungkol sa pangangailangang singilin ang smartphone, sa pagkakataong ito ay mayroon kaming karagdagang abiso. Tingnan natin ang isang ito if:
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
Kung a < 10totoo (ang antas ng baterya ay mas mababa sa 10), magpi-print ang program ng isang teksto. Kung hindi, kung ang kundisyon a < 10ay hindi natutugunan, ang programa ay maglalabas ng ganap na magkakaibang teksto. Tapusin din natin ang aming pangalawang halimbawa, kung saan ipinakita namin ang bilang ng mga titik sa isang linya. Huling beses na ang programa ay hindi naglabas ng anuman kung ang naipasa na string ay katumbas ng null. Ayusin natin ito sa pamamagitan ng paggawa ng normal ifsa if-else:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    } else {
        System.out.println("Ошибка! Переданная строка равна null!");
    }
}
Sa pamamaraan , nagdagdag kami ng isang bloke printStringSizesa konstruksyon . Ngayon, kung patakbuhin natin ang programa, ito ay maglalabas sa console hindi 2 linya, ngunit 4, bagaman ang input (paraan ) ay nananatiling pareho sa huling pagkakataon. Ang teksto na ilalabas ng programa: ifelsemain

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
Ang mga sitwasyon ay katanggap-tanggap kapag elseang mga ito ay sinusunod hindi ng mga utos ng pagpapatupad, ngunit ng isa pang if. Pagkatapos ang konstruksiyon ay tumatagal ng sumusunod na anyo:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
} else {
	statementN+1
}
Ang disenyo na ito ay may ilang mga kundisyon:
  • bool_condition1
  • bool_condition2
  • bool_conditionN
Ang bilang ng mga naturang kundisyon ay hindi limitado. Ang bawat kundisyon ay may sariling mga utos:
  • pahayag1
  • pahayag2
  • pahayagN
Ang bawat isa statementay maaaring maglaman ng 1 o higit pang mga linya ng code. Ang mga kondisyon ay sinuri ng isa-isa. Kapag natukoy na ang unang totoong kundisyon, isasagawa ang isang serye ng mga utos na "nakatali" sa totoong kundisyon. Pagkatapos isagawa ang mga utos na ito, lalabas ang program sa block if, kahit na may mga susunod pang pagsusuri. Ang expression na "statementN+1" ay isasagawa kung wala sa mga kundisyon na tinukoy sa itaas ang totoo. Ang konstruksiyon na ito ay mababasa nang ganito:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
Ang huling linya sa kasong ito ay opsyonal. Magagawa mo nang wala ang huling nag-iisa else. At pagkatapos ay ang disenyo ay kukuha ng sumusunod na anyo:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
At ito ay magbabasa ng ganito:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Alinsunod dito, kung wala sa mga kundisyon ang totoo, hindi isang solong utos ang isasagawa. Lumipat tayo sa mga halimbawa. Bumalik tayo sa sitwasyon sa antas ng pagsingil sa smartphone. Sumulat tayo ng isang programa na magpapaalam sa may-ari nang mas detalyado tungkol sa antas ng pagsingil ng kanyang device:
public static void main(String[] args) {
    String alert5 = "Я скоро отключусь, но помни меня бодрым";
    String alert10 = "Я так скучаю по напряжению в моих жилах";
    String alert20 = "Пора вспоминать, где лежит зарядка";
    String alert30 = "Псс, пришло время экономить";
    String alert50 = "Хм, больше половины израсходовали";
    String alert75 = "Всё в порядке, заряда больше половины";
    String alert100 = "Я готов к приключениям, если что..";
    String illegalValue = "Такс, кто-то ввел некорректное meaning";

    Scanner scanner = new Scanner(System.in);
    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a <= 0 || a > 100) {
        System.out.println(illegalValue);
    } else if (a < 5) {
        System.out.println(alert5);
    } else if (a < 10) {
        System.out.println(alert10);
    } else if (a < 20) {
        System.out.println(alert20);
    } else if (a < 30) {
        System.out.println(alert30);
    } else if (a < 50) {
        System.out.println(alert50);
    } else if (a < 75) {
        System.out.println(alert75);
    } else if (a <= 100) {
        System.out.println(alert100);
    }
}
Halimbawa, sa kasong ito, kung ang gumagamit ay pumasok sa 15, ang programa ay ipapakita sa screen: "Panahon na upang tandaan kung nasaan ang charger." Sa kabila ng katotohanan na ang 15 ay mas mababa at 30 at 50 at 75 at 100, ang output sa screen ay magiging 1 lamang. Sumulat tayo ng isa pang application na magpi-print sa console kung anong araw ng linggo ito:
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    if (dayOfWeek == DayOfWeek.SUNDAY) {
        System.out.println("Сегодня воскресенье");
    } else if (dayOfWeek == DayOfWeek.MONDAY) {
        System.out.println("Сегодня понедельник");
    } else if (dayOfWeek == DayOfWeek.TUESDAY) {
        System.out.println("Сегодня вторник");
    } else if (dayOfWeek == DayOfWeek.WEDNESDAY) {
        System.out.println("Сегодня среда");
    } else if (dayOfWeek == DayOfWeek.THURSDAY) {
        System.out.println("Сегодня четверг");
    } else if (dayOfWeek == DayOfWeek.FRIDAY) {
        System.out.println("Сегодня пятница");
    } else if (dayOfWeek == DayOfWeek.SATURDAY) {
        System.out.println("Сегодня суббота");
    }
}
Ito ay maginhawa, siyempre, ngunit ang kasaganaan ng monotonous na teksto ay medyo nakakasilaw sa iyong mga mata. Sa mga sitwasyon kung saan mayroon kaming isang malaking bilang ng mga pagpipilian, mas mahusay na gamitin ang operator, na tatalakayin sa ibaba.

switch-case

Ang isang alternatibo sa bold ifna may maraming sangay ay ang operator switch-case. Mukhang sinasabi ng operator na ito "Kaya, mayroon kaming variable na ito. Tingnan, kung ang halaga nito ay katumbas ng `x`, pagkatapos ay gagawin namin ito at iyon, kung ang halaga nito ay katumbas ng `y`, kung gayon ay gagawin namin ito nang iba, at kung hindi ito katumbas ng alinman sa itaas, gagawin lang namin ganito... ” Ang operator na ito ay may sumusunod na istraktura.
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
Tingnan natin ang istrakturang ito nang mas detalyado. argument ay isang variable na ang halaga ay ihahambing natin sa hypothetical na iba't ibang mga opsyon. Ang variable ay dapat na final. Nararapat ding sabihin na switchhindi sinusuportahan ng operator ang anumang uri ng data bilang argumento. Ang mga wastong uri ay nakalista sa ibaba:
  • byte at Byte
  • maikli at maikli
  • int at Integer
  • char at Character
  • enum
  • String
case value1 (value2, valueN)- ito ay mga halaga, mga tiyak na constants kung saan namin inihahambing ang halaga ng isang variable argument. Gayundin, ang bawat kaso ay tumutukoy sa isang hanay ng mga utos na kailangang isagawa. statement1, statement2, statementNay mga utos na kailangang isagawa kung argumentito ay magiging katumbas ng isa sa value. Halimbawa, kung argumentito ay katumbas ng value2, pagkatapos ay ipapatupad ng programa ang statement2. defaultat default_statementmga "default na halaga". Kung argumentito ay hindi katumbas ng alinman sa mga ipinakita value, ang sangay ay ma-trigger defaultat ang utos ay isasagawa default_statement. defaultat default_statementmga opsyonal na katangian ng operator switch-case. break— mapapansin mo na sa dulo ng bawat bloke ng kaso ay may isang pahayag break. Opsyonal din ang operator na ito at nagsisilbing pagkakaiba sa code ng iba't ibang kaso. Minsan kinakailangan na magsagawa ng parehong mga aksyon sa iba't ibang mga kaso: pagkatapos ay maaaring pagsamahin ang mga kasong ito. Sa kasong ito, ang keyword breakay tinanggal, at ang istraktura ng operator switch-caseay magiging ganito:
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
Kapansin-pansin na walang operator sa pagitan ng `case valueX:` at `case valueY:` break. Dito, kung argumentito ay katumbas ng value1, ito ay isasagawa statement1. At kung ang argumento ay katumbas valueXng alinman sa valueY, statementXY. I-dilute natin ang mahirap na maunawaang teorya sa madaling maunawaang kasanayan. Isulat muli natin ang halimbawa sa mga araw ng linggo gamit ang operator switch-case.
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
            System.out.println("Сегодня воскресенье");
            break;
        case MONDAY:
            System.out.println("Сегодня понедельник");
            break;
        case TUESDAY:
            System.out.println("Сегодня вторник");
            break;
        case WEDNESDAY:
            System.out.println("Сегодня среда");
            break;
        case THURSDAY:
            System.out.println("Сегодня четверг");
            break;
        case FRIDAY:
            System.out.println("Сегодня пятница");
            break;
        case SATURDAY:
            System.out.println("Сегодня суббота");
            break;
    }
}
Ngayon ay magsulat tayo ng isang programa na nagpapakita kung ngayon ay isang araw ng linggo o isang katapusan ng linggo gamit ang operator switch-case.
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
        case SATURDAY:
            System.out.println("Сегодня выходной");
            break;
        case FRIDAY:
            System.out.println("Завтра выходной");
            break;
        default:
            System.out.println("Сегодня рабочий день");
            break;

    }
}
Hayaan akong magpaliwanag ng kaunti. Sa programang ito nakukuha namin ang enum DayOfWeek, na nagsasaad ng kasalukuyang araw ng linggo. Susunod, tinitingnan namin kung ang halaga ng aming variable ay katumbas ng dayOfWeekmga halaga ng SUNDAYalinman sa SATURDAY. Kung ito ang kaso, ipinapakita ng programa ang "Today is a day off". Kung hindi, pagkatapos ay suriin namin kung ang halaga ng variable ay katumbas ng dayOfWeekhalaga ng FRIDAY. Kung ito ang kaso, ipinapakita ng programa ang "Bukas ay isang day off." Kung sa kasong ito ay wala, kung gayon mayroon kaming kaunting mga pagpipilian, anumang natitirang araw ay isang karaniwang araw, kaya bilang default, kung ngayon ay HINDI Biyernes, HINDI Sabado at HINDI Linggo, ang programa ay magpapakita ng "Ngayon ay isang araw ng trabaho."

Konklusyon

Kaya, sa artikulong ito ay tiningnan namin kung ano ang sumasanga sa isang computer program. Nalaman din namin kung anong mga istruktura ng kontrol ang ginagamit upang ipatupad ang pagsasanga sa Java. Tinalakay namin ang mga disenyo tulad ng:
  • if-then
  • if-then-else
  • switch-case
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION