JavaRush /Java Blog /Random-TK /Java-da şahamça

Java-da şahamça

Toparda çap edildi
Bu makalada, umuman alanyňda, kompýuter programmalarynda we Java-da ýazylanlarda şahalanmak düşünjesine serederis. Gözegçilik gurluşlary barada gürleşeliň:
  • if-then(ýa-da if)
  • if-then-else(ýa-da if-else)
  • switch-case
Java-da şahamça - 1

Şahamça

Esasy düşünjelerden başlalyň. Islendik programma, kompýuter tarapyndan ýerine ýetirilýän buýruklar toplumydyr. Köplenç buýruklar yzygiderli ýerine ýetirilýär. Programma buýruklarynyň yzygiderli akymyny üýtgetmeli bolanyňyzda birneme az (ýöne henizem ýygy-ýygydan) ýagdaýlar ýüze çykýar. Käwagt, käbir şertlere baglylykda buýruklaryň bir toparyny beýlekisine ýerine ýetirmek zerur bolup biler. Bu şertler üýtgese, tersine ediň. Mysal üçin, 18 ýaşa ýetmedikleriň girmegi gadagan edilen birnäçe saýt bar. Adatça, şunuň ýaly çeşmä ilkinji gezek baryp göreninde, ulanyja ýaş çäkleri barada duýduryş berlen we doglan senesini girizmegi haýyş edilýän görnüşde garşylanýar. Soňra, ulanyjynyň girizen maglumatlaryna baglylykda, oňa çeşmä girmäge rugsat berler ýa-da bolmaz. Bu funksiýa, adatça şahalanmak diýilýän zat bilen üpjün edilýär. Başga bir meňzeşlik bereliň. Sevenedi ýoluň çatrygynda özümizi göz öňüne getireliň. Bizde bir saýlaw bar: çepe ýa saga öwrüliň ýa-da göni gidiň. Biziň saýlamagymyz belli şertlere esaslanýar. Şeýle hem, bir wagtyň özünde birnäçe ýol geçmäge mümkinçiligimiz ýok. Bular. käbir şertlere baglylykda bir ýol saýlamaly bolarys. Edil şonuň ýaly ýörelge şahalara degişlidir. Indi şahanyň kesgitlemesini bermäge synanyşalyň. Şahalaşdyrmak algoritmiki dizaýn bolup, onda käbir şertleriň hakykatyna baglylykda hereketleriň yzygiderliliginiň biri ýerine ýetirilýär. Şahamça programma programmalarynyň hemmesinde amala aşyrylýar (ähtimal). Java programmirleme dilinde, programmaňyzda şahalandyrmagy amala aşyrmaga mümkinçilik berýän birnäçe dolandyryş gurluşlary bar. Programmirleme dilinde şeýle 3 gurluş bar:
  • Operatorif-then
  • Operatorif-then-else
  • Üçünji operator? :
if-elseBu makalada operatorlara we operatorlara serederis switch-case.

eger-de bolsa

Operator if-then, ýa-da ifiň köp ýaýran operator. “Hawa, 1 ýazyň” aňlatmasy eýýäm meşhur boldy. Operatoryň ifaşakdaky gurluşy bar:
if (bool_condition) {
	statement
}
Bu dizaýnda:
  • bool_conditiondogry ýa-da ýalňyş diýip baha berýän aňlatma. Bu aňlatma şert diýilýär.
  • statement- şert dogry bolsa ýerine ýetirilmeli buýruk (birden köp bolup biler bool_statement==true)
Bu gurluşygy şeýle okamak mümkin:

Если (bool_condition), то {statement}
Ine käbir mysallar:
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 процентов, подключите ваш смартфон к зарядному устройству");
    }
}
Bu programmada ulanyjydan smartfonyna batareýa zarýadynyň göterimini girizmek haýyş edilýär. Eger zarýadyň 10 göteriminden az bolsa, programma ulanyja smartfona zarýad bermegiň zerurlygy barada duýduryş berer. Bu iň ýönekeý dizaýnyň mysaly if. Üns bermelidiris, eger "a" üýtgeýjisi 10-dan uly ýa-da deň bolsa, hiç zat bolmaz. Programma aşakdaky kody ýerine ýetirmegi dowam etdirer if. Şeýle hem, bu ýagdaýda gurluşyň ifýerine ýetirmek üçin diňe bir yzygiderliligine üns beriň: teksti çap ediň ýa-da hiç zat etmäň. Bu bir “şaha” bilen şahalanmagyň dürli görnüşidir. Bu käwagt zerur bolýar. Mysal üçin, özümizi nädogry gymmatlyklardan goramak islänimizde. Mysal üçin, setir bolsa, setirdäki harplaryň sanyny bilip bilmeris null. Aşakdaky mysallar:
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());
    }
}
Esasy usuly ýerine ýetirmegiň netijesinde, konsola aşakdakylar çykar:

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
Barlamagyň netijesinde string != nullprogrammadaky ýalňyşlyklardan gaça durmagy başardyk. stringÜýtgeýjiniň deň bolan ýagdaýynda hiç zat etme null.

if-then-else

Adaty ýagdaýda ifprogrammanyň saýlamagy bar bolsa: “bir zat et ýa-da hiç zat etme”, if-elseprogramma saýlamakda “bir zady ýa-da başga bir zady etmek” bolýar. "Hiç zat etme" opsiýasy ýitýär. Bu görnüşli şahalandyrma bilen ýerine ýetirişiň iki ýa-da has köp görnüşi (ýa-da şahalaryň sany) bar. Iki wariant bar bolsa, meselä seredeliň. Soňra dolandyryş gurluşynyň aşakdaky görnüşi bar:
if (bool_condition) {
	statement1
} else {
	statement2
}
Ine:
  • bool_statementdogry ýa-da ýalňyş diýip baha berýän aňlatma. Bu aňlatma şert diýilýär.
  • statement1- şert dogry bolsa ýerine ýetirilmeli buýruk (birden köp bolup biler bool_statement==true)
  • statement2- şert ýalňyş bolsa ýerine ýetirilmeli buýruk (birden köp bolup biler bool_statement==false)
Bu gurluşygy şeýle okamak mümkin:

Если (bool_condition), то {statement1}
Иначе {statement2}
Ine bir mysal:
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");
    }
}
Smartfonda batareýanyň derejesi barada şol bir mysal. Diňe geçen gezek programma diňe smartfona zarýad bermegiň zerurlygy barada duýduryş beren bolsa, bu gezek goşmaça duýduryş bar. Geliň, şu meselä seredeliň if:
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
Eger a < 10dogry bolsa (batareýanyň derejesi 10-dan pes), programma bir teksti çap eder. Otherwiseogsam, şert a < 10ýerine ýetirilmese, programma düýbünden başga tekst çykarar. Bir setirde harplaryň sanyny görkezen ikinji mysalymyzy hem jemläliň. Geçen gezek geçen setir deň bolsa, programma hiç zat çykarmady null. ifAdaty birine öwrüp, muny düzedeliň 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!");
    }
}
Usulda , printStringSizegurluşyk üçin ifbir blok goşduk else. Indi, programmany işledip görsek, konsola 2 setir däl-de, 4 çykar, giriş (usul main) geçen gezekki ýaly galsa-da. Programmanyň çykarjak teksti:

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
elseExecutionagdaýlar ýerine ýetiriş buýruklary bilen däl-de, başga biri tarapyndan ýerine ýetirilende kabul ederliklidir if. Soňra gurluşyk aşakdaky görnüşi alýar:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
} else {
	statementN+1
}
Bu dizaýnyň birnäçe şerti bar:
  • bool_condition1
  • bool_condition2
  • bool_conditionN
Şeýle şertleriň sany çäkli däldir. Her şertiň öz buýruklary bar:
  • beýannama1
  • beýannama2
  • beýannamaN
Olaryň hersinde statement1 ýa-da has köp setir bolup biler. Şertler birin-birin barlanýar. Ilkinji hakyky şert kesgitlenenden soň, hakyky ýagdaýa “bagly” buýruklar ýerine ýetiriler. ifBu buýruklary ýerine ýetirensoň, öňde has köp barlag bar bolsa-da, programma blokdan çykar . “StatementN + 1” aňlatmasy, ýokarda kesgitlenen şertleriň hiç biri dogry bolmasa ýerine ýetiriler. Bu gurluşygy şeýle okamak mümkin:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
Bu ýagdaýda iň soňky setir hökmany. Iň soňky ýalňyzlyksyz edip bilersiňiz else. Soň bolsa dizaýn aşakdaky görnüşde bolar:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
Munuň ýaly okalýar:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Şoňa laýyklykda şertleriň hiç biri dogry bolmasa, ýekeje buýruk hem ýerine ýetirilmez. Mysallara geçeliň. Smartfonda zarýad derejesi bilen ýagdaýa gaýdyp geleliň. Geliň, enjamynyň zarýad derejesi barada has giňişleýin maglumat berjek bir programma ýazalyň:
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);
    }
}
Mysal üçin, bu ýagdaýda ulanyjy 15-e girse, programma ekranda görkeziler: "Zarýad berijiniň nirededigini ýada salmagyň wagty geldi." 15-den az we 30, 50 we 75 we 100-e garamazdan, ekranda çykyş diňe 1 bolar. Geliň, hepdäniň haýsy güni konsola çap ediljek başga bir programma ýazalyň:
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("Сегодня суббота");
    }
}
Elbetde amatly, ýöne monoton tekstiň köp bolmagy gözüňizi birneme geň galdyrýar. Köp sanly wariantymyz bar bolsa, aşakda ara alnyp maslahatlaşyljak operatory ulanmak has gowudyr.

wyklýuçatel

Köp şahasy bilen goýy bolmagyň alternatiwasy ifoperatordyr switch-case. Bu operator “Diýmek, bizde bu üýtgeýji bar. Seret, eger onuň bahasy "x" bilen deň bolsa, biz muny edýäris we eger-de onuň bahasy "y" -a deň bolsa, biz ony başgaça edýäris we ýokardakylaryň hiç birine deň däl bolsa, diňe edýäris ýaly ... ”Bu operatoryň aşakdaky gurluşy bar.
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
Geliň bu gurluşa has jikme-jik seredeliň. argument bahasy gipotetiki dürli wariantlar bilen deňeşdirjek üýtgeýjidir. Üýtgeýji bolmaly final. switchOperatoryň haýsydyr bir maglumat görnüşini argument hökmünde goldamaýandygyny hem bellemelidiris . Dogry görnüşleri aşakda görkezilen:
  • baýt we baýt
  • gysga we gysga
  • int we Integer
  • nyşan we nyşan
  • enum
  • Setir
case value1 (value2, valueN)- bular üýtgeýjiniň bahasyny deňeşdirýän aýratynlyklardyr argument. Şeýle hem, her bir ýagdaý ýerine ýetirilmeli buýruklar toplumyny kesgitleýär. statement1,, birine deň bolsa, statement2ýerine statementNýetirilmeli buýruklardyr . Mysal üçin, deň bolsa , programma ýerine ýetirer . we "başlangyç bahalar". Eger hödürlenenleriň hiç birine deň bolmasa , şahamça dörediler we buýruk ýerine ýetiriler . we operatoryň islege bagly atributlarydyr . - her kazyýet işiniň ahyrynda jümläniň bardygyny görüp bilersiňiz . Bu operator goşmaça bolup, dürli ýagdaýlaryň koduny tapawutlandyrmak üçin hyzmat edýär. Käwagt dürli ýagdaýlarda şol bir hereketleri etmeli bolýar: soň bu ýagdaýlar birleşdirilip bilner. Bu ýagdaýda açar söz aýrylýar we operatoryň gurluşy şeýle bolar: argumentvalueargumentvalue2statement2defaultdefault_statementargumentvaluedefaultdefault_statementdefaultdefault_statementswitch-casebreakbreakbreakswitch-case
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
"Case valueX:" bilen "case valueY:" arasynda operatoryň ýokdugyny bellemelidiris break. Bu ýerde, argumentdeň bolsa value1, ýerine ýetiriler statement1. Jedel ikisine-de deň valueXbolsa valueY, statementXY. Geliň, düşünmek kyn teoriýany aňsat amallara öwüreliň. Mysallary operatoryň kömegi bilen hepdäniň günleri bilen täzeden ýazalyň 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;
    }
}
Indi operatoryň kömegi bilen şu gün dynç güni ýa-da dynç güni bolandygyny görkezýän programma ýazalyň 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;

    }
}
Biraz düşündirip bereýin. enum DayOfWeekHepdäniň häzirki gününi aňladýan bu programmada alýarys . dayOfWeekOndan soň, üýtgeýjimiziň bahasynyň ikisiniň bahasyna deňdigini SUNDAYýa-da ýokdugyny görýäris SATURDAY. Şeýle bolsa, programma “Şu gün dynç güni” görkezilýär. Notok bolsa, üýtgeýjiniň bahasynyň dayOfWeekbahasyna deňdigini ýa-da ýokdugyny barlaýarys FRIDAY. Şeýle bolsa, programmada “Ertir dynç güni” görkezilýär. Bu ýagdaýda ýok bolsa, onda mümkinçiliklerimiz az, galan günler dynç güni, şonuň üçin bu gün anna güni däl, şenbe däl we ýekşenbe däl bolsa, programma “Şu gün iş güni” görkeziler.

Netije

Şeýlelik bilen, bu makalada kompýuter programmasynda haýsy şahanyň bardygyny gördük. Şeýle hem, Java-da şahalanmagy amala aşyrmak üçin haýsy dolandyryş gurluşlarynyň ulanylýandygyny kesgitledik. Designsaly dizaýnlary ara alyp maslahatlaşdyk:
  • if-then
  • if-then-else
  • switch-case
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION